一、Ceph簡單介紹
1)OSDs: Ceph的OSD守護程式(OSD)儲存資料,處理資料複製,恢復,回填,重新調整,並通過檢查其它Ceph OSD守護程式作為一個心跳 向Ceph的監視器報告一些檢測資訊。Ceph的儲存叢集需要至少2個OSD守護程式來保持一個 active + clean狀態.(Ceph預設製作2個備份,但可以調整它)
2)Monitors:Ceph的監控保持叢集狀態對映,包括OSD(守護程式)對映,分組(PG)對映,和CRUSH對映。 Ceph 保持一個在Ceph監視器, Ceph OSD 守護程式和 PG的每個狀態改變的歷史(稱之為“epoch”)。
3)MDS: MDS是Ceph的後設資料伺服器,代表儲存後設資料的Ceph檔案系統(即Ceph的塊裝置和Ceph的物件儲存不使用MDS)。Ceph的後設資料伺服器使用POSIX檔案系統,使用者可以執行基本命令如 ls, find,等,並且不需要在Ceph的儲存叢集上造成巨大的負載。
Ceph把客戶端的資料以物件的形式儲存到了儲存池裡。利用CRUSH演算法,Ceph可以計算出安置組所包含的物件,並能進一步計算出Ceph OSD集合所儲存的安置組。CRUSH演算法能夠使Ceph儲存叢集擁有動態改變大小、再平衡和資料恢復的能力。
二、Ceph儲存特點
- Object:有原生的API,而且也相容Swift和S3的API
- Block:支援精簡配置、快照、克隆
- File:Posix介面,支援快照
Ceph也是分散式儲存系統,它的特點是:
- 高擴充套件性:使用普通x86伺服器,支援10~1000臺伺服器,支援TB到PB級的擴充套件。
- 高可靠性:沒有單點故障,多資料副本,自動管理,自動修復。
- 高效能:資料分佈均衡,並行化度高。對於objects storage和block storage,不需要後設資料伺服器。
無論你是想使用Ceph物件儲存或是以Ceph塊裝置服務至雲平臺 ,部署Ceph檔案系統或者為了其他目的而使用Ceph,所有的 Ceph儲存叢集部署都是從設定每個Ceph節點,配置網路和Ceph儲存叢集開始的。一個Ceph儲存叢集要求至少有一個Ceph監視器和兩個Ceph OSD守護程式。當執行Ceph檔案系統客戶端時,必須要有Ceph後設資料伺服器。
Ceph提供了3種使用場景
- 分散式檔案系統CephFS。多個客戶端mount CephFS到本地,CephFS遵循POSIX介面,使用體驗類似於ext4等本地檔案系統。類似於其他分散式檔案系統,各個CephFS客戶端共享同一名稱空間。
- RadosGW(rgw)物件儲存。rgw使用場景類似於Amazon S3,據個人理解也類似於七牛雲端儲存。
- 塊裝置rbd(Rados Block Device)。Ceph提供虛擬的rbd塊裝置,使用者像使用SATA盤那樣的物理塊裝置一樣使用rbd。rbd的使用是排他的,每個rbd塊裝置是使用者私有的,相對的,CephFS的使用方式是共享的。虛擬化和雲端計算的發展正當盛年,IaaS結合rbd塊裝置這一使用方式有如干柴遇烈火,因此rbd是Ceph社群開發的重心之一。本文也主要從rbd的視角來了解Ceph。
三、Ceph叢集部署步驟(使用ceph-deploy部署ceph分散式儲存集)
1)硬體選擇:http://www.cnblogs.com/kevingrace/p/8430161.html
2)部署流程
1)系統: [root@kevin-221 ~]# cat /etc/redhat-release CentOS release 6.9 (Final) 2)核心: [root@kevin-221 ~]# uname -a Linux kevin-221 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux 3)ceph版本: [root@kevin-221 ~]# ceph -v ceph version 0.94.10 (b1e0532418e4631af01acbc0cedd426f1905f4af) 4)安裝部署主機(ceph-deploy) kevin-221 5)主機列表清單: [root@kevin-221 ~]# cat /workspace/ceph/cephlist.txt kevin-221 kevin-222 kevin-232 kevin-224 kevin-225 kevin-226 kevin-227 kevin-228 kevin-229 6)叢集服務部署分配 kevin-221 ceph-deploy install kevin-222 osd0 osd1 mds kevin-232 osd2 osd3 kevin-224 osd4 osd5 kevin-225 osd6 osd7 mon kevin-226 osd8 osd9 mds kevin-227 osd10 osd11 mon kevin-228 osd12 osd13 mds kevin-229 osd14 osd15 mon 7)叢集安裝前準備工作 -> 規範系統主機名; -> 新增hosts檔案實現叢集主機名與主機名之間相互能夠解析(host 檔案新增主機名對映關係) -> 每臺 ssh-copy-id 完成這些伺服器之間免ssh密碼登入; -> 關閉防火牆或者開放 6789/6800~6900埠、關閉SELINUX; -> 配置ntp服務,開啟時間服務,保證叢集伺服器時間統一; 8) 以下操作推薦在ceph-deploy節點操作: 新增ceph叢集安裝yum原始檔; 使用路徑/etc/yum.repos.d/ceph.repo [root@kevin-221 ~]# vim /etc/yum.repos.d/ceph.repo [ceph] name=Ceph packages for $basearch baseurl=http://ceph.com/rpm/rhel6/$basearch enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc [ceph-noarch] name=Ceph noarch packages baseurl=http://ceph.com/rpm/rhel6/noarch enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc [ceph-source] name=Ceph source packages baseurl=http://ceph.com/rpm/rhel6/SRPMS enabled=0 gpgcheck=1 type=rpm-md gpgkey=https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc 傳輸yum原始檔到其它節點伺服器 --delete 刪除那些DST中SRC沒有的檔案 [root@kevin-221 ceph]# for ip in $(cat /workspace/ceph/cephlist.txt);do echo -----$ip-----;rsync -avp --delete /etc/yum.repos.d $ip:/etc/;done 建立叢集配置目錄 [root@kevin-221 ceph]# for ip in $(cat /workspace/ceph/cephlist.txt);do echo -----$ip-----;ssh root@$ip mkdir -p /etc/ceph ;done 9) 叢集安裝配置 提前填坑,根據以往配置部署經驗,安裝配置部署過程中會有不斷報錯,部分是因為個別依賴軟體包沒有安裝導致,提前安裝避免不必要的錯誤; [root@kevin-221 ceph]# for ip in $(cat /workspace/ceph/cephlist.txt);do echo -----$ip-----;ssh root@$ip yum install *argparse* redhat-lsb xfs* -y;done ceph-deploy 節點安裝部署(kevin-221 安裝部署節點) [root@kevin-221 ceph]# cd /etc/ceph/ 升級系統的軟體包,安裝ceph-deploy工具 [root@kevin-221 ceph]# yum update -y && yum install ceph-deploy -y ----------------以下操作在ceph-deploy節點操作---------------- 如果以前安裝過ceph,在此機器上執行 [root@kevin-221 ceph]# sudo stop ceph-all //停止所有ceph程式 [root@kevin-221 ceph]# ceph-deploy uninstall [{ceph-node}] //解除安裝所有ceph程式 [root@kevin-221 ceph]# ceph-deploy purge [[ceph-node} [{ceph-node}] //刪除ceph相關的包 [root@kevin-221 ceph]# ceph-deploy purgedata {ceph-node} [{ceph-node}] //刪除ceph相關的包 [root@kevin-221 ceph]# ceph-deploy forgetkeys //刪除key 另外清理一下配置檔案,重建一下安裝配置目錄 [root@kevin-221 ceph]# for ip in $(cat /workspace/ceph/cephlist.txt);do echo -----$ip-----;ssh root@$ip rm -rf /etc/ceph/* ;done [root@kevin-221 ceph]# for ip in $(cat /workspace/ceph/cephlist.txt);do echo -----$ip-----;ssh root@$ip mkdir -p /etc/ceph ;done ------------------------------------------------------------- 9.1) 建立mon節點 在安裝部署節使用ceph-deploy建立,生成MON資訊: [root@kevin-221 ceph]# cd /etc/ceph/ [root@kevin-221 ceph]# ceph-deploy new monnode [root@kevin-221 ceph]# ceph-deploy new kevin-225 kevin-227 kevin-229 9.2) 安裝部署報錯: [root@kevin-221 ceph]# ceph-deploy new kevin-225.ptfuture.com kevin-227.ptfuture.com kevin-229.ptfuture.com Traceback (most recent call last): File "/usr/bin/ceph-deploy", line 18, in <module> from ceph_deploy.cli import main ImportError: No module named ceph_deploy.cli 解決辦法: 系統python問題,注意檢查系統使用python版本2.6; 9.3) 再次執行 : [root@kevin-221 ceph]# cd /etc/ceph/ [root@kevin-221 ceph]# ceph-deploy new kevin-225 kevin-227 kevin-229 執行成功後該目錄下會增加三個檔案 [root@kevin-221 ceph]# ll total 12 -rw-r--r-- 1 root root 276 Feb 8 22:01 ceph.conf -rw-r--r-- 1 root root 3142 Feb 8 22:01 ceph.log -rw------- 1 root root 73 Feb 8 22:01 ceph.mon.keyring 9.4) 安裝部署叢集軟體包: 在所有節點安裝ceph軟體包 ceph-deploy install{ceph-node}[{ceph-node}...] (注:如果已經用yum在每臺機器上安裝了ceph,這步可省略) [root@kevin-221 ceph]# ceph-deploy install dn-5-22{1..2} [root@kevin-221 ceph]# ceph-deploy install kevin-232 [root@kevin-221 ceph]# ceph-deploy install dn-5-22{4..9} 5) 新增初始monitor節點和收集祕鑰 ceph-deploy mon create-initial {node} [root@kevin-221 ceph]# ceph-deploy --overwrite-conf mon create-initial kevin-225 kevin-227 kevin-229 如果提示檔案存在,但是不匹配,可以先刪除該ceph.conf,然後執行此操作。 9.6) 收集金鑰 [root@kevin-221 ceph]# ceph-deploy gatherkeys kevin-225 kevin-227 kevin-229 收集到金鑰,在本地目錄下可看到如下金鑰環檔案: {cluster-name}.client.admin.keyring {cluster-name}.bootstrap-osd.keyring {cluster-name}.bootstrap-mds.keyring 9.7) 傳輸key 配置檔案到其它節點伺服器 [root@kevin-221 ceph]# for ip in $(cat /workspace/ceph/cephlist.txt);do echo -----$ip-----;rsync -avp --delete /etc/ceph $ip:/etc/;done --delete 刪除那些DST中SRC沒有的檔案 至此mon節點配置基本告一段落; 9.8) 驗證叢集mon節點安裝成功 [root@kevin-221 ceph]# ceph -s cluster c7ee9e13-af6f-475e-80ce-ecb4ba463540 health HEALTH_ERR 64 pgs stuck inactive 64 pgs stuck unclean no osds monmap e1: 3 mons at {kevin-225=172.17.5.225:6789/0,kevin-227=172.17.5.227:6789/0,kevin-229=172.17.5.229:6789/0} election epoch 8, quorum 0,1,2 kevin-225,kevin-227,kevin-229 osdmap e1: 0 osds: 0 up, 0 in pgmap v2: 64 pgs, 1 pools, 0 bytes data, 0 objects 0 kB used, 0 kB / 0 kB avail 64 creating 9.9) 登入mon節點檢視程式已啟動 [root@kevin-221 ceph]# ps -ef|grep ceph root 27966 1 0 15:57 ? 00:00:00 /usr/bin/ceph-mon -i kevin-227 --pid-file /var/run/ceph/mon.kevin-227.pid -c /etc/ceph/ceph.conf --cluster ceph root 28599 25753 0 15 10) 安裝叢集osd服務 10.1) 執行osd初始化命令 每臺有兩塊磁碟,分別為 、/dev/sdk /dev/sdl [root@kevin-221 ceph]# for ip in $(cat /workspace/ceph/cephlist.txt);do echo ----$ip-----------;ceph-deploy --overwrite-conf osd prepare $ip:/dev/sdk $ip:/dev/sdl;done 10.2) 安裝報錯: 報錯: [ceph_deploy.conf][DEBUG ] found configuration file at: /root/.cephdeploy.conf [ceph_deploy.cli][INFO ] Invoked (1.5.25): /usr/bin/ceph-deploy osd prepare kevin-221:/dev/sdk [ceph_deploy.osd][DEBUG ] Preparing cluster ceph disks kevin-221:/dev/sdk: [kevin-221][DEBUG ] connected to host: kevin-221 [kevin-221][DEBUG ] detect platform information from remote host [kevin-221][DEBUG ] detect machine type [ceph_deploy.osd][INFO ] Distro info: CentOS 6.6 Final [ceph_deploy.osd][DEBUG ] Deploying osd to kevin-221 [kevin-221][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf [ceph_deploy.osd][ERROR ] RuntimeError: config file /etc/ceph/ceph.conf exists with different content; use --overwrite-conf to overwrite [ceph_deploy][ERROR ] GenericError: Failed to create 1 OSDs 解決辦法: 報錯資訊說明在node上沒有mkfs.xfs檔案,需要在node上安裝mkfs.xfs檔案,批量安裝部署所有叢集伺服器; [root@kevin-221 ceph]# for ip in $(cat /workspace/ceph/cephlist.txt);do echo -----$ip-----;ssh root@$ip yum install xfs* -y;done 10.3) 再次執行osd初始化命令 [root@kevin-221 ceph]# for ip in $(cat /workspace/ceph/cephlist.txt);do echo ----$ip-----------;ceph-deploy --overwrite-conf osd prepare $ip:/dev/sdk $ip:/dev/sdl;done 10.4) ceph.keyring 同步 在建立osd節點的時候可能會osd節點上缺少/var/lib/ceph/bootstrap-osd/ceph.keyring檔案,把監控節點上的檔案拷貝到安裝節點上。 在node1節點上建立一個目錄:mkdir /var/lib/ceph/bootstrap-osd/。 登入登入mon節點,kevin-225: # ssh kevin-225 # scp /var/lib/ceph/bootstrap-osd/ceph.keyring root@kevin-221:/var/lib/ceph/bootstrap-osd/ 統一解決,將安裝節點的ceph.keyring copy到其它安裝節點; [root@kevin-221 ceph]# for ip in $(cat /workspace/ceph/cephlist.txt);do echo ----$ip-----------;rsync -avp --delete /var/lib/ceph/bootstrap-osd root@$ip:/var/lib/ceph/;done 驗證所有叢集伺服器上的ceph.keyring 內容一致: [root@kevin-221 ceph]# for ip in $(cat /workspace/ceph/cephlist.txt);do echo ----$ip-----------;ssh root@$ip cat /var/lib/ceph/bootstrap-osd/ceph.keyring ;done 10.5)再次執行,osd初始化命令可以成功初始化新加入的osd節點 初始化資料盤 [root@kevin-221 ceph]# for ip in $(cat /workspace/ceph/cephlist.txt);do echo ----$ip-----------;ceph-deploy --overwrite-conf osd prepare $ip:/dev/sdk $ip:/dev/sdl;done 10.6)執行啟用osd裝置:(官網步驟,我在安裝部署時,執行上一步的時候,osd自動啟用了,不用執行啟用操作) [root@kevin-221 ceph]# for ip in $(cat /workspace/ceph/cephlist.txt);do echo ----$ip-----------;ceph-deploy --overwrite-conf osd activate $ip:/dev/sdk $ip:/dev/sdl;done 執行啟用操作報錯如下: [ceph_deploy.conf][DEBUG ] found configuration file at: /root/.cephdeploy.conf [ceph_deploy.cli][INFO ] Invoked (1.5.25): /usr/bin/ceph-deploy --overwrite-conf osd activate kevin-229:/dev/sdk kevin-229:/dev/sdl [ceph_deploy.osd][DEBUG ] Activating cluster ceph disks kevin-229:/dev/sdk: kevin-229:/dev/sdl: [kevin-229][DEBUG ] connected to host: kevin-229 [kevin-229][DEBUG ] detect platform information from remote host [kevin-229][DEBUG ] detect machine type [ceph_deploy.osd][INFO ] Distro info: CentOS 6.6 Final [ceph_deploy.osd][DEBUG ] activating host kevin-229 disk /dev/sdk [ceph_deploy.osd][DEBUG ] will use init type: sysvinit [kevin-229][INFO ] Running command: ceph-disk -v activate --mark-init sysvinit --mount /dev/sdk [kevin-229][WARNIN] INFO:ceph-disk:Running command: /sbin/blkid -p -s TYPE -ovalue -- /dev/sdk [kevin-229][WARNIN] ceph-disk: Cannot discover filesystem type: device /dev/sdk: Line is truncated: [kevin-229][ERROR ] RuntimeError: command returned non-zero exit status: 1 [ceph_deploy][ERROR ] RuntimeError: Failed to execute command: ceph-disk -v activate --mark-init sysvinit --mount /dev/sdk 解決辦法: 檢視osd 狀態 [root@kevin-221 ceph]# ceph-disk activate-all === osd.1 === Starting Ceph osd.1 on kevin-221...already running === osd.0 === Starting Ceph osd.0 on kevin-221...already running lsblk看一下,如果sdk sdl是掛載在/var/lib/ceph/osd/ceph-0 ceph-1上,#沒有問題 [root@kevin-221 ceph]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdj 8:144 0 1.8T 0 disk /data09 sdi 8:128 0 1.8T 0 disk /data08 sdk 8:160 0 1.8T 0 disk ├─sdk1 8:161 0 1.8T 0 part /var/lib/ceph/osd/ceph-0 #確認磁碟掛載 └─sdk2 8:162 0 5G 0 part sdl 8:176 0 1.8T 0 disk ├─sdl1 8:177 0 1.8T 0 part /var/lib/ceph/osd/ceph-1 #確認磁碟掛載 (執行上一步的時候,osd自動啟用了,不用執行啟用操作) 11.)安裝部署mds服務 11.1)新增後設資料伺服器 [root@kevin-221 ~]# cd /etc/ceph [root@kevin-221 ceph]# ceph-deploy --overwrite-conf mds create kevin-222 kevin-226 kevin-228 命令順利執行完成,無報錯為oK 對於一個剛建立的MDS服務,雖然服務是執行的,但是它的狀態直到建立 pools 以及檔案系統的時候才會變為Active. 11.2)狀態檢視。還沒有建立時候的狀態 [root@kevin-221 ceph]# ceph mds stat e1: 0/0/0 up [root@kevin-221 ceph]# ceph mds dump dumped mdsmap epoch 1 epoch 1 flags 0 created 0.000000 modified 2015-06-28 15:58:10.254107 ------------中間省略------------------ compat compat={},rocompat={},incompat={} max_mds 0 in up {} failed stopped data_pools metadata_pool 0 inline_data disabled 11.3)通過下面的操作建立Filesystem [root@kevin-221 ceph]# ceph osd pool create cephfs_data 10 [root@kevin-221 ceph]# ceph osd pool create cephfs_metadata 10 [root@kevin-221 ceph]# ceph fs new leadorfs cephfs_metadata cephfs_data 11.4)成功建立後,mds stat的狀態如下 [root@kevin-221 ceph]# ceph mds stat e6: 1/1/1 up {0=kevin-228=up:active}, 2 up:standby [root@kevin-221 ceph]# ceph mds dump dumped mdsmap epoch 6 epoch 6 ...........中間省略-........... max_file_size 1099511627776 last_failure 0 last_failure_osd_epoch 0 compat compat={},rocompat={},incompat={1=base v0.20,2=client writeable ranges,3=default file layouts on dirs,4=dir inode in separate object,5=mds uses versioned encoding,6=dirfrag is stored in omap,8=no anchor table} ..........中間省略-........... data_pools 5 metadata_pool 6 inline_data disabled 4198: 172.17.5.222:6808/11942 'kevin-222' mds.-1.0 up:standby seq 2703 4406: 172.17.5.226:6808/1634 'kevin-226' mds.-1.0 up:standby seq 160 4247: 172.17.5.228:6808/25735 'kevin-228' mds.0.1 up:active seq 2703 11.5) ceph叢集的狀態,pg的數量以及pool的數量都得到了對應的增加 [root@kevin-221 ceph]# ceph -s cluster c7ee9e13-af6f-475e-80ce-ecb4ba463540 health HEALTH_OK monmap e1: 3 mons at {kevin-225=172.17.5.225:6789/0,kevin-227=172.17.5.227:6789/0,kevin-229=172.17.5.229:6789/0} election epoch 8, quorum 0,1,2 kevin-225,kevin-227,kevin-229 mdsmap e6: 1/1/1 up {0=kevin-228=up:active}, 2 up:standby osdmap e100: 16 osds: 16 up, 16 in pgmap v393: 784 pgs, 7 pools, 2178 bytes data, 24 objects 588 MB used, 29713 GB / 29713 GB avail 784 active+clean 12) ceph分散式儲存叢集總驗證 12.1)驗證mds節點 [root@kevin-221 ceph]# for ip in $(cat /workspace/ceph/cephlist.txt);do echo -----$ip-----;ssh root@$ip ps -ef|grep mds.dn;done -----kevin-222----- root 11944 1 0 22:42 ? 00:00:00 /usr/bin/ceph-mds -i kevin-222 --pid-file /var/run/ceph/mds.kevin-222.pid -c /etc/ceph/ceph.conf --cluster ceph -----kevin-226----- root 32348 1 0 22:42 ? 00:00:00 /usr/bin/ceph-mds -i kevin-226 --pid-file /var/run/ceph/mds.kevin-226.pid -c /etc/ceph/ceph.conf --cluster ceph -----kevin-228----- root 25737 1 0 22:42 ? 00:00:00 /usr/bin/ceph-mds -i kevin-228 --pid-file /var/run/ceph/mds.kevin-228.pid -c /etc/ceph/ceph.conf --cluster ceph-----kevin-229----- 12.2)驗證mon節點 [root@kevin-221 ceph]# for ip in $(cat /workspace/ceph/cephlist.txt);do echo -----$ip-----;ssh root@$ip ps -ef|grep mon.dn;done -----kevin-225----- root 23288 1 0 Jun28 ? 00:00:45 /usr/bin/ceph-mon -i kevin-225 --pid-file /var/run/ceph/mon.kevin-225.pid -c /etc/ceph/ceph.conf --cluster ceph -----kevin-227----- root 27966 1 0 Jun28 ? 00:00:23 /usr/bin/ceph-mon -i kevin-227 --pid-file /var/run/ceph/mon.kevin-227.pid -c /etc/ceph/ceph.conf --cluster ceph -----kevin-229----- root 27966 1 0 Jun28 ? 00:00:23 /usr/bin/ceph-mon -i kevin-229 --pid-file /var/run/ceph/mon.kevin-229.pid -c /etc/ceph/ceph.conf --cluster ceph 12.3)驗證osd節點 [root@kevin-221 ceph]# for ip in $(cat /workspace/ceph/cephlist.txt);do echo -----$ip-----;ssh root@$ip ps -ef|grep osd.dn;done -----kevin-221----- root 20962 9646 0 21:48 pts/2 00:00:00 grep osd root 31595 1 0 15:12 ? 00:01:01 /usr/bin/ceph-osd -i 0 --pid-file /var/run/ceph/osd.0.pid -c /etc/ceph/ceph.conf --cluster ceph root 32417 1 0 15:12 ? 00:00:59 /usr/bin/ceph-osd -i 1 --pid-file /var/run/ceph/osd.1.pid -c /etc/ceph/ceph.conf --cluster ceph -----kevin-222----- root 29591 1 0 19:08 ? 00:00:55 /usr/bin/ceph-osd -i 2 --pid-file /var/run/ceph/osd.2.pid -c /etc/ceph/ceph.conf --cluster ceph root 30522 1 0 19:09 ? 00:00:58 /usr/bin/ceph-osd -i 3 --pid-file /var/run/ceph/osd.3.pid -c /etc/ceph/ceph.conf --cluster ceph -----kevin-232----- root 10461 1 0 19:10 ? 00:01:00 /usr/bin/ceph-osd -i 4 --pid-file /var/run/ceph/osd.4.pid -c /etc/ceph/ceph.conf --cluster ceph root 11285 1 0 19:10 ? 00:01:03 /usr/bin/ceph-osd -i 5 --pid-file /var/run/ceph/osd.5.pid -c /etc/ceph/ceph.conf --cluster ceph -----kevin-224----- 暫時停用 -----kevin-225----- root 11638 1 0 19:10 ? 00:01:09 /usr/bin/ceph-osd -i 6 --pid-file /var/run/ceph/osd.6.pid -c /etc/ceph/ceph.conf --cluster ceph root 12499 1 0 19:11 ? 00:01:05 /usr/bin/ceph-osd -i 7 --pid-file /var/run/ceph/osd.7.pid -c /etc/ceph/ceph.conf --cluster ceph -----kevin-226----- root 23279 1 0 19:11 ? 00:01:10 /usr/bin/ceph-osd -i 8 --pid-file /var/run/ceph/osd.8.pid -c /etc/ceph/ceph.conf --cluster ceph root 24182 1 0 19:11 ? 00:01:03 /usr/bin/ceph-osd -i 9 --pid-file /var/run/ceph/osd.9.pid -c /etc/ceph/ceph.conf --cluster ceph -----kevin-227----- root 29171 1 0 19:12 ? 00:01:00 /usr/bin/ceph-osd -i 10 --pid-file /var/run/ceph/osd.10.pid -c /etc/ceph/ceph.conf --cluster ceph root 30031 1 0 19:12 ? 00:01:02 /usr/bin/ceph-osd -i 11 --pid-file /var/run/ceph/osd.11.pid -c /etc/ceph/ceph.conf --cluster ceph -----kevin-228----- root 19083 1 0 19:12 ? 00:01:09 /usr/bin/ceph-osd -i 12 --pid-file /var/run/ceph/osd.12.pid -c /etc/ceph/ceph.conf --cluster ceph root 20151 1 0 19:13 ? 00:01:02 /usr/bin/ceph-osd -i 13 --pid-file /var/run/ceph/osd.13.pid -c /etc/ceph/ceph.conf --cluster ceph -----kevin-229----- root 7121 1 0 19:13 ? 00:01:02 /usr/bin/ceph-osd -i 14 --pid-file /var/run/ceph/osd.14.pid -c /etc/ceph/ceph.conf --cluster ceph root 7999 1 0 19:13 ? 00:00:56 /usr/bin/ceph-osd -i 15 --pid-file /var/run/ceph/osd.15.pid -c /etc/ceph/ceph.conf --cluster ceph 12.4)問題排查: 健康狀態檢查 [root@kevin-221 ceph]# ceph health 有告警資訊如下: HEALTH_WARN too few PGs per OSD (12 < min 30) 解決辦法, 需要修改pg_num , pgp_num . 先要獲取pool name, 如下, 返回pool name : rbd. [root@kevin-221 ceph]# ceph osd pool stats pool rbd id 0 nothing is going on 先改 pg_num 再改 pgp_num ,需要注意, pg_num只能增加, 不能縮小. [root@kevin-221 ceph]# ceph osd pool set rbd pg_num 300 [root@kevin-221 ceph]# ceph osd pool set rbd pgp_num 300 再次驗證 ok [root@kevin-221 ceph]# ceph health HEALTH_OK 13)擴充套件叢集 13.1)增加一個OSD 在你的ceph-deloy節點上,準備OSD。 [root@kevin-221 ceph]# ceph-deploy osd prepare {ceph-node}:/path/to/directory [root@kevin-221 ceph]# ceph-deploy osd prepare ceph-node1:/tmp/osd2 最後,啟用OSD。 [root@kevin-221 ceph]# ceph-deploy osd activate {ceph-node}:/path/to/directory [root@kevin-221 ceph]# ceph-deploy osd activate ceph-node1:/tmp/osd2 一旦你增加新的OSD,Ceph將會遷移已有的放置置到新的OSD上以達到叢集的重新平衡,你可通過ceph命令介面觀察這個過程。 你將會看到PG狀態由活躍且乾淨狀態變成活躍態,其中存在部分降級物件。當遷移完成後,將再次返回活躍且乾淨狀態。(可按Control+c組合鍵退出) [root@kevin-221 ceph]# ceph -w 13.2)增加一個mds伺服器 為了使用CephFS檔案系統,你需要至少一臺後設資料伺服器。執行如下步驟以建立一臺後設資料伺服器。 [root@kevin-221 ceph]# ceph-deploy mds create {ceph-node} [root@kevin-221 ceph]# ceph-deploy mds create ceph-node1 注意:當前Ceph產品中僅支援執行一個後設資料伺服器。你可嘗試在一個叢集中執行多個後設資料伺服器,但對此尚無商業支援。 13.3)增加mon節點 一個Ceph儲存叢集至少需要一臺Ceph監視器。為了保證高可用性,Ceph儲存叢集中通常會執行多個Ceph監視器,任意單臺Ceph監視器的當機都不會影響整個Ceph儲存叢集正常工作。 由於Ceph使用Paxos演算法,這需要多個Ceph監視器組成Quoram(如1,2:3,3:4,3:5,4:6等)。 向你的叢集增加2臺Ceph監視器。 [root@kevin-221 ceph]# ceph-deploy mon create {ceph-node} [root@kevin-221 ceph]# ceph-deploy mon create ceph-node2 ceph-node3 當增加Ceph監視器後,Ceph將開始同步各監視器並形成Quoram。可通過如下方式檢查Quoram狀態: [root@kevin-221 ceph]# ceph quorum_status 或者 [root@kevin-221 ceph]# ceph quorum_status --format json-pretty [root@kevin-221 ceph]# ceph quorum_status --format json-pretty { "election_epoch": 8, "quorum": [ 0, 1, 2 ], "quorum_names": [ "kevin-225", "kevin-227", "kevin-229" ], "quorum_leader_name": "kevin-225", "monmap": { "epoch": 1, "fsid": "c7ee9e13-af6f-475e-80ce-ecb4ba463540", "modified": "0.000000", "created": "0.000000", "mons": [ { "rank": 0, "name": "kevin-225", "addr": "172.17.5.225:6789\/0" }, { "rank": 1, "name": "kevin-227", "addr": "172.17.5.227:6789\/0" }, { "rank": 2, "name": "kevin-229", "addr": "172.17.5.229:6789\/0" } ] } }