IP:192.168.225.12八、192.168.225.129
環境:centos7
版本:redis-3.2.10html
Redis 的 Sentinel 系統用於管理多個 Redis 服務器(instance), 該系統執行如下三個任務:
監控(Monitoring): Sentinel 會不斷地檢查你的主服務器和從服務器是否運做正常。
提醒(Notification): 當被監控的某個 Redis 服務器出現問題時, Sentinel 能夠經過 API 向管理員或者其餘應用程序發送通知。
自動故障遷移(Automatic failover): 當一個主服務器不能正常工做時, Sentinel 會開始一次自動故障遷移操做, 它會將失效主服務器的其中一個從服務器升級爲新的主服務器, 並讓失效主服務器的其餘從服務器改成複製新的主服務器; 當客戶端試圖鏈接失效的主服務器時, 集羣也會向客戶端返回新主服務器的地址, 使得集羣可使用新主服務器代替失效服務器。redis
Redis Sentinel 是一個分佈式系統, 你能夠在一個架構中運行多個 Sentinel 進程(progress), 這些進程使用流言協議(gossip protocols)來接收關於主服務器是否下線的信息, 並使用投票協議(agreement protocols)來決定是否執行自動故障遷移, 以及選擇哪一個從服務器做爲新的主服務器。
雖然 Redis Sentinel 釋出爲一個單獨的可執行文件 redis-sentinel , 但實際上它只是一個運行在特殊模式下的 Redis 服務器, 你能夠在啓動一個普通 Redis 服務器時經過給定 –sentinel 選項來啓動 Redis Sentinel 。vim
詳細配置見文章redis主從配置
128/129上面安裝路徑:/usr/local/redis
數據路徑:/data/redis637九、/data/redis6380centos
配置環境:api
Master:192.168.225.128:6379 Slave1:192.168.225.129:6380 Slave2:192.168.225.129:6381
確認redis節點是否啓動服務器
[root@vm-test1 redis]# redis-cli -h 192.168.225.128 -p 6379 ping PONG
主redis的info replication信息架構
# Replication role:master connected_slaves:2 slave0:ip=192.168.225.129,port=6380,state=online,offset=44477,lag=1 slave1:ip=192.168.225.129,port=6381,state=online,offset=44477,lag=1 master_repl_offset:44477 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:2 repl_backlog_histlen:44476
# cd /usr/local/redis # cp sentinel.conf sentinel-1.conf # vim sentinel-1.conf 修改成 sentinel monitor mymaster 192.168.225.128 6379 2
說明:mymaster不須要是主機名,可本身定義,只須要先後保持一致
Sentinel-1節點須要監控192.168.225.128:6379這個主節點,2表明判斷主節點失敗至少須要2個sentinel節點贊成,mymaster是主節點別名。
2這個值定義爲幾的標準:通常建議將其設置爲sentinel節點的一半加1運維
方法1: # cd /usr/local/redis/ # bin/redis-server sentinel-1.conf --sentinel 方法2: # cd /usr/local/redis/ # bin/redis-sentinel sentinel-1.conf
兩種方式原則上同樣分佈式
[root@bogon redis]# bin/redis-sentinel sentinel-1.conf & [1] 7187 _._ _.-``__ ''-._ _.-`` `. `_. ''-._ Redis 3.2.10 (00000000/0) 64 bit .-`` .-```. ```\/ _.,_ ''-._ ( ' , .-` | `, ) Running in sentinel mode |`-._`-...-` __...-.``-._|'` _.-'| Port: 26379 | `-._ `._ / _.-' | PID: 7187 `-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | http://redis.io `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-' 7187:X 28 Aug 12:21:29.456 # Sentinel ID is 589d622f9a149e71a49d04431988bc1d726fc87a 7187:X 28 Aug 12:21:29.456 # +monitor master mymaster 192.168.225.128 6379 quorum 2 7187:X 28 Aug 12:21:29.457 * +slave slave 192.168.225.129:6380 192.168.225.129 6380 @ mymaster 192.168.225.128 6379 7187:X 28 Aug 12:21:29.461 * +slave slave 192.168.225.129:6381 192.168.225.129 6381 @ mymaster 192.168.225.128 6379 [root@bogon redis]# ps -ef |grep sentinel root 7187 3100 0 12:21 pts/0 00:00:00 bin/redis-sentinel *:26379 [sentinel] root 7222 3100 0 12:21 pts/0 00:00:00 grep --color sentinel
啓動一個sentinel後(啓動3個sentinel後sentinels=3)測試
[root@vm-test1 redis]# redis-cli -p 26379 info sentinel # Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=mymaster,status=ok,address=192.168.225.128:6379,slaves=2,sentinels=1
3個sentinel啓動後,查看sentinel-1.conf,發生了變化,體如今:
1.sentinel節點自動發現了從節點、其他sentinel節點
2.去掉了默認配置,例如:parallel-syncs、failover-timeout參數
3.添加了配置紀元相關參數
port 26379 dir "/data/sentinel-1" sentinel myid 79d2238ec1b78bbc87c63c831628bd075b874c06 sentinel monitor mymaster 192.168.225.128 6379 2 sentinel config-epoch mymaster 0 sentinel leader-epoch mymaster 0 #發現2個slave節點 sentinel known-slave mymaster 192.168.225.129 6380 sentinel known-slave mymaster 192.168.225.129 6381 # 發現2個sentinel節點 sentinel known-sentinel mymaster 192.168.225.128 26381 92e43ffca6742b68f8937b8ae69abdfd3390b56d sentinel known-sentinel mymaster 192.168.225.128 26380 4c9cf1849b1bd7c6d4f5a5b30f986dbac2cc3f99 sentinel current-epoch 0
1.將主reids 129:6379關閉(主129:6379,從128:6380)
2.查看sentinel日誌以下:
<instance-type> <name> <ip> <port> @ <master-name> <master-ip> <master-port> +reset-master :主服務器已被重置。 +slave :一個新的從服務器已經被 Sentinel 識別並關聯。 +failover-state-reconf-slaves :故障轉移狀態切換到了 reconf-slaves 狀態。 +failover-detected :另外一個 Sentinel 開始了一次故障轉移操做,或者一個從服務器轉換成了主服務器。 +slave-reconf-sent :領頭(leader)的 Sentinel 向實例發送了 [SLAVEOF](/commands/slaveof.html) 命令,爲實例設置新的主服務器。 +slave-reconf-inprog :實例正在將本身設置爲指定主服務器的從服務器,但相應的同步過程仍未完成。 +slave-reconf-done :從服務器已經成功完成對新主服務器的同步。 -dup-sentinel :對給定主服務器進行監視的一個或多個 Sentinel 已經由於重複出現而被移除 —— 當 Sentinel 實例重啓的時候,就會出現這種狀況。 +sentinel :一個監視給定主服務器的新 Sentinel 已經被識別並添加。 +sdown :給定的實例如今處於主觀下線狀態。 -sdown :給定的實例已經再也不處於主觀下線狀態。 +odown :給定的實例如今處於客觀下線狀態。 -odown :給定的實例已經再也不處於客觀下線狀態。 +new-epoch :當前的紀元(epoch)已經被更新。 +try-failover :一個新的故障遷移操做正在執行中,等待被大多數 Sentinel 選中(waiting to be elected by the majority)。 +elected-leader :贏得指定紀元的選舉,能夠進行故障遷移操做了。 +failover-state-select-slave :故障轉移操做如今處於 select-slave 狀態 —— Sentinel 正在尋找能夠升級爲主服務器的從服務器。 no-good-slave :Sentinel 操做未能找到適合進行升級的從服務器。Sentinel 會在一段時間以後再次嘗試尋找合適的從服務器來進行升級,又或者直接放棄執行故障轉移操做。 selected-slave :Sentinel 順利找到適合進行升級的從服務器。 failover-state-send-slaveof-noone :Sentinel 正在將指定的從服務器升級爲主服務器,等待升級功能完成。 failover-end-for-timeout :故障轉移由於超時而停止,不過最終全部從服務器都會開始複製新的主服務器(slaves will eventually be configured to replicate with the new master anyway)。 failover-end :故障轉移操做順利完成。全部從服務器都開始複製新的主服務器了。 +switch-master :配置變動,主服務器的 IP 和地址已經改變。 這是絕大多數外部用戶都關心的信息。 +tilt :進入 tilt 模式。 -tilt :退出 tilt 模式。
port 26379 dir "/data/sentinel-1" sentinel monitor mymaster 192.168.225.128 6379 2 sentinel down-after-milliseconds mymaster 30000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 180000 # sentinel auth-pass <master-name> <password> # sentinel notification-script <master-name> <script-path> # sentinel client-reconfig-script <master-name> <script-path>
Port和dir分別表明sentinel節點的端口和工做目錄
Sentinel monitor <master-name> <ip><port> <quorum>
sentinel節點會按期監控主節點,
<master-name> sentinel要監控的主節點的名稱
IP地址和端口爲<ip><port>的主節點
<quorum>表明要斷定主節點最終不可達所須要的票數
每一個sentinel節點都要經過按期發送ping命令來判斷redis數據節點和其他sentinel節點是否可達,若是超過了該時間,則斷定節點不可達。單位:毫秒
Sentinel領導者節點作故障轉移操做,選出新的主節點,原來的從節點會向新的主節點發起復制操做,parallel-syncs就是用來限制在一次故障轉移以後,每次向新的主節點發起復制操做的從節點的個數。
parallel-syncs=3 3個從節點同時發起複製
parallel-syncs=1 一次只有一個從節點複製,從節點會輪詢發起複製
故障轉移超時時間,做用於各個階段。
A) 選出合適從節點
B) 晉升選出的從節點爲主節點
C) 命令其他從節點複製新的主節點
D) 等待原主節點恢復後命令它去複製新的主節點
若是sentinel監控的主節點設置了密碼,sentinel經過以上命令添加主節點的密碼
Sentinel節點是一個特殊的redis,有本身專屬的api
進入api客戶端
展現全部被監控的主節點狀態以及相關統計信息
127.0.0.1:26379> sentinel masters
展現指定<master name>的主節點的狀態以及相關統計信息
展現指定<master name>的從節點的狀態以及相關統計信息
展現指定<master name>的sentinel節點集合(不包含當前sentinel節點)
返回指定<master name>主節點的ip和端口
127.0.0.1:26379> sentinel get-master-addr-by-name mymaster
1) "192.168.225.128"
2) "6379"
當前sentinel對符合pattern(通配符風格)主節點進行重置,包含清除主節點的相關狀態(例如故障轉移),從新發現重節點和sentinel節點
eg:sentinel reset mymaster # sentinel-1節點對mymaster節點重置狀態
對指定<master name>主節點進行強制故障轉移(沒有和其餘sentinel節點協商)故障轉移完成後,其餘的sentinel節點按照故障轉移的結果更新自身配置(該命令在平常運維中很是有用)
檢測當前可達的sentinel節點總數是否達到quorum的個數
取消當前sentinel節點對於指定master name主節點的監控
如:sentinel monitor mymaster-1 192.168.225.128 6379 2
和配置文件中該行命令的做用相同
可動態調整一些參數
quorum down-after-nilliseconds failover-timeout parallel-syncs notification-script client-reconfig-script auth-pass
Sentinel節點之間用來交換對主節點是否下線的判斷