Ceph在高IO下的死鎖故障

jopen 9年前發布 | 32K 次閱讀 Ceph 分布式/云計算/大數據

在一臺高性能PC服務器上,使用ceph做虛擬機鏡像的存儲。在做壓力測試的情況下,出現了該服務器所有虛擬機不能訪問的故障。

引發原因:

1.在虛擬機當中安裝了一個網站服務,網站服務中使用了redis作為緩存服務器。在壓力比較大的情況下(8000千次訪問每秒),發生了宿主機所有的虛擬機全部不能訪問的情況

2.發生故障時,部分虛擬機不能ping到,部分虛擬機是能ping到,但是不能ssh登陸


開始以為是網橋故障,KVM的virtio的網卡故障非常著名,在使用網橋的情況下,會出現內存溢出。導致網橋失效。 Xen給的解決方案是關閉網橋的tso 支持。

(運行命令ethtool --offload <network device>  tso off )

但是重啟網絡服務后,該故障沒有消失。

因此排除網橋故障。


多次重現故障之后,有一個虛擬機的ssh沒有斷掉,所以還能執行cd命令,但是ls命令無法執行,報告input/output error,此錯誤為文件系統故障的表現。

所以開始懷疑文件系統出現問題 。

此文件系統為ceph,查看ceph日志,發現在發生故障的同時,ceph報大量一下的故障日志:

2015-06-30 16:36:28.493424 osd.0 172.23123123:6800/96711 9195 : cluster [WRN] 6 slow requests, 6 included below;
oldest blocked for > 30.934796 secs

還有

2015-06-26 18:46:45.192215 osd.2 172.132131231:6800/68644 5936 : cluster [WRN] slow request 240.415451 seconds old
, received at 2015-06-26 18:42:44.776646: osd_op(13213213500 [
stat,set-alloc-hint object_size 4194304 write_size 4194304,write 2269184~524288] 0.5652b278 ack+ondisk+write+kno
wn_if_redirected e48545) currently waiting for rw locks

明顯出現了死鎖。

查看磁盤IO記錄,發現redis服務器,在故障發生時又大量的磁盤寫入操作,發現在高操作頻率的情況下,會比較頻繁的觸發rbd的持久化,因此引起了大量磁盤io,這些磁盤IO導致了其他磁盤操作得不到足夠的寫入時間,引起了ceph對osd的死鎖。

解決方案是關閉了redis的rbd持久化,該問題不再出現。

長久的解決辦法是不讓redis持久化直接往ceph上的分區上寫入。還有就是不要再ceph上的虛擬機鏡像進行高IO的寫入或者讀取(好不靠譜。。。)

經驗總結:

1.Ceph在高IO下存在死鎖的風險,Ceph沒有提供解鎖機制,官方的解決方案是不要在ceph上放虛擬機鏡像。。。無語。。

2.在系統設計的時候,應該將存儲網絡和業務網絡隔離和分開。一個系統服務,應該分為,外網,業務網,存儲網,心跳網,管理網,五種網絡組建形式。


來自:http://my.oschina.net/brinlike/blog/472783

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!