一、Ceph簡單介紹
OSDs:Ceph的OSD守護進程(OSD)存儲數據,處理數據復制,恢復,回填,重新調整,並通過檢查其它Ceph OSD守護程序作為一個心跳 向Ceph的監視器報告一些檢測信息。Ceph的存儲集群需要至少2個OSD守護進程來保持一個 active + clean狀態.(Ceph默認制作2個備份,但可以調整它)
Monitors:Ceph的監控保持集群狀態映射,包括OSD(守護進程)映射,分組(PG)映射,和CRUSH映射。 Ceph 保持一個在Ceph監視器, Ceph OSD 守護進程和 PG的每個狀態改變的歷史(稱之為“epoch”)。
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存儲集群要求至少有一個監視器Mon和兩個OSD守護進程。當運行Ceph文件系統客戶端時,必須要有元數據服務器MDS。一個ceph集群至少需要3個OSD才能實現冗余和高可用性。
Ceph提供了3種使用場景
1. 分布式文件系統CephFS。多個客戶端mount CephFS到本地,CephFS遵循POSIX接口,使用體驗類似於ext4等本地文件系統。類似於其他分布式文件系統,各個CephFS客戶端共享同一命名空間。
2. RadosGW(rgw)對象存儲。rgw使用場景類似於Amazon S3,類似於七牛雲存儲。
3. 塊設備rbd(Rados Block Device)。Ceph提供虛擬的rbd塊設備,用戶像使用SATA盤那樣的物理塊設備一樣使用rbd。rbd的使用是排他的,每個rbd塊設備是用戶私有的,相對的,CephFS的使用方式是共享的。
三、Ceph集群部署步驟 [使用ceph-deploy部署ceph分布式存儲集]
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。 命令格式:"ceph-deploy osd prepare {ceph-node}:/path/to/directory" [root@kevin-221 ceph]# ceph-deploy osd prepare ceph-node1:/tmp/osd2 最后,激活OSD。 命令格式:"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文件系統,需要至少一台元數據服務器。執行如下步驟以創建一台元數據服務器。 命令格式:"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等)。 向ceph集群增加2台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" } ] } }