1. 程式人生 > >ceph分布式存儲實戰(2)——從0開始創建第一個ceph集群

ceph分布式存儲實戰(2)——從0開始創建第一個ceph集群

moni name exceptio swap nor 都是 -c 監視 defined

一、在每臺節點的/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集群就到此結束!


ceph分布式存儲實戰(2)——從0開始創建第一個ceph集群