Openstack之Ceph集羣操作

 Oepnstack之CEPH系列是根據Ceph Cookbook整理的筆記,分爲以下幾個部分:

1. 《Ceph簡介》

2. 《Ceph集羣操作》

3. 《Ceph塊設備管理與Openstack配置》

4. 《深入Ceph》

5. 《ceph優化與性能測試》


**注意:此文對應ceph版本爲10.1.2**

~~~bash
#ceph -v
ceph version 10.1.2(4a2a6f72640d6b74a3bbd92798bb913ed380dcd4)
~~~

Ceph集羣的啓動

在Ceph集羣搭建好了後,可以在某個節點的/etc/ceph/ceph.conf中編輯好集羣配置,然後在這個節點來管理啓動與停止。Cookbook中寫了兩種方式,加上我自己一個常用的,算是三種吧~


1、Sysvint的方式:

~~~bash
將整個集羣啓動或停止
# /etc/init.d/ceph  -a start|stop
 
啓動本節點的monitor進程
# /etc/init.d/ceph start mon
啓動所有節點的monitor進程。
# /etc/init.d/ceph -a start mon
類似還有:
# /etc/init.d/ceph  [-a]  start|stop  <osd|mds|ceph-radosgw>
-a 代表啓動ceph.conf中所有主機
還可以單獨啓動或停止某一個守護進程的實例:
起停ceph-host1上mon進程
# /etc/init.d/ceph start|stop mon.ceph-host1
起停osd.1的守護進程,如果osd.1不在本機則需要加-a參數,其他同理。
# /etc/init.d/ceph start|stop osd.1
~~~

2、Linux service命令方式:

其實沒什麼特別的,只是把"/etc/init.d/ceph" 換成了"service ceph",後面的都一樣。

3、命令方式:

 我目前在用的,使用"/usr/bin/ceph-mon"、"/usr/bin/ceph-osd"。

~~~bash
 #/usr/bin/ceph-mon -i a|b|c
 #/usr/bin/ceph-osd -i  0|1|2|3....
 #a、b、c對應mon中的id,0、1、2、3對應osd中的id
~~~

 使用命令來啓動守護進程,這樣做的後果是要在每臺機都手動執行,我的方法是寫在/etc/rc.local裏面,暫時還沒研究和前面兩種有什麼區別,從啓動的進程來看,service啓動是"/usr/bin/python /usr/sbin/ceph-create-keys --cluster ceph -i a",而命令啓動則很簡單"/usr/bin/ceph-mon -i a"。

Ceph集羣擴展與縮小

傳統的向上擴展(Scale-up)採用的是堆加硬盤的方式,到了一定規模的存儲容量後,會受到自身的控制器,計算性能無法提升等影響。而ceph採用的橫向擴展(Scale-out)方式,會將CPU、內存等其他資源一同加入集羣,因此而線性提升性能。

PS:好久沒接觸傳統存儲了,但印象中EMC、IBM的高端存儲似乎都有橫向擴展,線性增加性能的解決方案,也都提出了軟件定義存儲的概念,這個感覺像是CEPH在吹牛啊。。


1、Ceph擴展之添加osd

書上採用ceph-deploy方式,我們繼續採用命令添加方式,操作系統識別到新硬盤後:

~~~bash
創建osd ID,會返回當前已有的osd個數+1
#ceph osd create
10
創建掛載點
#mkdir -p /var/lib/ceph/osd/ceph-10
#格式化新硬盤
# mkfs.xfs /dev/sdg
掛載硬盤
# mount  -o inode64,noatime /dev/sdg /var/lib/ceph/osd/ceph-10
格式化osd
# ceph-osd -i 10 --mkfs 
設置該osd的位置與權重,host對應當前主機
#ceph osd crush add osd.10 root=default rack=unknowrack host=ceph-host10
啓動守護進程
# ceph-osd  -i 10
查看狀態,可以看到該osd是否加入和數據同步
#ceph osd tree
#ceph -w
~~~

2、Ceph擴展之添加mon

mon節點的添加比較簡單,要記住在生產環境中需要保持奇數個monitor節點,保證集羣仲裁的中立性。

~~~bash
創建掛載點
#mkdir -p /var/lib/ceph/mon/ceph-d
格式化mon
ceph-mon -i d --mkfs  --fsid   $CLUSTER-ID
cluster-id通過ceph -s查看,其實也是創建第一個mon節點時的uuid
啓動守護進程
#ceph-mon -i d
查看狀態
#ceph -s
~~~

3、Ceph縮小之移除osd

在移除osd前,先ceph -s確認集羣狀態正常,以及移除後空間是否足夠。

移除osd步驟爲:


- 將osd盤out,當osd盤爲out狀態時,該osd盤會停止提供服務,並將所存數據轉移到其他盤。

- 將osd盤down

- 將osd盤從crush中rm

- 將osd盤密鑰del

- 將osd從osd tree中rm

~~~bash
將osd.10移除集羣,使用ceph -w查看數據轉移,觀察osdmap,up數量不變,in個數-1
#ceph osd  out osd.10
停止osd.10守護進程,使用ceph osd tree確認狀態
#service stop osd.10
或者
#ps -ef |grep osd,查找進程然後kill
從crush map中刪除,使用ceph -s查看osdmap,up和in的數量-1
#ceph osd crush remove osd.10
刪除驗證密鑰
# ceph auth del osd.10
刪除osd盤,使用ceph -s查看osdmap數量-1
ceph osd rm osd.10
如果該主機上osd都被清楚,也可以在crush map中移除主機信息,同上crush移除命令
ceph osd crush remove ceph-host10
~~~

4、Ceph縮小之移除mon

移除mon的前提是保證有足夠仲裁節點,步驟很簡單

~~~bash
停止Monitor守護進程
#ps -ef |grep mon
# kill -9 $PID
刪除對應目錄,或是備份移走
#rm -rf /var/lib/ceph/mon/mon-d
檢查仲裁狀態,檢查monitor狀態
# ceph quorum_status --format json-pretty
# ceph mon stat
~~~

Ceph集羣故障維護

Ceph集羣的維護分爲兩個部分,OSD故障處理,設置集羣狀態標誌位

OSD故障磁盤處理

場景:當ceph集羣中某塊硬盤出現故障時,修要進行替換與修復。

1、發現故障

~~~bash
硬盤故障,osd盤會報down。
#ceph osd tree
~~~

注意:<span style="color:red">當一個osd盤處於down的狀態時,集羣數據不會立即發生變化,默認情況下,會等待5分鐘判斷osd是否不再up,從而標記該盤爲out,然後開始數據同步。可以根據需要手動設置等待時間。</span>

2、找到出現down的盤,確認已發生故障,可以等待5分鐘自動out也可以手動out此osd

~~~bash
#ceph osd out osd.5
~~~

3、接下來的步驟與上述刪除osd相同,crush rm、osd rm等等。刪除osd後,觀察ceph -s,等待HEALTH_OK,集羣數據同步完成。

<br>

4、拔出服務器故障硬盤,插入新硬盤,接下來步驟與添加osd盤相同。


集羣維護標誌位

在我們上述的Ceph集羣操作過程,Ceph對外的服務一直都沒有中斷,但在數據同步的過程不免有性能損失,因此在生產環境中做變更實施時,Ceph提供一些方法來維持當前運行狀態,如設置標誌位,然後在業務非高峯期取消標誌位讓其數據同步。

1、標誌位設置

~~~bash
#ceph osd set|unset <flag_name>
~~~

ceph提供的標誌位列表:


  • noout:無論當前osd狀態如何,ceph集羣不會將任何osd標記爲out

  • nodown:無論當前osd狀態如何,ceph集羣不會將任何osd標記爲down

  • noup:ceph集羣不會將任何已經DOWN的osd標記爲UP狀態

  • noin:ceph集羣不允許新的osd加入集羣,在一次添加多個osd而不想讓其自動加入集羣非常游泳

  • norecover: ceph集羣不做集羣恢復(cluster recovery)

  • nobackfill:ceph集羣不做數據回填(backfilling)

  • norebalance:ceph集羣不做集羣再平衡(cluster rebalancing)

  • noscrub :ceph集羣不做osd清理(scrubbing)

  • nodeep-scrub:ceph集羣不做osd深度清理(deep-scrubbing)

  • notieragent:禁用緩存分層代理(cache pool tiering agent)


除了以上標誌位,還有ceph命令來修復osd和pg

~~~bash
#ceph osd repair:修復特定osd
#ceph pg repair :修復特定PG,謹慎使用
#ceph pg scrub : 清理指定PG
#ceph deep-scrub:指定PG深度清理
~~~


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章