成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試官:你們Redis故障過嗎,怎么解決?

存儲 存儲設備 Redis
Redis 4.0 開始,當一個實例在故障轉移后被提升為 master,它仍能與舊 master 的 Replica 進行部分重同步。

 [[392661]]

1 重啟和故障轉移后的部分重同步

Redis 4.0 開始,當一個實例在故障轉移后被提升為 master,它仍能與舊 master 的 Replica 進行部分重同步。為此,Replica 會記住舊 master 的舊 replication ID 和復制偏移量,因此即使詢問舊的 replication ID,也可以將部分復制緩沖提供給連接的 Replica 。

但升級的 Replica 的新 replication ID 將不同,因為它構成了數據集的不同歷史記錄。例如,master 可以返回可用,并且可以在一段時間內繼續接收寫命令,因此在被提升的 Replica 中使用相同的 replication ID 將違反 一對復制標識和偏移對只能標識單一數據集 規則。

Replica 在關機并重啟后,能夠在 RDB 文件中存儲所需信息,以便與 master 進行重同步。這在升級的情況下很有用。當需要時,最好使用 SHUTDOWN 命令執行 Replica 的保存和退出操作。

2 主從數據不一致

很顯然,這是由于主從網絡延時。

2.1 主多從少

部分重同步。可通過命令 PSYNC master_run_id offset 執行。

2.2 主少從多

全量復制,覆蓋。這種情況是因為 Replica 是讀寫模式,因此:

關閉 Replica 的讀寫模式

或刪除 Replica 的數據,重新從 Master 全量復制

3 數據延遲

編寫外部程序監聽主從節點的復制偏移量,延遲較大時發出報警或通知客戶端,切換到 Master 或其他節點。

設置 Replica:

  1. slave-serve-stale-data = no 

除 INFO 和 SLAVOF 命令之外的任何請求都會返回一個錯誤“SYNC with master in progress”。

當 Replica 失去與Master 的連接時或仍在進行復制時,Replica 可以如下方式起作用:

  • 若 replica-serve-stale-data 為 yes(默認值),則 Replica 仍會回復客戶端請求,可能帶有過期數據,或者說,若這是第一次同步,則數據集可能只是空的

  • 若將 replica-serve-stale-data 設為no,則該 Replica 將對除以下信息以外的所有命令返回錯誤“SYNC with master in progress”:INFO,REPLICAOF,AUTH,PING,SHUTDOWN,REPLCONF,ROLE,CONFIG ,SUBSCRIBE,UNSUBSCRIBE,PSUBSCRIBE,PUNSUBSCRIBE,PUBLISH,PUBSUB,COMMAND,POST,HOST和LATENCY

4 臟數據

4.1 臟數據產因

4.1.1 Redis 刪除策略

因為讀到了過期數據,而讀到過期數據就是 Redis 刪除策略所導致的:

惰性刪除

Master 每次讀取命令時都會檢查K是否超時,若超時,則執行 del 命令刪除K,之后異步把 del 命令同步給 Replica,即可保證數據復制的一致性。切記 Replica 永遠不會主動去刪除超時數據。

定時刪除

Redis 的 Master 在內部有定時任務,會循環采樣一定數量的K,當發現采樣K過期,會執行 del,之后再同步給每個 Replica。

主動刪除

當前已用內存超過 maxmemory 限定時,觸發主動清理策略。主動設置的前提是設置了 maxMemory 的值 注:如果數據大量超時,master 節點采樣速度跟不上過期的速度,而且 master 節點沒有讀取過期鍵的操作,那 slave 節點是無法收到 del 命令的,這時從節點上讀取的數據已經是超時的了。

4.1.2 從節點可寫

如果從節點(默認讀模式)是讀寫模式,可能誤寫入從節點的數據,后期就會成為臟數據。

4.2 解決方案

4.2.1 忽略

比如 12306 查余票、雙十一秒殺的庫存,你會發現經常就是前后不一致的數據。因為你查詢時得到的數據,就是需要允許寫錯誤。

4.2.2 選擇性強制讀主

但是真正下單扣庫存時,你就必須確保數據的正確性 選擇強制讀 master,slave間接變為備份服務器(某個業務)。

4.2.3 從節點只讀

防止 slave 寫入臟數據。

4.2.4 Redis自身優化

Redis3.2 版本解決了 Redis 刪除策略導致的過期數據,在此版本中 slave 讀數據前,會檢查K過期時間,以決定是否返回數據。

5 數據安全性

5.1 關閉主節點持久化

為提升Redis性能,一般會關閉 Master 持久化的功能(這樣所有數據都會持久化在 slave),因為主從同步時,Master 都會 bgsave rdb。但這樣也會帶來復制的安全性問題。

在使用 Redis 復制功能時的設置中,推薦在 master 和在 slave 中啟用持久化。當不可能啟用時,例如由于非常慢的磁盤性能而導致的延遲問題,應該禁用主節點自動重啟功能。

風險場景

關閉 Master 的持久化設置,Replica1 和 Replica2 從 Master 復制數據。Master 只有內存數據,沒有磁盤數據了。

當 Master 宕機,由于自動重啟機制重啟了,但重啟后由于持久化被關閉了,Master數據集為空!

重啟后的 Master,發現 runId 發生變化,也會重新和從節點建立連接,兩個從節點會發起復制請求,從Master 復制數據,但 Master 此時數據集為空,因此復制的結果是它們會銷毀自身之前的數據副本而變成空數據集。 圖片

5.1.1 解決方案

犧牲性能,開啟 Master 的持久化功能。

為了性能,依舊選擇關閉,那就讓主節點不自動重啟,比如不要有Docker或腳本等自動重啟機制。

本文轉載自微信公眾號「JavaEdge」,可以通過以下二維碼關注。轉載本文請聯系JavaEdge公眾號。

 

 

責任編輯:武曉燕 來源: JavaEdge
相關推薦

2022-07-26 08:40:42

Java并發工具類

2022-08-02 06:31:32

Java并發工具類

2022-06-30 08:14:05

Java阻塞隊列

2022-07-11 10:47:46

容器JAVA

2023-01-26 00:25:09

JVM設置技術

2024-01-22 10:07:48

Redis持久化功能緩存擊穿

2022-06-10 13:56:42

Java

2022-06-30 14:31:57

Java阻塞隊列

2020-03-06 15:36:01

Redis內存宕機

2021-09-08 08:06:57

Redis原子性數據類型

2022-07-18 14:18:26

Babel代碼面試

2021-11-02 09:05:25

Redis

2023-02-08 07:04:20

死鎖面試官單元

2024-04-03 00:00:00

Redis集群代碼

2024-07-10 10:08:36

項目多表關聯哈希

2022-06-15 15:14:17

Java公平鎖非公平鎖

2022-06-08 13:54:23

指令重排Java

2022-06-09 11:20:44

volatile關鍵字

2022-07-06 13:48:24

RedisSentinel機制

2024-04-09 10:40:04

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天堂色 | 特黄一级 | 日韩视频一区在线观看 | 中文字幕一区二区三区四区不卡 | 97视频在线观看网站 | 午夜欧美一区二区三区在线播放 | 午夜视频在线免费观看 | av在线视| 美国黄色一级片 | 成人网av | 九九综合 | 亚洲高清视频在线观看 | 色久影院 | 亚洲福利av | 国产精品揄拍一区二区 | av在线视 | 成人av网页| 成人av电影免费在线观看 | 神马久久久久久久久久 | 欧美日韩亚洲一区 | 99精品视频网 | h片免费看 | 黄色日本视频 | a级免费黄色片 | 成人影院在线观看 | 久久亚洲一区二区 | 欧美精品一区二区三区在线 | 国产精品国产三级国产aⅴ浪潮 | 视频在线一区 | 亚洲精品免费看 | 欧美久久精品一级黑人c片 91免费在线视频 | 日韩a| 成人免费共享视频 | 久草成人网 | 岛国av一区二区 | 亚洲一区中文字幕 | 久久久精品一区二区三区 | 国产精品3区 | 久久精品91久久久久久再现 | 91精品国产综合久久久久久 | 国产麻豆乱码精品一区二区三区 |