Redis高可用之哨兵(sentinel)在客戶端一側的實現

2020-08-29 小兵挖DB

redis哨兵是對主從複製技術的補充,負責監控redis主從複製並在主節點宕機後執行自動故障轉移,同時更新故障轉移後新的配置,並提供客戶端最新的主節點和從節點信息.客戶端也被明確要求支持redis哨兵功能

redis客戶端通過哨兵發現redis服務

redis哨兵通過一個別名來唯一標註一個主從複製架構中的主節點信息,該主從架構可以有數個從節點.

一個支持redis哨兵功能的客戶端可以自動發現故障轉移後的新的主節點信息,因為redis客戶端連接的是哨兵節點的額地址,而不是傳統意義的主節點的ip地址.一個支持redis哨兵功能的客戶端需同時支持以下兩個哨兵的配置.

  • 可以通過ip:port方式列出已知的部分或者所有哨兵節點
  • 支持哨兵中為一個主從複製框架命名的別名

下面是一個支持redis哨兵的客戶端通過哨兵獲得主節點地址的步驟.

  1. 連接哨兵列表中第一個哨兵

剛才提到,客戶端可以配置多個哨兵地址,一個新連接被觸發後,客戶端從列表中第一個哨兵地址開始遍歷,如果在指定的超時時間內(通常為數百毫秒)第一個哨兵地址不可達,那麼就嘗試下一個哨兵地址,以此類推,直到返回成功為止.

  1. 請求主節點地址

一旦客戶端連接到哨兵節點後,客戶端嘗試在哨兵節點執行以下命令

SENTINEL get-master-addr-by-name master-name

該結果會返回指定別名下主從複製架構中主節點的ip:port信息,如果返回null,說明指定的別名不存在.

redis客戶端獲得主節點的地址後,就可以使用該地址進行讀寫操作了.

  1. 在主節點執行role命令

一旦客戶端連接上主節點,客戶端會嘗試執行role命令來驗證當前節點是否真的是主節點,如果不是,客戶端等待一段時間(幾百毫秒)後會重新執行第一步.

哨兵處理客戶端的重新連接

一旦客戶端獲取主節點後連接就會建立,每一次重新連接時,客戶端都需要重新從上述步驟1的哨兵開始重新建立連接,例如在下列情況客戶端和哨兵都會重新建立連接.

  • 客戶端連接超時或者socket錯誤.
  • 客戶端主動關閉該連接並重新連接.

哨兵執行故障轉移時的連接斷開情況

從redis2.8開始,當redis哨兵在執行故障轉移,將一個從節點升級為主節點,或者故障轉移後將原來的主節點配置為新的主節點的從節點,或者更改從節點連接的過期的主節點的地址時,哨兵會在操作的節點上執行CLIENT KILL type normal來確保所有連接的客戶端被斷開,這會強制讓客戶端重新連接到主節點.

如果故障轉移後哨兵節點還沒有來得及更新新的主節點信息,恰好有客戶端連接進來,那麼客戶端再執行role命令後獲得當前節點覺得並不是master,redis客戶端將會重新連接哨兵並再次嘗試.

還有一種情況,一個客戶端連接到了一個過期的哨兵節點並返回剛剛重新上線的過期主節點客戶端通過role命令可以正常返回master值,然而當該過期主節點重新上線時哨兵節點會將過期主節點降級為從節點,並斷開所有針對該節點的所有連接.

客戶端使用連接池

對於客戶端使用連接池的情況,當哨兵執行故障轉移後,連接池的所有連接都會斷掉,並且需要從哨兵重新獲得新的連接.

客戶端的哨兵地址列表自動刷新功能

一旦客戶端連接哨兵並返回get-master-addr-by-name成功後,客戶端就會根據下列處理過程更新自己內部的哨兵列表.

  • 通過SENTINEL sentinels <master-name>命令獲得其他哨兵節點的地址.
  • 客戶端向哨兵地址列表末尾添加不存在的哨兵地址信息.

相關焦點

  • Redis高可用之哨兵(sentinel)客戶端(Python)連接
    在前文介紹redis主從複製的時候,我們是通過Python的redis模塊來連接到redis的主節點,從而實現數據的查詢與寫入操作.()))在引入哨兵功能後,我們需要使用redis模塊的子模塊sentinel,例如我們查看當前主節點和從節點信息from redis import sentinelsentinel_connection = sentinel.Sentinel([(&39;, 26379), (&39;, 26379), (&39;, 26379)], db
  • Redis高可用之哨兵(sentinel)技術原理
    哨兵的基礎概念Redis哨兵(sentinel)為redis提供高可用解決方案,在傳統的主從複製模式中,當主節點宕機後,我們需要手動將從節點切換成主節點,並且客戶端也需要同步修改配置文件中的主節點信息,當哨兵模式啟用後,主從節點的切換是自動化的,客戶端由原來的連接主節點到現在的客戶端連接哨兵節點,主從切換時客戶端幾乎不會感知
  • Redis哨兵模式搭建及高可用測試
    網上資源參差不齊,通過官方文檔及一些資料參考,整理出來哨兵模式部署方式步驟,包括redis服務、哨兵服務配置文件參數修改、服務啟動、主從關係驗證、高可用測試,實驗機器部署 ip 為 172.168.1.43、172.168.1.46、172.168.1.47,其中 172.168.1.47 為master節點,需提前創建 /home/test/apps/redis/data 目錄。
  • Redis高可用之哨兵(sentinel)實際部署和分析篇
    我們以一主兩從的複製方式結合案例學習一下哨兵的部署,相關環境如下redis+sentinel-03> info replication34;slave&34;192.168.100.2&34;connected&34;/var/run/redis-sentinel.pid&34;/usr/local/redis/log/sentinel.log&34;/usr/local/redis/data& cat /usr/lib/systemd/system
  • Redis哨兵機制Sentinel在windows下的部署
    2.啟動各自的客戶端:mastet:redis-cli -h 127.0.0.1 -p 6379slave1:redis-cli -h 127.0.0.1 -p 6380slave2:redis-cli -h 127.0.0.1 -p 6381如下圖所示:
  • Redis哨兵(Sentinel)模式
    切換成功後,就會通過發布訂閱模式,讓各個哨兵把自己監控的從伺服器實現切換主機,這個過程稱為客觀下線。這樣對於客戶端而言,一切都是透明的。二、Redis配置哨兵模式配置3個哨兵和1主2從的Redis伺服器來演示這個過程。
  • Redis系列:高可用哨兵方案部署
    Redis提供的sentinel(哨兵)機制,通過sentinel模式啟動redis後,自動監控master/slave的運行狀態,基本原理是:心跳機制+投票裁決, 集群也會向客戶端返回新主伺服器的地址, 使得集群可以使用新主伺服器代替失效伺服器。
  • Redis哨兵(Sentinel)模式,帶你快速入門
    自動故障轉移(Automatic Failover):當主節點不能正常工作時,哨兵會開始自動故障轉移操作,它會將失效主節點的其中一個從節點升級為新的主節點,並讓其他從節點改為複製新的主節點。配置提供者(Configuration Provider):客戶端在初始化時,通過連接哨兵來獲得當前Redis服務的主節點地址。
  • 一文帶你了解Redis哨兵模式和高可用集群解析
    1.redis cluster集群是什麼?redis cluster集群是一個由多個主從節點群組成的分布式伺服器群,它具有複製、高可用和分片特 性。Rediscluster集群不需要sentinel哨兵也能完成節點移除和故障轉移的功能。
  • Redis高可用sentinel 來龍去脈
    redis sentinel 是從redis 2.8開始提供的一個redis 高可用的功能,此篇的前置原理為,需要能安裝REDIS 伺服器,並且配置主從關係, Redis 有兩種高可用, redis cluster 和 redis sentinel , 今天主要說 sentinel。
  • Redis哨兵模式,面試你被問了嗎
    前言最近面試被問到了,哨兵模式,一聽名詞感覺很陌生,搜索下記憶,還好了解過Redis集群的知識,沒被難倒。哨兵模式是實現Redis集群的一種方案。Redis的集群方案大致有三種:redis cluster集群方案;master/slave主從方案;哨兵模式來進行主從替換以及故障恢復。
  • Sentinel(哨兵)是Redis 的高可用性解決方案
    1、Sentinel 哨兵Sentinel(哨兵)是Redis 的高可用性解決方案:由一個或多個Sentinel 實例組成的Sentinel 系統可以監視任意多個主伺服器,以及這些主伺服器屬下的所有從伺服器,並在被監視的主伺服器進入下線狀態時,自動將下線主伺服器屬下的某個從伺服器升級為新的主伺服器。
  • 你真的懂Redis哨兵技術嗎?
    複製:複製是高可用Redis的基礎,哨兵和集群都是在複製基礎上實現高可用的。複製主要實現了數據的多機備份,以及對於讀操作的負載均衡和簡單的故障恢復。缺陷是故障恢復無法自動化;寫操作無法負載均衡;存儲能力受到單機的限制。
  • 為什麼需要 Redis 哨兵?
    作者 | 阿文責編 | 郭芮在說哨兵之前,我們先說下主從複製,Redis 的主從複製模式,一旦主節點出現故障無法提供服務,需要人工介入手工將從節點調整為主節點,同時應用端還需要修改新的主節點地址,這種故障轉移的方式對於很多應用場景是不能容忍的。正式由於這個問題,Redis 提供了 Sentinel(哨兵) 架構來解決這個問題。
  • redis sentinel 學習
    主從複製問題手動故障轉移 要手動選出一個新的master(不合理),寫一個自動的腳本又非常複雜寫能力和存儲能力受限redis sentinel架構redis sentinel故障轉移多個sentinel發現並確認master有問題選舉出一個sentinel
  • Redis哨兵(Sentinel)模式如何做到高可用的?
    ——柏拉圖引導語Sentinel(哨兵)是Redis的高可用性解決方案:由一個或多個Sentinel實例組成的Sentinel系統可以監視任意多個主伺服器,以及這些主伺服器屬下的所有從伺服器,並在被監視的主伺服器進入下線狀態時,自動將下線主伺服器屬下的某個從伺服器升級為新的主伺服器,然後由新的主伺服器代替已下線的主伺服器繼續處理命令請求。
  • Redis哨兵
    但是通常情況下,我們很難人為的做到在服務宕機時立刻切換主節點,哨兵就是用來替代人為操作的,它作為一個單獨的服務存在,對所有的主從節點進行監控,在主節點發生故障時,立刻在其他的從幾點中,重新選舉出一個節點作為主節點,來保證服務的可用。
  • Spring Boot 如何快速集成 Redis 哨兵?
    Redis Sentinel 介紹Redis Sentinel:哨兵,放哨,看中文名字就知道它是一種 Redis 高可用解決方案,主要是針對 Redis 主從模式實現主從節點監控、故障自動切換。有了 Redis Sentinel,主從節點故障都是自動化切換,應用程式參數什麼也不用改,對於客戶端來說都是透明無縫切換的,運維人員再也不用擔驚受怕了。
  • ...當將軍的「Sentinel」不是好「Sentinel」」之Redis Sentinel架構
    Sentinel (哨兵)是 Redis的高可用性解決方案:由一個或多個 Sentinel實例組成的 Sentinel系統可以監控任意數量的主伺服器和所有這些主伺服器屬下的從伺服器,當被監控的主伺服器進入下線狀態時,會自動將下線主伺服器屬下的一個從伺服器升級到新的主伺服器。
  • 一文把Redis主從複製、哨兵、Cluster三種模式摸透
    /redis-server sentinel1.conf --sentinel./redis-server sentinel2.conf --sentinel./redis-server sentinel3.conf --sentinel然後通過:ps -aux|grep redis進行查看: