標籤:redis sentinel 自動故障恢複 檢測
Redis-sentinel是Redis執行個體的監控管理、通知和執行個體失效備援服務,是Redis叢集的管理工具。在一般的分布式中心節點資料庫 中,Redis-sentinel的作用是中心節點的工作,監控各個其他節點的工作情況並且進行故障恢複,來提高叢集的高可用性。
Redis-sentinel是Redis的作者antirez在今年6月份完成的,因為Redis執行個體在各個大公司的應用,每個公司都需要一個 Redis叢集的管理工具,被迫都自己寫管理工具來管理Redis叢集,antirez考慮到社區的急迫需要,花了幾個星期寫出了Redis- sentinel。
Redis-sentinel的三大功能:監測、通知、自動故障恢複。首先Redis-sentinel要建立一個監控的master列表,然後針對master列表的每個master擷取監控其的sentinels和slaves供以後故障恢複使用。由於項目的需求,今天抽時間簡單測試下。
配置執行個體:
192.168.1.122 master
192.168.1.118 slave
192.168.1.119 slave
redis安裝目錄都在/usr/local/redis目錄下
master /usr/local/redis/redis.conf 配置
daemonize yes
兩台slave /usr/local/redis/redis.conf 配置
daemonize yes
slaveof 192.168.1.122 6379
master /usr/local/redis/sentinel.conf和兩台的slave /usr/local/redis/sentinel.conf配置:
sentinel monitor mymaster 192.168.1.122 6379 2
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
master啟動redis服務
redis-server /usr/local/redis/redis.conf
slave啟動redis服務
redis-server /usr/local/redis/redis.conf
master和slave啟動sentinel執行個體
redis-server /usr/local/redis/sentinel.conf --sentinel &
關閉master的redis服務測試容錯移轉,若redis配置了分區功能,則該方式會出現一定的BUG。
在預設情況下, Sentinel 使用 TCP 連接埠 26379 (普通 Redis 伺服器使用的是 6379 )。
Sentinel 接受 Redis 協議格式的命令請求, 所以你可以使用 redis-cli 或者任何其他 Redis 用戶端來與 Sentinel 進行通訊。
有兩種方式可以和 Sentinel 進行通訊:
· 第一種方法是通過直接發送命令來查詢被監視 Redis 伺服器的目前狀態, 以及 Sentinel 所知道的關於其他 Sentinel 的資訊, 諸如此類。
· 另一種方法是使用發布與訂閱功能, 通過接收 Sentinel 發送的通知: 當執行容錯移轉操作, 或者某個被監視的伺服器被判斷為主觀下線或者客觀下線時, Sentinel 就會發送相應的資訊。
Sentinel 命令
以下列出的是 Sentinel 接受的命令:
· PING:返回 PONG 。
· SENTINEL masters:列出所有被監視的主伺服器,以及這些主伺服器的目前狀態。
· SENTINEL slaves <master name>:列出給定主伺服器的所有從伺服器,以及這些從伺服器的目前狀態。
· SENTINEL get-master-addr-by-name <master name>: 返回給定名字的主伺服器的 IP 地址和連接埠號碼。 如果這個主伺服器正在執行容錯移轉操作, 或者針對這個主伺服器的容錯移轉操作已經完成, 那麼這個命令返回新的主伺服器的 IP 地址和連接埠號碼。
· SENTINEL reset <pattern>: 重設所有名字和給定模式 pattern 相匹配的主伺服器。 pattern 參數是一個 Glob 風格的模式。 重設操作清楚主伺服器目前的所有狀態, 包括正在執行中的容錯移轉, 並移除目前已經發現和關聯的, 主伺服器的所有從伺服器和 Sentinel 。
· SENTINEL failover <master name>: 當主伺服器失效時, 在不詢問其他 Sentinel 意見的情況下, 強制開始一次自動故障遷移 (不過發起容錯移轉的 Sentinel 會向其他 Sentinel 發送一個新的配置,其他 Sentinel 會根據這個配置進行相應的更新)。
發布與訂閱資訊
用戶端可以將 Sentinel 看作是一個只提供了訂閱功能的 Redis 伺服器: 你不可以使用 PUBLISH 命令向這個伺服器發送資訊, 但你可以用 SUBSCRIBE 命令或者 PSUBSCRIBE 命令, 通過訂閱給定的頻道來擷取相應的事件提醒。
一個頻道能夠接收和這個頻道的名字相同的事件。 比如說, 名為 +sdown 的頻道就可以接收所有執行個體進入主觀下線(SDOWN)狀態的事件。
通過執行 PSUBSCRIBE * 命令可以接收所有事件資訊。
以下列出的是用戶端可以通過訂閱來獲得的頻道和資訊的格式: 第一個英文單詞是頻道/事件的名字, 其餘的是資料的格式。
注意, 當格式中包含 instance details 字樣時, 表示頻道所返回的資訊中包含了以下用於識別目標執行個體的內容:
<instance-type> <name> <ip> <port> @ <master-name> <master-ip> <master-port>
@ 字元之後的內容用於指定主伺服器, 這些內容是可選的, 它們僅在 @ 字元之前的內容指定的執行個體不是主伺服器時使用。
· +reset-master <instance details>:主伺服器已被重設。
· +slave <instance details>:一個新的從伺服器已經被 Sentinel 識別並關聯。
· +failover-state-reconf-slaves <instance details>:容錯移轉狀態切換到了 reconf-slaves 狀態。
· +failover-detected <instance details>:另一個 Sentinel 開始了一次容錯移轉操作,或者一個從伺服器轉換成了主伺服器。
· +slave-reconf-sent <instance details>:領頭(leader)的 Sentinel 向執行個體發送了 SLAVEOF 命令,為執行個體設定新的主伺服器。
· +slave-reconf-inprog <instance details>:執行個體正在將自己設定為指定主伺服器的從伺服器,但相應的同步過程仍未完成。
· +slave-reconf-done <instance details>:從伺服器已經成功完成對新主伺服器的同步。
· -dup-sentinel <instance details>:對給定主伺服器進行監視的一個或多個 Sentinel 已經因為重複出現而被移除 —— 當 Sentinel 執行個體重啟的時候,就會出現這種情況。
· +sentinel <instance details>:一個監視給定主伺服器的新 Sentinel 已經被識別並添加。
· +sdown <instance details>:給定的執行個體現在處於主觀下線狀態。
· -sdown <instance details>:給定的執行個體已經不再處於主觀下線狀態。
· +odown <instance details>:給定的執行個體現在處於客觀下線狀態。
· -odown <instance details>:給定的執行個體已經不再處於客觀下線狀態。
· +new-epoch <instance details>:當前的紀元(epoch)已經被更新。
· +try-failover <instance details>:一個新的故障遷移操作正在執行中,等待被大多數 Sentinel 選中(waiting to be elected by the majority)。
· +elected-leader <instance details>:贏得指定紀元的選舉,可以進行故障遷移操作了。
· +failover-state-select-slave <instance details>:容錯移轉操作現在處於 select-slave 狀態 —— Sentinel 正在尋找可以升級為主伺服器的從伺服器。
· no-good-slave <instance details>:Sentinel 操作未能找到適合進行升級的從伺服器。Sentinel 會在一段時間之後再次嘗試尋找合適的從伺服器來進行升級,又或者直接放棄執行容錯移轉操作。
· selected-slave <instance details>:Sentinel 順利找到適合進行升級的從伺服器。
· failover-state-send-slaveof-noone <instance details>:Sentinel 正在將指定的從伺服器升級為主伺服器,等待升級功能完成。
· failover-end-for-timeout <instance details>:容錯移轉因為逾時而中止,不過最終所有從伺服器都會開始複製新的主伺服器(slaves will eventually be configured to replicate with the new master anyway)。
· failover-end <instance details>:容錯移轉操作順利完成。所有從伺服器都開始複製新的主伺服器了。
· +switch-master <master name> <oldip> <oldport> <newip> <newport>:配置變更,主伺服器的 IP 和地址已經改變。 這是絕大多數外部使用者都關心的資訊。
· +tilt:進入 tilt 模式。
-tilt:退出 tilt 模式。
本文出自 “diannaowa” 部落格,請務必保留此出處http://diannaowa.blog.51cto.com/3219919/1557617
redis-sentinel搭建redis主從容錯移轉