RAID鋰電池充放電導致的MySQL性能抖動優化
DB部署在高配置服務器,磁盤用的raid 10陣列技術,用了6塊磁盤組成RAID 10磁盤陣列架構。
RAID 10:有很多磁盤組成一個陣列,所有數據分散寫入不同磁盤,因為有多塊磁盤,所以你的磁盤陣列整體容量就很大,而且同時寫入多塊磁盤,讓你的磁盤讀寫并發能力很強:
但這種模式下,最大問題就是若你磁盤壞了一塊,就會丟失一部分數據。所以一般若要嚴格保證磁盤數據不丟失,就得用RAID 1:兩塊磁盤為鏡像關系,你寫的所有數據,在兩塊磁盤上都有,形成數據冗余,一塊磁盤壞了,另外一塊磁盤上還有數據。
一塊磁盤如果壓力很大,可以讓讀請求路由到另外一塊磁盤上去,分擔壓力,反正他倆的數據都是冗余的,是一樣的。
RAID 10,就是RAID 0 + RAID 1組合起來:當時生產環境的服務器部署,我們有6塊磁盤組成了一個RAID 10的陣列,每2塊磁盤組成一個RAID 1互為鏡像的架構,存放數據冗余,共3組RAID 1,然后對于每一組RAID 1寫入數據的時候,是用RAID 0的思路,即不同組的磁盤的數據是不一樣的,但是同一組內的兩塊磁盤的數據是冗余一致的
內部有個鋰電池的,30天進行一次充放電,每次鋰電池充放電就會導致RAID寫入時不經過緩存,性能會急劇下降,所以我們發現線上數據庫每隔30天就會有一次劇烈性能抖動,數據庫性能下降10倍。
當時為排查這個問題,我們使用linux命令查看了RAID硬件設備的日志,不同的廠商的RAID設備,這個命令實際上是不一樣的,發現RAID就是每隔30天有一次充放電的日志,所以就是由于這個定期的充放電導致了線上數據庫的性能定期抖動!
如何解決RAID鋰電池充放電問題導致的存儲性能抖動
三種解決方案
給RAID卡把鋰電池換成電容,電容是不用頻繁充放電的,不會導致充放電的性能抖動,還有就是電容可以支持透明充放電,就是自動檢查電量,自動進行充電,不會說在充放電的時候讓寫IO直接走磁盤,但是更換電容很麻煩,而且電容比較容易老化,一般不常用
手動充放電,這個比較常用,包括一些大家知道的頂尖互聯網大廠的數據庫服務器的RAID就是用了這個方案避免性能抖動,就是關閉RAID自動充放電,然后寫一個腳本,腳本每隔一段時間自動在晚上凌晨的業務低峰時期,腳本手動觸發充放電,這樣可以避免業務高峰期的時候RAID自動充放電引起性能抖動
充放電的時候不要關閉write back,就是設置一下,鋰電池充放電的時候不要把緩存級別從write back修改為writethrough,這個也是可以做到的,可以和第二個策略配合起來使用
MySQL 數據庫
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。