Ceph分散式儲存-運維操作筆記

散盡浮華發表於2018-02-08

 

一、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"
            }
        ]
    }
}

相關文章