ceph分布式存储实战(2)——从0开始创建第一个ceph集群

一、在每台节点的/etc/hosts文件中增加如下内容
192.168.89.101 ceph-node1
192.168.89.102 ceph-node2
192.168.89.103 ceph-node3

二、节点1配置免密码登录其他节点
[root@ceph-node1 ~]# yum install openssh-clients #安装ssh客户端
[root@ceph-node1 ~]# ssh-keygen #生成密钥对
[root@ceph-node1 ~]# ssh-copy-id ceph-node2 #发送公钥
[root@ceph-node1 ~]# ssh-copy-id ceph-node3 #发送公钥
[root@ceph-node1 ~]# ssh ceph-node2 #测试登录


二(补充)添加时间同步
需要注意:3台节点的时间请保持一致
crontab -e
*/5 * * * * /usr/sbin/ntpdate ntp.api.bz


三、将ceph存储库添加到ceph-deploy管理节点。 然后,安装ceph-deploy。
1、执行命令
sudo yum install -y yum-utils && sudo yum-config-manager --add-repo https://dl.fedoraproject.org/pub/epel/7/x86_64/ && sudo yum install --nogpgcheck -y epel-release && sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 && sudo rm /etc/yum.repos.d/dl.fedoraproject.org*

2、安装并启用EPEL存储库的额外软件包:
sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

3、使用以下命令将Ceph存储库添加到/etc/yum.repos.d/ceph.repo中的yum配置文件中:
cat >/etc/yum.repos.d/ceph.repo
[ceph-noarch]
name=Ceph noarch packages
baseurl=https://download.ceph.com/rpm/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

4、更新你的仓库并安装ceph-deploy:
sudo yum update
sudo yum install ceph-deploy

四、创建ceph集群
1、创建用于保存配置详细信息的目录
mkdir my-cluster
cd my-cluster

2、在您创建的用于保存配置详细信息的目录的管理节点上,使用ceph-deploy执行以下步骤。
ceph-deploy new ceph-node1

【说明:ceph-deploy工具的new命令会部署一个默认名称为ceph的新的ceph集群】

3、用ceph-deploy工具将Ceph软件的二进制包安装到所有的节点上,在管理节点(ceph-node1)上执行以下命令
ceph-deploy install ceph-node1 ceph-node2 ceph-node3

【在安装的过程中可能会遇到该问题:RuntimeError: NoSectionError: No section: 'ceph'
更ceph.repo改文件名:
    mv /etc/yum.repos.d/ceph.repo /etc/yum.repos.d/ceph-deploy.repo
解决方法参考参考这个链接:http://tracker.ceph.com/issues/12694】

4、在安装过程中遇到的问题
    4.1 在安装的过程中发生了错误提示:[ceph_deploy][ERROR ] RuntimeError: Failed to execute command: ceph --version
        原因:找不到ceph -v 这条命令
    4.2 重新执行安装命令后:
    [ceph-node1][WARNIN] Another app is currently holding the yum lock; waiting for it to exit...
    [ceph-node1][WARNIN]   The other application is: yum
    [ceph-node1][WARNIN]     Memory : 115 M RSS (507 MB VSZ)
    [ceph-node1][WARNIN]     Started: Wed Jan  3 03:01:23 2018 - 06:32 ago
    [ceph-node1][WARNIN]     State  : Sleeping, pid: 1742
    结果说是yum处于睡眠状态
    
    4.3 于是查看yum进程
    [root@ceph-node1 my-cluster]# ps -ef | grep yum
    root       1742      1  0 03:01 pts/0    00:00:03 /usr/bin/python /usr/bin/yum -y install ceph ceph-radosgw
    结果是在后台还运行,也就是还在安装中ceph中
    原因是:
        在安装的过程中,走这一步的时候[ceph-node1][DEBUG ] Downloading packages,是在下载ceph包,由于包的大小是200多M(当时看一下)
        加上网络太差,导致ceph-deploy工具超时。
    解决办法:
        不要强制杀掉yum进程,就让yum在后台慢慢装,等了一小段时间后,果然如此!
    查看:
        [root@ceph-node1 my-cluster]# ceph -v
        ceph version 10.2.10 (5dc1e4c05cb68dbf62ae6fce3f0700e4654fdbbe)
        [root@ceph-node1 my-cluster]# ceph
        ceph                   ceph-clsinfo           ceph-deploy            cephfs-data-scan       ceph-objectstore-tool  ceph-run
        ceph-authtool          ceph-conf              ceph-detect-init       cephfs-journal-tool    ceph-osd               ceph-syn
        ceph-bluefs-tool       ceph-create-keys       ceph-disk              cephfs-table-tool      ceph-post-file         
        ceph-brag              ceph-crush-location    ceph-disk-udev         ceph-mds               ceph-rbdnamer          
        ceph-client-debug      ceph-dencoder          cephfs                 ceph-mon               ceph-rest-api
        
    结果:ceph已经安装了

5、在管理节点上再次尝试第3步(用ceph-deploy工具将Ceph软件的二进制包安装到所有的节点上)
    执行命令:ceph-deploy install ceph-node1 ceph-node2 ceph-node3
    结果:ceph --version 顺利通过,此刻节点1也被安装完成,ceph-deploy工具自动在ceph-node2节点上进行安装
    [ceph-node1][INFO  ] Running command: ceph --version
    [ceph-node1][DEBUG ] ceph version 10.2.10 (5dc1e4c05cb68dbf62ae6fce3f0700e4654fdbbe) #节点1的ceph版本
    [ceph_deploy.install][DEBUG ] Detecting platform for host ceph-node2 ... #从这里开始,连接到ceph-node2,进行安装
    [ceph-node2][DEBUG ] connected to host: ceph-node2 
    [ceph-node2][DEBUG ] detect platform information from remote host
    [ceph-node2][DEBUG ] detect machine type

6、在节点ceph-node2上安装的过程中也同样遇到了刚刚的问题
    6.1 找不到ceph --version 导致ceph-deploy工具超时而终止运行
    [ceph_deploy][ERROR ] RuntimeError: Failed to execute command: ceph --version

    6.2 登录到节点2,查看是否存在yum的进程
    [root@ceph-node2 ~]# ps -ef | grep yum
    root       2391   2299  1 03:30 ?        00:00:03 /usr/bin/python /bin/yum -y install ceph ceph-radosgw
    结果:果然如此,进程在后台运行着,也就是说还在下载并安装呢!不管他,等等吧。。。
    
    6.3 在管理节点上重新执行以下命令
    ceph-deploy install ceph-node1 ceph-node2 ceph-node3
    
    6.4 最后,待节点2也完成之后,查看是否有ceph的相关命令
    [root@ceph-node2 ~]# ce
    centrino-decode        ceph-brag              ceph-create-keys       ceph-disk              cephfs-journal-tool    ceph-objectstore-tool  ceph-rest-api          
    ceph                   ceph-client-debug      ceph-crush-location    ceph-disk-udev         cephfs-table-tool      ceph-osd               ceph-run               
    ceph-authtool          ceph-clsinfo           ceph-dencoder          cephfs                 ceph-mds               ceph-post-file         ceph-syn               
    ceph-bluefs-tool       ceph-conf              ceph-detect-init       cephfs-data-scan       ceph-mon               ceph-rbdnamer          certutil               
    [root@ceph-node2 ~]# ceph -v
    ceph version 10.2.10 (5dc1e4c05cb68dbf62ae6fce3f0700e4654fdbbe)
    事实如此,节点2上的ceph已经安装好了

    
7、节点3的安装
    7.1 节点2上安装完了ceph之后,在管理节点上再次尝试第3步(用ceph-deploy工具将Ceph软件的二进制包安装到所有的节点上)
        执行命令:ceph-deploy install ceph-node1 ceph-node2 ceph-node3
        节点2上的命令:ceph --version 顺利通过,接着会转向节点3进行安装
        [ceph-node2][DEBUG ] ceph version 10.2.10 (5dc1e4c05cb68dbf62ae6fce3f0700e4654fdbbe) #节点2上的ceph版本
        [ceph_deploy.install][DEBUG ] Detecting platform for host ceph-node3 ... #开始在ceph-node3上安装
        [ceph-node3][DEBUG ] connected to host: ceph-node3 
        [ceph-node3][DEBUG ] detect platform information from remote host
        
    7.2 那么在节点3上,也是会遇到同样的问题的,因此,解决办法都一样。
        请耐心等待节点3安装完成之后,才进行第五步的操作。

五、在管理节点上(ceph-node1)创建你的第一个monitor(监控),部署初始监视器并收集密钥,执行以下命令:
    ceph-deploy mon create-initial

    完成该过程后,本地目录应具有以下密钥环:
        ceph.bootstrap-mds.keyring
        ceph.bootstrap-osd.keyring
        ceph.bootstrap-rgw.keyring
        ceph.client.admin.keyring
        【说明:只有在安装 Hammer 或更高版时才会创建 bootstrap-rgw 密钥环】
        
    5.1 使用ceph-deploy将配置文件和管理密钥复制到您的管理节点和Ceph节点,以便您可以使用ceph CLI,
        而无需在每次执行命令时指定监控地址和ceph.client.admin.keyring,命令如下:
            ceph-deploy admin ceph-node1 ceph-node2 ceph-node3



创建完mon之后,ceph-node1节点就成为了mon角色
【说明:一旦创建成功,就可以执行ceph status命令来检查集群状态,当然这个阶段集群不会处于监控状态】


六、在管理节点(ceph-node1)上创建一个对象存储设备(osd),并加入ceph集群中
    6.1 列出节点1上的磁盘,执行命令:
        [root@ceph-node1 my-cluster]# ceph-deploy disk list ceph-node1 
        [ceph_deploy.conf][DEBUG ] found configuration file at: /root/.cephdeploy.conf
        [ceph_deploy.cli][INFO  ] Invoked (1.5.37): /usr/bin/ceph-deploy disk list ceph-node1
        [ceph_deploy.cli][INFO  ] ceph-deploy options:
        [ceph_deploy.cli][INFO  ]  username                      : None
        [ceph_deploy.cli][INFO  ]  verbose                       : False
        [ceph_deploy.cli][INFO  ]  overwrite_conf                : False
        [ceph_deploy.cli][INFO  ]  subcommand                    : list
        [ceph_deploy.cli][INFO  ]  quiet                         : False
        [ceph_deploy.cli][INFO  ]  cd_conf                       : <ceph_deploy.conf.cephdeploy.Conf instance at 0x7fad73a85cb0>
        [ceph_deploy.cli][INFO  ]  cluster                       : ceph ————————》默认的集群名字
        [ceph_deploy.cli][INFO  ]  func                          : <function disk at 0x7fad73a7ac08>
        [ceph_deploy.cli][INFO  ]  ceph_conf                     : None
        [ceph_deploy.cli][INFO  ]  default_release               : False
        [ceph_deploy.cli][INFO  ]  disk                          : [('ceph-node1', None, None)]
        [ceph-node1][DEBUG ] connected to host: ceph-node1 
        [ceph-node1][DEBUG ] detect platform information from remote host
        [ceph-node1][DEBUG ] detect machine type
        [ceph-node1][DEBUG ] find the location of an executable
        [ceph_deploy.osd][INFO  ] Distro info: CentOS Linux 7.4.1708 Core
        [ceph_deploy.osd][DEBUG ] Listing disks on ceph-node1...
        [ceph-node1][DEBUG ] find the location of an executable
        [ceph-node1][INFO  ] Running command: /usr/sbin/ceph-disk list ——————》注意到没有,其实ceph-deploy工具调用的是ceph-disk list这个命令
        [ceph-node1][DEBUG ] /dev/dm-0 other, xfs, mounted on /
        [ceph-node1][DEBUG ] /dev/dm-1 swap, swap
        [ceph-node1][DEBUG ] /dev/sda :    ————————》sda这块盘是OS盘(安装操作系统的盘)
        [ceph-node1][DEBUG ]  /dev/sda2 other, LVM2_member
        [ceph-node1][DEBUG ]  /dev/sda1 other, xfs, mounted on /boot
        [ceph-node1][DEBUG ] /dev/sdb other, unknown ——————》 sdb sdc sdd 这3块盘才是可用的,在规划里也是将每台节点的这3快盘作为osd盘
        [ceph-node1][DEBUG ] /dev/sdc other, unknown
        [ceph-node1][DEBUG ] /dev/sdd other, unknown
        [ceph-node1][DEBUG ] /dev/sr0 other, unknown
        因此,千万别搞错了盘,特别是在生产环境下。做事情勿急躁!
    
    6.2 为创建osd盘做前期准备,执行ceph-deploy工具的disk zap命令(这个命令会销毁磁盘中已存在的分区表和数据,请认真选择好用作osd的磁盘)
        ceph-deploy disk zap ceph-node1:sdb ceph-node1:sdc ceph-node1:sdd
    
    6.3 开始创建osd
        ceph-deploy osd create ceph-node1:sdb ceph-node1:sdc ceph-node1:sdd
        
        这条命令会做以下步骤:
            1 擦除每个磁盘原有的数据,并创建文件系统(默认是xfs)
            2 将每个磁盘的划分为两个区,第一个分区作为数据分区,第二个分区作为日志分区
    
    6.4 再次查看集群的健康状态
        结果是集群还是没有处于健康状态,因此需要再添加节点到ceph集群中,形成分布式的、冗余的对象存储,这样集群才会变成健康
        [root@ceph-node1 my-cluster]# ceph status
        cluster 560418ea-c5f8-4c98-a31a-317ad4df93b7
         health HEALTH_ERR #健康错误
                64 pgs are stuck inactive for more than 300 seconds
                64 pgs degraded
                64 pgs stuck inactive
                64 pgs stuck unclean
                64 pgs undersized
                too few PGs per OSD (21 < min 30)
         monmap e1: 1 mons at {ceph-node1=192.168.89.101:6789/0}
                election epoch 3, quorum 0 ceph-node1
         osdmap e13: 3 osds: 3 up, 3 in
                flags sortbitwise,require_jewel_osds
          pgmap v26: 64 pgs, 1 pools, 0 bytes data, 0 objects
                101944 kB used, 15227 MB / 15326 MB avail
                      64 undersized+degraded+peered

七、纵向扩展ceph集群(添加monitor和osd)
    a) 目前,已经部署好了一个单节点的ceph集群,也就是只有ceph-node1这个节点,他即是ceph集群的一个节点也是作为管理节点
    b) 扩展ceph集群的目的是为了让这个存储集群更加可靠,所以应该添加更多的monitor节点和osd
    c) 根据规划,将ceph-node2和ceph-node3主机也同时作为mon和osd节点加入到ceph集群中

7.1 添加ceph monitor到ceph集群
    a) ceph存储集群需要最少一个monitor处于运行状态,要做到高可用性则需要大于1的奇数个monitor(记住是奇数),例如1,3,5,7,9,以形成仲裁
    它使用Paxos算法维护多数仲裁,目前已经有了一个mon,因此在ceph集群中再创建两个,供3个,符合奇数的要求
    【知识点扩展, 学习Paxos算法的工作原理】
    【仲裁的意思:公认的第三者在争端两方间进行裁定公断,如资源争夺】
    【mon的监听端口:tcp        0      0 192.168.89.101:6789     0.0.0.0:*               LISTEN      24943/ceph-mon  】
    
    b) 如启用了防火墙规则,为了ceph monitor节点之间能够正常通信,请添加6789端口到允许列表,预防被防火墙阻止了mon节点之间的通信
        centos7默认的开启的防火墙是firewall,iptables是默认没有开启的
        [root@ceph-node1 my-cluster]# firewall-cmd --state
        running
        
        我这里是测试环境,因此,我的3台ceph存储集群节点都是关闭了防火墙(firewall)
            systemctl stop firewalld.service #停止firewall
            systemctl disable firewalld.service #禁止firewall开机启动
            firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)

        
    7.1.1 在ceph-node2和ceph-node3上部署monitor
        在管理节点(ceph-node1)上通过ceph-deploy工具进行部署,执行以下命令:
        ceph-deploy mon create ceph-node2
        ceph-deploy mon create ceph-node3
        
        添加mon失败,错误日志如下:
        [2018-01-03 06:17:38,807][ceph-node3][ERROR ] admin_socket: exception getting command descriptions: [Errno 2] No such file or directory
        [2018-01-03 06:17:38,807][ceph-node3][WARNING] monitor: mon.ceph-node3, might not be running yet
        [2018-01-03 06:17:38,818][ceph-node3][INFO  ] Running command: ceph --cluster=ceph --admin-daemon /var/run/ceph/ceph-mon.ceph-node3.asok mon_status
        [2018-01-03 06:17:38,941][ceph-node3][ERROR ] admin_socket: exception getting command descriptions: [Errno 2] No such file or directory
        [2018-01-03 06:17:38,941][ceph-node3][WARNING] ceph-node3 is not defined in `mon initial members`
        [2018-01-03 06:17:38,941][ceph-node3][WARNING] monitor ceph-node3 does not exist in monmap
        [2018-01-03 06:17:38,941][ceph-node3][WARNING] neither `public_addr` nor `public_network` keys are defined for monitors
        [2018-01-03 06:17:38,941][ceph-node3][WARNING] monitors may not be able to form quorum
        
        解决办法:
        通过上面日志可知ceph.conf配置文件中缺少public network的配置,管理节点中,my-cluster目录下的ceph.conf的[global]下添加对应的地址段:
        public network = 192.168.89.0/24
        
        之后通过执行下面的命令把修改推送至每个节点,否则提示error:
        ceph-deploy --overwrite-conf config push ceph-node1 ceph-node2 ceph-node3
        
        接着再次添加,在管理节点(ceph-node1)上通过ceph-deploy工具进行部署,执行以下命令:
        ceph-deploy mon create ceph-node2
        ceph-deploy mon create ceph-node3
        
        再来看一下ceph集群状态:
        [root@ceph-node1 my-cluster]# ceph status
        cluster 560418ea-c5f8-4c98-a31a-317ad4df93b7
         health HEALTH_ERR #目前的健康还是没有处于健康状态,因为还没添加osd
                64 pgs are stuck inactive for more than 300 seconds
                64 pgs degraded
                64 pgs stuck degraded
                64 pgs stuck inactive
                64 pgs stuck unclean
                64 pgs stuck undersized
                64 pgs undersized
                too few PGs per OSD (21 < min 30) 
         monmap e3: 3 mons at {ceph-node1=192.168.89.101:6789/0,ceph-node2=192.168.89.102:6789/0,ceph-node3=192.168.89.103:6789/0} #注意这里,已经成功添加
                election epoch 6, quorum 0,1,2 ceph-node1,ceph-node2,ceph-node3
         osdmap e13: 3 osds: 3 up, 3 in
                flags sortbitwise,require_jewel_osds
          pgmap v26: 64 pgs, 1 pools, 0 bytes data, 0 objects
                101944 kB used, 15227 MB / 15326 MB avail
                      64 undersized+degraded+peered
                      
7.2 添加 ceph osd到ceph存储集群
    到目前为止,已经有了包含3个monitor节点的ceph集群,现在继续扩展集群,添加更多的osd节点。
    在管理节点上(ceph-node1他)通过ceph-deploy工具进行添加osd
    
    查看这2个节点的磁盘
    ceph-deploy disk list ceph-node2 ceph-node3
    
    初始化磁盘
    ceph-deploy disk zap ceph-node2:sdb ceph-node2:sdc ceph-node2:sdd
    ceph-deploy disk zap ceph-node3:sdb ceph-node3:sdc ceph-node3:sdd
    
    开始创建osd
    ceph-deploy osd create ceph-node2:sdb ceph-node2:sdc ceph-node2:sdd
    ceph-deploy osd create ceph-node3:sdb ceph-node3:sdc ceph-node3:sdd
    
    检查集群中新增osd的状态
    [root@ceph-node1 my-cluster]# ceph status
    cluster 560418ea-c5f8-4c98-a31a-317ad4df93b7
     health HEALTH_WARN #目前的健康状态为警告,原因是:每个OSD的PG数量太少(21< min 30)至于为什么会这样,还有待专研。
            too few PGs per OSD (21 < min 30)
     monmap e3: 3 mons at {ceph-node1=192.168.89.101:6789/0,ceph-node2=192.168.89.102:6789/0,ceph-node3=192.168.89.103:6789/0}
            election epoch 6, quorum 0,1,2 ceph-node1,ceph-node2,ceph-node3
     osdmap e46: 9 osds: 9 up, 9 in #看这里,包含9个处于in和up状态的osd
            flags sortbitwise,require_jewel_osds
      pgmap v112: 64 pgs, 1 pools, 0 bytes data, 0 objects
            305 MB used, 45674 MB / 45980 MB avail
                  64 active+clean
    
    
    查看ceph集群下的所有OSD
    [root@ceph-node2 ~]# ceph osd tree
    ID WEIGHT  TYPE NAME           UP/DOWN REWEIGHT PRIMARY-AFFINITY 
    -1 0.04408 root default                                          
    -2 0.01469     host ceph-node1                                   
     0 0.00490         osd.0            up  1.00000          1.00000 
     1 0.00490         osd.1            up  1.00000          1.00000 
     2 0.00490         osd.2            up  1.00000          1.00000 
    -3 0.01469     host ceph-node2                                   
     3 0.00490         osd.3            up  1.00000          1.00000 
     4 0.00490         osd.4            up  1.00000          1.00000 
     5 0.00490         osd.5            up  1.00000          1.00000 
    -4 0.01469     host ceph-node3                                   
     6 0.00490         osd.6            up  1.00000          1.00000 
     7 0.00490         osd.7            up  1.00000          1.00000 
     8 0.00490         osd.8            up  1.00000          1.00000 

        
到现在,本篇幅所讲的部署第一个ceph集群就到此结束!
相关文章
相关标签/搜索