zoukankan      html  css  js  c++  java
  • CentOS 7部署 Ceph分布式存储架构

    SE4nJH

    1.概述

    随着OpenStack日渐成为开源云计算的标准软件栈,Ceph也已经成为OpenStack的首选后端存储。Ceph是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式文件系统。

    1. ceph官方文档 http://docs.ceph.org.cn/
    2. ceph中文开源社区 http://ceph.org.cn/

    Ceph是一个开源的分布式文件系统。因为它还支持块存储、对象存储,所以很自然的被用做云计算框架openstack或cloudstack整个存储后端。当然也可以单独作为存储,例如部署一套集群作为对象存储、SAN存储、NAS存储等。

    1.1 ceph支持

    1. 对象存储:即RADOSGW,兼容S3接口。通过REST API上传、下载文件。
    2. 文件系统:POSIX接口。可以将CEPH集群看做一个共享文件系统挂载到本地。
    3. 块存储:即RBD。有KERNEL RBD和LIBRBD两种使用方式。支持快照、克隆。相当于一块硬盘挂到本地,用法和用途和硬盘一样。比如在OPENSTACK项目里,CEPH的块设备存储可以对接OPENSTACK的后端存储。

    1.2 Ceph相比其它分布式存储有哪些优点?

    1. 统一存储
      • 虽然ceph底层是一个分布式文件系统,但由于在上层开发了支持对象和块的接口。所以在开源存储软件中,能够一统江湖。至于能不能千秋万代,就不知了。
    2. 高扩展性
      • 扩容方便、容量大。能够管理上千台服务器、EB级的容量。
    3. 可靠性强
      • 支持多份强一致性副本,EC。副本能够垮主机、机架、机房、数据中心存放。所以安全可靠。存储节点可以自管理、自动修复。无单点故障,容错性强。
    4. 高性能
      • 因为是多个副本,因此在读写操作时候能够做到高度并行化。理论上,节点越多,整个集群的IOPS和吞吐量越高。另外一点ceph客户端读写数据直接与存储设备(osd) 交互。

    1.3 Ceph各组件介绍

    1. Ceph OSDs: Ceph OSD 守护进程( Ceph OSD )的功能是存储数据,处理数据的复制、恢复、回填、再均衡,并通过检查其他OSD 守护进程的心跳来向 Ceph Monitors 提供一些监控信息。当 Ceph 存储集群设定为有2个副本时,至少需要2个 OSD 守护进程,集群才能达到 active+clean 状态( Ceph 默认有3个副本,但你可以调整副本数)。
    2. Monitors: Ceph Monitor维护着展示集群状态的各种图表,包括监视器图、 OSD 图、归置组( PG )图、和 CRUSH 图。 Ceph 保存着发生在Monitors 、 OSD 和 PG上的每一次状态变更的历史信息(称为 epoch 。
    3. MDSs: Ceph 元数据服务器( MDS )为 Ceph 文件系统存储元数据(也就是说,Ceph 块设备和 Ceph 对象存储不使用MDS )。元数据服务器使得 POSIX 文件系统的用户们,可以在不对 Ceph 存储集群造成负担的前提下,执行诸如 ls、find 等基本命令。

    2.Ceph实验集群部署

    2.1 主机准备 (禁用selinux, 关闭防火墙)

    192.168.20.19 ceph1         admin,osd, mon   作为管理和监控节点
    192.168.20.21 ceph2         osd,mds
    192.168.20.22 ceph3         osd,mds
    192.168.20.23 ceph-client   client
    
    1. ceph1作管理. osd. mon节点;
    2. ceph2和ceph3作osd mds;
    3. ceph-client客户端;

    前三台服务器增加一块硬盘/dev/sdb实验, 创建目录并挂载到/var/local/osd{1,2,3};

    
    [root@ceph1 ~]#mkfs.xfs  /dev/sdb
    [root@ceph1 ~]#mkdir -p /var/local/osd1
    [root@ceph1 ~]#mount /dev/sdb  /var/local/osd1/
    [root@ceph1 ~]#chown -R ceph:ceph /var/local/osd*
     
    [root@ceph2 ~]#mkfs.xfs  /dev/sdb
    [root@ceph2 ~]#mkdir -p /var/local/osd2
    [root@ceph2 ~]#mount /dev/sdb  /var/local/osd2/
    [root@ceph2 ~]#chown -R ceph:ceph /var/local/osd*
     
    [root@ceph3 ~]#mkfs.xfs  /dev/sdb
    [root@ceph3 ~]#mkdir -p /var/local/osd3
    [root@ceph3 ~]#mount /dev/sdb  /var/local/osd3/
    [root@ceph3 ~]#chown -R ceph:ceph /var/local/osd*
    
    systemctl stop firewalld > /dev/null 2>&1
    systemctl disable firewalld  > /dev/null 2>&1
    setenforce 0 > /dev/null 2>&1
    sed -i '/^SELINUX=/s/=.*/=disabled/' /etc/selinux/config
    

    2.2 编辑hosts文件

    规范系统主机名添加hosts文件实现集群主机名与主机名之间相互能够解析(host 文件添加主机名不要使用fqdn方式)可用hostnamectl set-hostname [name]设置分别打开各节点的/etc/hosts文件,加入这四个节点ip与名称的对应关系:

    # cat /etc/hosts
    192.168.20.19 ceph1
    192.168.20.21 ceph2
    192.168.20.22 ceph3
    192.168.20.23 ceph-client
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    

    SSH免密码登录

    在管理节点使用ssh-keygen 生成ssh keys 发布到各节点

    ssh-keygen #所有的输入选项都直接回车生成。
    ssh-copy-id ceph1
    ssh-copy-id ceph2
    ssh-copy-id ceph3
    ssh-copy-id ceph-client
    

    2.3 管理节点安装ceph-deploy工具

    第一步:增加 yum配置文件(各个节点都需要增加yum源)vim /etc/yum.repos.d/ceph.repo

    [Ceph]
    name=Ceph packages for $basearch
    baseurl=http://mirrors.163.com/ceph/rpm-jewel/el7/x86_64
    enabled=1
    gpgcheck=1
    type=rpm-md
    gpgkey=http://mirrors.163.com/ceph/keys/release.asc
    priority=1
     
    [Ceph-noarch]
    name=Ceph noarch packages
    baseurl=http://mirrors.163.com/ceph/rpm-jewel/el7/noarch
    enabled=1
    gpgcheck=1
    type=rpm-md
    gpgkey=http://mirrors.163.com/ceph/keys/release.asc
    priority=1
     
    [ceph-source]
    name=Ceph source packages
    baseurl=http://mirrors.163.com/ceph/rpm-jewel/el7/SRPMS
    enabled=1
    gpgcheck=1
    type=rpm-md
    gpgkey=http://mirrors.163.com/ceph/keys/release.asc
    priority=1
    

    或阿里的ceph源

    # cat /etc/yum.repos.d/Aliyun-ceph.repo
    [ceph]
    name=ceph
    baseurl=https://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/
    gpgcheck=0
    [ceph-noarch]
    name=cephnoarch
    baseurl=https://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/
    gpgcheck=0
    

    复制配置文件到其它节点和客户端

    scp /etc/yum.repos.d/ceph.repo ceph2:/etc/yum.repos.d/
    scp /etc/yum.repos.d/ceph.repo ceph3:/etc/yum.repos.d/
    scp /etc/yum.repos.d/ceph.repo ceph-client:/etc/yum.repos.d/
    

    在ceph1更新软件源并安装ceph-deploy 管理工具

    yum clean all &&yum -y install ceph-deploy
    

    2.4 创建monitor服务

    
    mkdir /etc/ceph && cd /etc/ceph
    ceph-deploy new xuegod67
    ls
    #mon安装在xuegod67节点
    #生成配置文件在当前目录下
    ceph.conf  ceph.log  ceph.mon.keyring
    Ceph配置文件、一个monitor密钥环和一个日志文件
    

    2.5 修改副本数

    配置文件的默认副本数从3改成2,这样只有两个osd也能达到active+clean状态,添加行osd_pool_default_size = 2

    [root@ceph1 ceph]# cat ceph.conf
    [global]
    fsid = 1523cad7-6f0e-4901-91b1-5f7aa173ec4f
    mon_initial_members = ceph1
    mon_host = 192.168.20.19
    auth_cluster_required = cephx
    auth_service_required = cephx
    auth_client_required = cephx
    osd_pool_default_size = 2
    

    2.6 在所有节点安装ceph

    (如果网络源安装失败,手工安装epel-release 然后安装yum –yinstall cep-release再yum –y install ceph ceph-radosgw)
    错误参考:https://blog.csdn.net/yenai2008/article/details/72457463

    # 以下都在ceph1操作
    ceph-deploy install ceph1 ceph2 ceph3 ceph-client
    # 安装ceph monitor
    ceph-deploy mon create ceph1
    # 收集节点的keyring文件
    ceph-deploy  gatherkeys ceph1
    

    2.7 部署osd服务

    添加osd节点 (所有osd节点执行)
    我们实验准备时已经创建目录/var/local/osd{id}

    2.8 创建激活osd(ceph1上执行)

    # 创建osd 
    ceph-deploy osd prepare ceph1:/var/local/osd1 ceph2:/var/local/osd2 ceph3:/var/local/osd3
    # 激活osd 
    ceph-deploy osd activate ceph1:/var/local/osd1 ceph2:/var/local/osd2 ceph3:/var/local/osd3
    #chown -R ceph:ceph /var/local/osd* 有些同学可能会忘记配置目录权限引起激活osd失败
     
    # 查看状态
    ceph-deploy osd list ceph1 ceph2 ceph3
    

    2.9 统一配置

    (用ceph-deploy把配置文件和admin密钥拷贝到所有节点,这样每次执行Ceph命令行时就无需指定monitor地址和ceph.client.admin.keyring了)

    # 以下都在ceph1执行
    [root@ceph1 ceph]# ceph-deploy admin ceph1 ceph2  ceph3 ceph-client
    # 会在4台主机的/etc/ceph目录下生成文件
    [root@ceph1 ceph]# cat /etc/ceph/ceph.client.admin.keyring
    [client.admin]
    key = AQBz9NdcgCunEhAAMPkfoZaaIpljaA7viB2TEg==
     
    # 各节点修改ceph.client.admin.keyring权限:
    [root@ceph1 ceph] chmod +r /etc/ceph/ceph.client.admin.keyring
    

    2.10 查看osd状态 ceph -s 或 ceph health

    [root@ceph1 ceph]# ceph -s
        cluster 1523cad7-6f0e-4901-91b1-5f7aa173ec4f
         health HEALTH_OK
         monmap e1: 1 mons at {ceph1=192.168.20.19:6789/0}
                election epoch 3, quorum 0 ceph1
          fsmap e6: 1/1/1 up {0=ceph3=up:active}, 1 up:standby
         osdmap e20: 3 osds: 3 up, 3 in
                flags sortbitwise,require_jewel_osds
          pgmap v67: 320 pgs, 3 pools, 7110 bytes data, 20 objects
                15682 MB used, 33439 MB / 49122 MB avail
                     320 active+clean
    

    2.11 部署mds服务

    [root@ceph1 ceph]# ceph-deploy mds create ceph2 ceph3#我们MDS安装2台
    [root@ceph1 ceph]# ceph mds stat #查看状态
    
    [root@ceph1 ceph]# ceph mds stat
    e6: 1/1/1 up {0=ceph3=up:active}, 1 up:standby
    

    2.12 集群状态

    [root@ceph1 ceph]# ceph -s
        cluster 1523cad7-6f0e-4901-91b1-5f7aa173ec4f
         health HEALTH_OK
         monmap e1: 1 mons at {ceph1=192.168.20.19:6789/0}
                election epoch 3, quorum 0 ceph1
          fsmap e6: 1/1/1 up {0=ceph3=up:active}, 1 up:standby
         osdmap e20: 3 osds: 3 up, 3 in
                flags sortbitwise,require_jewel_osds
          pgmap v67: 320 pgs, 3 pools, 7110 bytes data, 20 objects
                15682 MB used, 33439 MB / 49122 MB avail
                     320 active+clean
    

    以上基本上完成了ceph存储集群的搭建。

    3. 创建ceph文件系统

    
    [root@ceph1 ceph]# ceph fs ls   #创建之前
    No filesystems enabled
    创建存储池
    [root@ceph1 ceph]# ceph osd pool create cephfs_data <pg_num> 
    [root@ceph1 ceph]# ceph osd pool create cephfs_metadata <pg_num>
     
    [root@ceph1 ceph]# ceph osd pool create cephfs_data 128
    [root@ceph1 ceph]# ceph osd pool create cephfs_metadata 128
    

    其中:<pg_num> = 128 ,
    关于创建存储池
    确定 pg_num 取值是强制性的,因为不能自动计算。下面是几个常用的值:

    1. 少于 5 个 OSD 时可把 pg_num 设置为 128
    2. OSD 数量在 5 到 10 个时,可把 pg_num 设置为 512
    3. OSD 数量在 10 到 50 个时,可把 pg_num 设置为 4096
    4. OSD 数量大于 50 时,你得理解权衡方法、以及如何自己计算 pg_num 取值
    5. 自己计算 pg_num 取值时可借助 pgcalc 工具

    随着 OSD 数量的增加,正确的 pg_num 取值变得更加重要,因为它显著地影响着集群的行为、以及出错时的数据持久性(即灾难性事件导致数据丢失的概率)。

    3.1 创建文件系统

    创建好存储池后,你就可以用 fs new 命令创建文件系统了
    ceph fs new <fs_name> cephfs_metadata cephfs_data
    其中:<fs_name> = cephfs 可自定义

    [root@ceph1 ceph]# ceph fs new cephfs cephfs_metadata cephfs_data
    
    [root@ceph1 ceph]# ceph fs ls     #查看创建后的cephfs
    name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
    [root@ceph1 ceph]# ceph mds stat  #查看mds节点状态
    e6: 1/1/1 up {0=ceph3=up:active}, 1 up:standby
    #active是活跃的,另1个是处于热备份的状态
    

    3.2 挂载Ceph文件系统

    #在ceph-client执行
    [root@ceph-client ceph]# mkdir /ceph
     
    [root@ceph-client ceph]# yum install -y ceph-fuse
    [root@ceph-client ceph]# ceph-fuse -m 192.168.20.19:6789/ /ceph
    [root@ceph-client ceph]# df -Th
    Filesystem              Type            Size  Used Avail Use% Mounted on
    /dev/mapper/centos-root xfs              96G  4.1G   92G   5% /
    devtmpfs                devtmpfs        894M     0  894M   0% /dev
    tmpfs                   tmpfs           910M     0  910M   0% /dev/shm
    tmpfs                   tmpfs           910M   11M  900M   2% /run
    tmpfs                   tmpfs           910M     0  910M   0% /sys/fs/cgroup
    /dev/sda1               xfs            1014M  232M  783M  23% /boot
    tmpfs                   tmpfs           182M   28K  182M   1% /run/user/0
    ceph-fuse               fuse.ceph-fuse   48G   16G   33G  32% /ceph
    取消挂载
    [root@ceph-client ceph]# fusermount -u /ceph
    

    在这里想起没在/etc/fstab配置ceph1、ceph2、ceph3的sdb自动挂载。

    ceph在开源社区还是比较热门的,但是更多的是应用于云计算的后端存储。所以大多数在生产环境中使用ceph的公司都会有专门的团队对ceph进行二次开发,ceph的运维难度也比较大。但是经过合理的优化之后,ceph的性能和稳定性都是值得期待的。

    3.关于其他

    清理机器上的ceph相关配置

    1. 停止所有进程: stop ceph-all
    2. 卸载所有ceph程序:ceph-deploy uninstall [{ceph-node}]
    3. 删除ceph相关的安装包:ceph-deploy purge {ceph-node} [{ceph-data}]
    4. 删除ceph相关的配置:ceph-deploy purgedata {ceph-node} [{ceph-data}]
    5. 删除key:ceph-deploy forgetkeys
    6. 卸载ceph-deploy管理:yum -y remove ceph-deploy

    可以参考内容:http://blog.51cto.com/12270625/1887648

  • 相关阅读:
    idea 使用 maven 下载 jar 包,出现证书校验问题问题
    接口抽象类区别,Java中IO,BIO、NIO、AIO区别以及Files的常用方法
    JIT编译器,Java平台的不同及Java一次编写,随处运行
    什么是Java虚拟机,JVM分配的不同类型内存区域是什么?
    AOP底层原理及AOP操作
    抽象类能使用 final 修饰吗?
    抽象类必须要有抽象方法吗?
    String 类的常用方法都有那些?
    普通类和抽象类有哪些区别?
    如何将字符串反转?
  • 原文地址:https://www.cnblogs.com/cgqplus/p/15267281.html
Copyright © 2011-2022 走看看