redis集羣面試題

1、介紹下redis集羣
redis集羣分爲3種模式。主從複製,sentinel模式,cluster模式。主從複製沒有解決主服務器宕機的問題及主服務器壓力過大的問題,sentinel模式沒有解決主服務器壓力過大的問題,cluster不存在這兩種問題。
2、主從複製是如何實現數據一致性的?
通過複製功能實現一致性。複製分爲同步和命令傳播。
同步:
1、從服務器發送同步命令
2、主服務器在後臺生成rdb文件,並用緩衝區記錄當前所有執行的命令
3、rdb文件生成成功,發送rdb文件給從服務器。
4、主服務器發送緩衝區保存的寫命令。
命令傳播:
主服務器會將自己執行的寫命令發送到從服務器
3、斷線複製和初次複製有什麼不一樣
初次複製採用完整重同步,斷線複製採用部分重同步。
完整重同步即2問。
部分重同步功能由3個部分構成:
複製積壓緩衝區、主從服務器的複製偏移量,服務器運行ID
執行復制的兩臺服務器會分別維護一個複製偏移量,主服務器每次傳播N個字節,主服務器偏移量加N,從服務器收到N個字節數據,偏移量加N。通過偏移量可以判斷服務器數據是否一致。
複製積壓緩衝區長度固定先進先出隊列,默認大小1MB。
iD記錄上一次複製的主服務器的運行ID。
斷線複製在斷線時間過久不合適。
4、講一下複製的過程
1、設置主服務器地址與端口
2、建立套接字連接
3、發送ping命令
4、身份驗證
5、發送自己的監聽端口信息
6、同步
7、命令傳播
5、心跳檢測
在命令傳播階段,從服務器默認每秒一次向主服務器發送命令:replconf ack < replication_offset >
replication_offset:複製偏移量。
當主服務器檢測到複製偏移量與少於自己的偏移量時,就會在複製積壓緩衝區裏找到從服務器缺少的數據。
6、有一個或多個哨兵組成的sentinel系統可以監視任意多個主服務器及其從屬服務器,監視主服務器進入下線狀態並升級從服務器
sentinel本質是一個運行在特殊模式下的redis服務器
7、sentinel是如何實現故障轉移的?
sentinel 從主服務器的下屬服務器選擇一個從服務器作爲新的主服務器。
向其他的所有從服務器發送新的複製指令
監視已下線的主服務器,重新上線時變爲從屬服務器
8、sentinel與服務器的通信
創建兩個異步連接:
命令連接,向服務器發送命令,接收回復
訂閱連接,訂閱服務器的_sentinel_:hello頻道。
sentinel會以每十秒一次的頻率向服務器發送info命令,分析回覆,獲取服務器信息。
9、爲什麼是兩個連接?
爲了不丟失訂閱頻道的信息和向服務器發送命令
10、sentinel系統如何通信?
通過每2秒向向_sentinel_:hello頻道(redis服務器)推送sentinel本身的信息。其他的sentinel會收到信息,然後更新對其他sentinel對發送消息的sentinel的認知。在添加新的sentinel時,通過頻道信息添加一個新的sentinel進入系統。同時sentinel直接也會有命令連接,無訂閱連接,訂了主從服務器,更新哨兵信息。
11、怎麼檢測下線狀態?
1、在默認情況下sentinel會以每秒一次的頻率向所有與它創建了命令連接的實例發送ping命令,並通過返回結構判斷是否下線。
2、如果主服務器下線,sentinel會向其他sentinel發送命令進行詢問,當接收到足夠數量的確認下線判斷後。纔會對主服務器進行故障轉移。
故障轉移
1、sentinel協商選舉領頭sentinel
2、在從服務器中選一個將其轉換爲主服務器
3、讓其他從服務器改爲複製新的主服務器
4、將已下線的主服務器設置爲從服務器。當其上線後變成從服務器
集羣怎麼建立
集羣通過分片來進行數據共享,並提供複製和故障轉移功能
通過客服端向服務端發送cluster meet ip port命令建立集羣。
槽指派
redis集羣通過槽指派來保存鍵值對。集羣的整個數據庫分爲16384個槽,每個鍵都屬於一個槽,每個節點可以處理0個或者最多16384個槽。當16384個槽都有節點在處理時集羣上線,否則集羣下線。
集羣節點只能使用0號數據庫,而單機服務器沒有限制
集羣故障轉移
集羣節點分爲主節點和從節點,主節點用於處理槽,從節點複製主節點,當主節點下線後,從節點代替下線主節點繼續處理命令。
故障檢測
定期向其他節點發送ping命令。(半數以上節點認爲某個節點下線纔會標記爲下線,並廣播關於主節點下線消息)
領頭選舉
1、發現主節點下線的從節點向所有具有選舉權的節點發送投票信息,要求其向自己投票。
2、若主節點未投給其他節點(當前紀元)。則投給該從節點,紀元增加。
3、當一個配置紀元內超過半數選舉該從節點,則從節點成爲主節點。否則進入下一配置紀元繼續選舉。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章