首頁 > 遊戲

redis叢集-主從哨兵

由 非鴿傳書 發表于 遊戲2021-10-02

簡介8版本以上使用psync命令完成同步,過程分“全量”與“部分”複製 全量複製: 一般用於初次複製場景(第一次建立SLAVE後全量) 部分複製: 網路出現問題,從節點再次連主時,主節點補發缺少的資料,每次資料增加同步 心跳: 主從有長連線心跳

哨兵是怎麼來的

redis叢集-主從/哨兵

REDIS cluster-tutorial —— Redis中文資料站 —— Redis中國使用者組(CRUG)

REDIS cluster-spec —— Redis中文資料站 —— Redis中國使用者組(CRUG)

redis叢集一共有三種,

主從模式

哨兵模式

叢集模式

主從(master-slave)

主從模式/主從複製,就類似mysql的讀寫分離。主節點主要用來承擔寫的操作,從節點用來處理讀請求。一個主節點可以有多個從節點,但是從節點只能有一個主節點(有點像廢話(ง •_•)ง)

主節點配置檔案:

daemonize yesport 6379# log、pid、data路徑logfile E:\softToll\Reids\master-slave\Redis-x64-5。0。9-master\redis_6379。logpidfile E:\softToll\Reids\master-slave\Redis-x64-5。0。9-master\redis_6379。piddir E:\softToll\Reids\master-slave\Redis-x64-5。0。9-master\data# aof# 主節點開啟AOF機制appendonly yes# master# 繫結本臺機器的IP,否則主從節點無法通訊bind 127。0。0。1# 設定master的認證口令為redisrequirepass redis# backlog大小repl-backlog-size 1mb# 快照同步的超時時間repl-timeout 30# 開啟無盤複製repl-diskless-sync yes# 無盤複製的延遲預設為5s,是為了等待更多的slave連線repl-diskless-sync-delay 5# 是否開啟主從節點複製資料的延遲機制# 當關閉時,主節點產生的命令資料無論大小都會及時地傳送給從節點,這樣主從之間延遲會變小# 但增加了網路頻寬的消耗。適用於主從之間的網路環境良好的場景# 當開啟時,主節點會合並較小的TCP資料包從而節省頻寬。# 預設傳送時間間隔取決於Linux的核心,一般預設為40毫秒。# 這種配置節省了頻寬但增大主從之間的延遲。適用於主從網路環境複雜或頻寬緊張的場景repl-disable-tcp-nodelay no# 觸發快照同步的條件# 如果增量同步的快取大於256MB,或者超過60s大於64MB,則觸發快照同步client-output-buffer-limit slave 256mb 64mb 60# 主從節點進行心跳的時間間隔repl-ping-slave-period 8

從節點配置

daemonize yes# 由於單機模仿所以指定埠port 6389# log、pid、data路徑logfile E:\softToll\Reids\master-slave\Redis-x64-5。0。9-slave\redis_6379。logpidfile E:\softToll\Reids\master-slave\Redis-x64-5。0。9-slave\redis_6379。piddir E:\softToll\Reids\master-slave\Redis-x64-5。0。9-slave\data# slave# 繫結本機的IPbind 127。0。0。1# 繫結master的ip和portslaveof 127。0。0。1 6379# 從節點只讀slave-read-only yes# 從節點在處於快照同步期間是否對外提供服務slave-serve-stale-data yes# 如果 master 檢測到 slave 的數量小於這個配置設定的值,將拒絕對外提供服務,# 0 代表,無論 slave 有幾個都會對外提供服務min-slaves-to-write 0# 如果 master 發現大於等於 ${min-slaves-to-write} 個 slave 與自己的心跳超過此處配置的時間(單位s)# 就拒絕對外提供服務min-slaves-max-lag 10# master的認證口令masterauth redis

redis叢集-主從/哨兵

大致流程如下:

儲存主節點資訊

主從建立socket連線

傳送ping命令

許可權驗證

同步資料集

命令持續複製

redis 2。8版本以上使用psync命令完成同步,過程分“全量”與“部分”複製 全量複製: 一般用於初次複製場景(第一次建立SLAVE後全量) 部分複製: 網路出現問題,從節點再次連主時,主節點補發缺少的資料,每次資料增加同步 心跳: 主從有長連線心跳,主節點預設每10S向從節點發ping命令,repl-ping-slave-period控制傳送頻率

優點

讀寫分離,使redis的承載能力更強

資料同步不會阻塞,redis仍然能對外提供服務

缺點

不具備自動容錯和恢復功能,主節點從節點的宕機都會導致部分讀寫請求失敗,需要等待機器重啟或者手動切換主機的IP才能恢復

主從複製主節點的寫能力單機,能力有限

哨兵(sentinel)

因為主從模式存在的問題,redis又提供了哨兵模式來解決主從的問題。

當主節點出現故障時,由Redis Sentinel自動完成故障發現和轉移,並通知應用方,實現高可用性。

哨兵是一個獨立的程序,作為程序,它會獨立執行。其原理是哨兵透過傳送命令,等待Redis伺服器響應,從而監控執行的多個 Redis 例項。

redis叢集-主從/哨兵

哨兵個數一般是奇數個,這個是基於選舉來的。

哨兵模式的三個定時任務:

哨兵每隔10秒傳送一次info到各個節點(主從都包括)

哨兵每個2秒發一次publish/subscribe命令到主節點

哨兵每個1秒向所有節點發送一個ping命令(所有節點也包含哨兵)

應用程式連結是哨兵節點。因為主從節點是由哨兵來決定的。

哨兵也同樣需要主從(參考zk的選舉機制)。

主觀下線&客觀下線

主觀下線,某一個哨兵發現某節點有問題,該哨兵任務這個節點下線

客觀下線,某一個哨兵節點發現某個節點錯誤,向其他的哨兵節點發出詢問。若在其他哨兵節點上發現該節點有超過半數以上的主觀下線,則該節點處於客戶下線。

哨兵模式可以做那些事

訊息通知:如果某個redis例項有故障,那麼哨兵負責傳送訊息作為報警通知給管理員

故障轉移:如果master節點掛了,可以將master轉移到slave節點上(無需人工干預)1、哨兵節點定期監控發現主節點是否出現了故障2、當主節點出現故障,此時假設3個Sentinel節點共同選舉了Sentinel3節點為領導者sentinel,負載處理主節點的故障轉移3、由Sentinel3領導者節點執行故障轉移,過程和主從複製一樣,但是自動執行

配置中心:如果故障轉移發生了,通知客戶端新的master地址

叢集監控:負責監控redismster和slave程序是否正常工作

哨兵搭建

先搭建好一主兩從redis的主從複製

redis sentinel哨兵機制配置(也是3個節點),寫好3個配置檔案

sentinel monitor mymaster 127。0。0。1 6379 2 // 監聽主節點6379 sentinel auth-pass mymaster 12345678 // 連線主節點時的密碼

啟動哨兵服務

。/redis-sentinel conf/sentinel_redis。conf &

哨兵模式也可以監聽多個主從

redis叢集-主從/哨兵

沒有封面,這邊寫的很爛。留著自己看,以後在來改這篇

Tags:節點slave哨兵masterredis