1. 程式人生 > >redis因AOF追加磁盤阻塞發生故障轉移

redis因AOF追加磁盤阻塞發生故障轉移

word 速度 隨著 流程 追加 family 越來越大 工作流 splay

追加AOF時磁盤繁忙

技術分享圖片

redis 錯誤日誌截圖

下圖為AOF工作流程圖


技術分享圖片

AOF工作流程圖

1.所有的寫入命令會追加aof_buf(緩沖區中)。

2.AOF緩沖區根據對應的策略向硬盤做同步操作。

3.隨著AOF文件越來越大,需要定期對AOF文件進行重寫,達成壓縮的目的(對一個key跟新100次會有100條記錄, 重寫後只留最後一條).

4.當redis服務器重啟時,可以加載AOF文件進行數據恢復。

原主數據庫追加aof阻塞

ip地址 原主庫追加阻塞次數.

aof_delayed_fsync:154


技術分享圖片

使用everysec(每秒)刷盤策略的流程圖


技術分享圖片

1.主線程負責AOF緩沖區

2.AOF線程負責每秒一次同步磁盤操作,並記錄最近一次同步時間.

3.主線程對比AOF同步時間:

3.1如果距離上次同步時間在兩秒內,主線程直接返回。

3.2如果距離上次同步時間超過兩秒(意識是現在還在同步),主線程將會被阻塞, 直到同步完成。

整個集群的其他主庫阻塞次數統計

15臺主庫的AOF 在SYNC的時候因磁盤繁忙,

追加AOF時阻塞次數,其中有11臺主庫被阻塞過,

aof_delayed_fsync阻塞次數.

ip1

# Persistence

aof_delayed_fsync:1

ip2

# Persistence

aof_delayed_fsync:18

ip3

# Persistence

aof_delayed_fsync:0

ip4

# Persistence

aof_delayed_fsync:1

解決方案

1.打開no-appendfsync-on-rewrite參數, 默認關閉,表示AOF重寫期間不做sync操作, 並不能根本解決問題, 因為故障轉移前沒有發生AOF重寫。

2.關閉AOF, 如果一組(主-從) 同時宕機, 會丟失5分鐘數據,啟動redis時如果沒有發現AOF文件,redis 會選擇RDB來恢復數據,rdb copy-on-write到磁盤的頻率5分鐘一次。

3.提升磁盤寫入速度。


重啟加載流程圖


技術分享圖片

RDB 物化到磁盤頻率圖


技術分享圖片

redis因AOF追加磁盤阻塞發生故障轉移