Ceph在高IO下的死鎖故障
在一臺高性能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.在系統設計的時候,應該將存儲網絡和業務網絡隔離和分開。一個系統服務,應該分為,外網,業務網,存儲網,心跳網,管理網,五種網絡組建形式。