記一次Cephfs客戶端讀寫大文件卡死問題解決

環境

集羣版本:12.2.10
集羣啓動了個MDS,其中三個active 一個standby
客戶端內核3.10,使用ceph-fuse 12.2.10進行掛載使用,掛載到客戶機/data1/test目錄下使用

情況

往/data1/test中cp小文件無異常,但是使用中cp一個3GB大小的文件時候,發現cp運行了一會就卡死了,CTRL+C和kill都無法殺死cp進程。這個時候在其他機器上掛載該路徑寫數據也都會卡死
通過ps -aux|grep cp 查看cp進程發現,該進程已經處於D狀態(disk sleep,表示硬件資源不滿足而處於深度休眠狀態, 一般是等待磁盤。這種情況下無法殺死進程,除非重啓機器)
但是在同一網段中某些機器上卻不會出現卡死的情況

問題的解決

  1. 檢查MDS
    通過查看ceph官方文檔https://ceph.seekerliu.com/cephfs/troubleshooting/,官方文檔中列出了以下可能情況:
  • 系統過載(如果你還有空閒內存,增大 mds cache size 配置試試,默認才 100000 。活躍文件比較多,超過 MDS 緩存容量是此問題的首要起因!)
  • 客戶端比較老(行爲異常),或者
  • 底層的 RADOS 問題。
    由於集羣剛搭建起來,目前沒有其他人使用,因此不存在過載問題;此外ceph-fuse客戶端版本和集羣版本一致,不存在客戶端版本問題;
    並且查看了MDS節點的日誌並沒有發現什麼異常,故排除上述原因
  1. 檢查客戶端
    首先在ceph.conf中添加如下信息
[client]
debug fuse = 5
debug ms = 1
debug monc = 5
debug objectcacher = 5
log file = /var/log/ceph/ceph-client.log

然後使用以下命令開啓ceph-fuse的日誌 (指定ceph.conf的位置)

sudo ceph-fuse -n client.$user -r $cephfsPath --key $keyring -m $monHost $path --conf /etc/ceph/ceph.conf

然後掛載成功後,再次往路徑中cp大文件,發現卡住了,查看發現以下錯誤日誌:

7f6842bed700  1 -- 10.18.8.95:0/741587067 >> 10.18.10.12:6801/237272 conn(0x56267a223800 :-1 s=STATE_CONNECTING_RE pgs=0 cs=0 l=1)._process_connection reconnect failed

其中10.18.8.95是客戶機,10.18.10.12是ceph集羣中部分osd節點所在機器。
此時10.18.8.95 ping 10.18.10.12無法ping通,但是反過來是能ping通的

Reply From 10.18.10.12 : Destination Host Unreachable

同一網段10.18.8.92卻能pin通10.18.10.12,很奇怪
在10.18.8.95運行以下命令

[@ss-8-95 ~]# arp -a|grep 10.18.10.12
? (10.18.10.12) at <incomplete> on eth2

原來是10.18.10.12這臺機器的MAC地址沒有在10.18.8.95的arp緩存中?很奇怪。可能是網卡驅動的問題,機器重啓後好了。
這下就不會卡死了

題外話

使用ceph-fuse時候cp卡死了但又不想重啓機器怎麼辦?
步驟如下:

  1. 找到ceph-fuse進程kill
  2. 然後umount掛載路徑
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章