問題處理--ceph集群osd數據盤故障,進行數據盤更換操作


【問題背景】
當前環境
集群信息: 一個3個mon節點,10個osd節點的ceph集群。
每個osd節點上有16塊1.8T的數據盤和4塊ssd的journal盤。osd磁盤做RAID0,WB模式。
ceph版本: Jewel
 
【問題現象】
ceph狀態告警,告警內容是osd節點node-115上的osd.197 down。
通過下面命令定位故障osd
ceph -s 
ceph osd tree |grep down 
 
osd.197 down后觸發數據均衡,ceph狀態一直為health warnning中。
 
【問題原因】
 
 
定位到了是node-115節點上的osd故障后,登陸到node-115節點查看系統日志
dmesg -T | grep -i err
 
可以看到 磁盤sdk1 報錯信息如下,

  

通過storcli工具確定故障磁盤槽位信息EID:Slt 是 0:11 ,華為服務器也可以參考 這篇文章來根據盤符確定槽位信息 
strocli64 /c0 show all |more
 
【解決方案】

 下一步進行osd磁盤更換,更換步驟:

1. 移除故障的osd

注:如果有多個osd故障,建議每次只踢一個osd,等待數據平衡完成再踢下一個,保證數據不丟失。依次將故障osd踢出ceph集群。

 1.1 檢查ceph集群狀態及副本數,集群狀態正常后再執行步驟1.2。

#ceph -s (集群狀態為OK)

#ceph osd dump | grep "replicated size" (檢查所有pool是否為3副本)

 1.2 執行以下命令移除故障OSD,其中{$X}為osd id。(命令執行時確認成功后再執行下一條)

ceph osd out {$X}

systemctl stop ceph-osd@{$X} #把 OSD 踢出集群后,它可能仍在運行,就是說其狀態為 up 且 out 。刪除前要先停止 OSD 進程

ceph osd crush rm osd.{$X}

ceph auth del osd.{$X}

ceph osd rm {$X}

 

2.檢查ceph集群狀態

2.1 故障OSD移除后執行ceph -s檢查集群狀態是否ok;正常后再進行后續操作。

2.2 卸載原OSD掛載點信息。

#df -h #確認osd掛載點

#umount  /var/lib/ceph/osd/ceph-{$X}

 

 

3.(可選:如果umount操作hang死,則需要重啟服務器,一般不需要重啟,根據實際情況判斷

注:對於fault硬盤,執行umount后進程會hang死,需重啟服務器解決。(可通過ps -aux |grep umount查詢是否存在異常進程)

本次操作時就遇到了umount進程hang死的情況。

也無法kill掉這個進程,只能重啟物理服務器了。

3.1 重啟服務器

#注意,重啟服務器前需要設置noout,否則重啟會觸發ceph集群數據均衡。

(1)檢查ceph集群狀態是否正常,同時不存在recovery/backfill的數據。

#ceph -s (集群狀態為ok)

(2)全局設置noout

ceph osd dump |grep flags (查詢集群當前標記)

ceph osd set noout

(3)登錄需要重啟的存儲節點,執行如下命令停止節點中所有的OSD。

#systemctl stop ceph-osd.target

(4)通過ceph命令查詢集群的狀態,無recovery的數據后再進行重啟操作。

#ceph -s 

#ceph osd tree (查詢osd的狀態)

#ceph osd stat > /tmp/osdmap.log (查詢當前集群中osdmap信息並記錄)

#reboot #軟重啟

 注意:本次在重啟服務器,服務器在關機的時候hang住了,等了很久發現沒起來,登錄ipmi控制台查看,hang在關機步驟,決定在ipmi控制台進行硬重啟下電操作。

 

 

硬重啟后,機器仍然無法進入系統,報錯如下:

 

參考下面的博客解決掉了,雖然不是dell服務器,本環境是華為H2288V3服務器同樣適用,因為故障盤是做的raid0,該故障盤的緩存還在,需要手動清理下故障盤的緩存。操作步驟參考下面鏈接。

服務器更換硬盤,啟動系統報錯:there are offline or missing virtual drivers with preserved cache

ok,服務器重啟后,正常。進行下一步操作。

 

 4更換故障硬盤

4.1 全局設置nodeep-scrub noout

#ceph osd set  nodeep-scrub

#ceph osd set  noout

#ceph health detail (查看存在noout、nodeep-scrub的flag)

 

4.2 對需要更換的硬盤進行拔除,並更換成新硬盤。聯系機房同事,進行磁盤更換。

 

4.3 登錄硬盤故障的存儲節點,對更換的新硬盤進行重組RAID0操作;下圖為RAID相關參數說明請參考。

 

 (1 )查詢RAID卡的controller_id,例如以下查詢到controller_id為0

/opt/MegaRAID/storcli/storcli64  show

 

(2)查詢RAID卡是否存在RAID信息保存的緩存數據,例如以下查詢到的VD 1為殘留信息。我們剛剛已經清理過了,所以本次查看是沒有殘留信息。

/opt/MegaRAID/storcli/storcli64 /c0 show preservedcache

 

 刪除不使用的preservedcache信息。

/opt/MegaRAID/storcli/storcli64 /c0 /v1 delete preservedcache

(3)檢查新更換硬盤的狀態是否為UGOOD,DG的標識是否為-;(UGOOD意為未進行配置的好盤)

/opt/MegaRAID/storcli/storcli64 /c0 show all |more

 

(4)(可選)如果檢查新更換的硬盤狀態不為UGOOD,狀態為JBOD或則Ubad可通過以下命令進行硬盤狀態的重置。

/opt/MegaRAID/storcli/storcli64 /ccontroller_id/eenclosure_id/sslot_id set good

 

(5)創建RAID0;

/opt/MegaRAID/storcli/storcli64 /ccontroller_id add vd r0  drives=enclosure_id:startid-endid wb

 

/opt/MegaRAID/storcli/storcli64 /c0 add vd r0  drives=0:11 wb

#本環境為了更好的利用到raid卡的cache,所以配置wb模式,經過測試,wb模式性能更高。但是配置wb模式前提是確定raid卡是有電池保護的。

Cache讀寫模式:

wt:當磁盤子系統接收到所有傳輸數據后,控制器將給主機返回數據傳輸完成信號。

wb:控制器Cache收到所有的傳輸數據后,將給主機返回數據傳輸完成信號。

awb:在RAID卡無電容或電容損壞的情況下,強制使用“wb”模式。

 

5. 添加新的OSD

注:每次只添加一個OSD,等待數據平衡完成后再添加下一個。

1. 檢查待擴容OSD節點的網絡是否正常。

#ip a |grep gl    (獲取br-storagepub、br-storage網絡ip地址)

#ping {IP}        (檢查與其他存儲節點br-storagepub、br-storage網絡通信是否正常)

#telnet {IP} 6800 (檢查與其他存儲節點6800端口通信是否正常)

#ovs-appctl bond/show ovs-bond0 //檢查Bond0的狀態是否正常;

#ovs-appctl bond/show ovs-bond1 //檢查Bond1的狀態是否正常;

 

2. 檢查ceph集群數據recovery和backfill的優先級是否修改過,默認1。

#cat /etc/ceph/ceph.conf |grep "osd_recovery_op_priority\|osd_max_backfills"

 

3. 查詢待擴容的OSD與日志盤對應關系可使用以下命令

#ceph-disk list

#ls -al /var/lib/ceph/osd/ceph-*/journal |awk '{print $11}' |xargs -n1 ls -al

確認本次添加的osd為node-115上的sdk,對應的journal盤是sdt1

 

4. 更換后的osd磁盤做分區。

ssh node-115

parted /dev/sdk mklabel gpt

parted /dev/sdk mkpart primary 2048s 100%

 

(1)對數據盤打標簽(本次只更換數據盤,所以操作該步驟)

#sgdisk --typecode=1:4fbd7e29-9d25-41b8-afd0-062c0ceff05d /dev/sdk

 

(2)日志盤打標簽(日志盤不更換的情況下無需操作)

sgdisk --typecode=1:45B0969E-9B03-4F30-B4C6-B4B80CEFF106 /dev/sdt

sgdisk --typecode=2:45B0969E-9B03-4F30-B4C6-B4B80CEFF106 /dev/sdt

sgdisk --typecode=3:45B0969E-9B03-4F30-B4C6-B4B80CEFF106 /dev/sdt

sgdisk --typecode=4:45B0969E-9B03-4F30-B4C6-B4B80CEFF106 /dev/sdt

 

 

5. ceph的mon節點添加OSD,即控制節點中添加。

#ceph-deploy --overwrite-conf osd prepare node-115:/dev/sdk1:/dev/sdt1

#ceph-deploy --overwrite-conf osd activate node-115:/dev/sdk1:/dev/sdt1

 

#watch ceph -s (數據平衡完畢后再擴容下一塊osd)

待所有osd擴容后需取消全局設置的noin nodeep-scrub noout。

#ceph -s (無recovery、backfill數據)

#ceph osd unset  nodeep-scrub

#ceph osd unset   noout 

#ceph -s (集群狀態ok后擴容工作結束)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM