引用:
[root@redis1 etc]# redis-cli -p 7001 cluster nodes
62359b29bf2af9ca9b54db993b5f611e01fefd5c 10.140.0.10:7001@17001 myself,master - 0 1545277872000 1 connected 0-5460
fcb4f722684966bf2aec73e4d42592597e2465fb 10.140.0.12:7006@17006 slave
62359b29bf2af9ca9b54db993b5f611e01fefd5c 0 1545277873000 8 connected
97c4642a053837a033e2508c4c15bc5e2b7ebace 10.140.0.11:7002@17002 master - 0 1545277874991 2 connected 5461-10922
5ab12a20997578e2a0a05154ca49d4eebc592c30 10.140.0.10:7004@17004 slave
97c4642a053837a033e2508c4c15bc5e2b7ebace 0 1545277872985 9 connected
ec79f77817f682757aa6e04656d9a932d6b727b5 10.140.0.12:7003@17003 master - 0 1545277874000 3 connected 10923-16383
44d82d060bbbd8eaa61025f99d558aaeedd2775e 10.140.0.11:7005@17005 slave ec79f77817f682757aa6e04656d9a932d6b727b5 0 1545277873988 7 connected
redis1 找 redis3 的 7006 port 當 slave
redis2 找 redis1 的 7004 port 當 slave
redis3 找 redis2 的 7005 port 當 slave
(6)部署 Sentinel 節點
3 個 Sentinel 節點的部署方法是完全一致的(端口不同),下面以 mymaster1 節點的部署為例子進行說明。
將 sentinel.conf 複製一份到 /etc/redis/,並重命名為 redis-sentinel-27001.conf。3台重複一樣的動作跟設定
配置 Sentinel 節點:
引用:
port 27001
daemonize yes
logfile "/var/log/redis/sentinel-27001.log"
dir "/var/lib/redis"
#Original Setting
sentinel monitor mymaster1 10.140.0.88 7001 2
sentinel down-after-milliseconds mymaster1 3000
sentinel parallel-syncs mymaster1 1
sentinel failover-timeout mymaster1 10000
sentinel monitor mymaster2 10.140.0.89 7002 2
sentinel down-after-milliseconds mymaster2 3000
sentinel parallel-syncs mymaster2 1
sentinel failover-timeout mymaster2 10000
sentinel monitor mymaster3 10.140.0.90 7003 2
sentinel down-after-milliseconds mymaster3 3000
sentinel parallel-syncs mymaster3 1
sentinel failover-timeout mymaster3 10000
解讀下這些配置項:
port 27001:Sentinel 節點的默認端口是 27001。
sentinel monitor mymaster1 10.140.0.88 7001 2:代表 mymaster1 節點監控 10.140.0.88 7001 這個主節點,該主節點的別名為 mymaster1,2 代表判斷主節點失敗至少需要 2 個 Sentinel 節點同意。
sentinel down-after-milliseconds mymaster1 3000:每個Sentinel 節點都要通過定期發送ping 命令來判斷Redis 數據節點和其餘Sentinel 節點是否可達,如果超過了down-after-milliseconds 配置的時間且沒有有效的回复,則判定節點不可達,3000(單位為毫秒)就是超時時間,這個配置是對節點失敗判定的重要依據。 down-after-milliseconds 越大,代表 Sentinel 節點對於節點不可達的條件越寬鬆,反之越嚴格。
sentinel parallel-syncs mymaster1 1:用來限制在一次故障轉移之後,每次向新的主節點發起復制操作的從節點個數。如果這個參數配置的比較大,那麼多個從節點會向新的主節點同時發起復制操作,儘管複製操作通常不會阻塞主節點,但是同時向主節點發起復制,必然會對主節點所在的機器造成一定的網絡和磁盤IO 開銷。例如:parallel- syncs = 3 從節點會同時發起復制(並行),parallel-syncs = 1 時從節點會輪詢發起復制(順序),這個是有區別的。
sentinel failover-timeout mymaster1 10000:故障轉移超時時間,從節點複製新的主節點超過了 failover-timeout(不包含複製時間), 則故障轉移失敗。
啟動 Sentinel 節點,依次啟動3個 Sentinel 節點:
使用 redis-sentinel 命令:
# redis-sentinel /etc/redis/redis-sentinel-27001.conf
Sentinel 節點本質上是一個特殊的Redis 節點,所以也可以通過info 命令來查詢它的相關信息,它有兩個從節點,同時發現Redis Sentinel一共有3個Sentinel 節點。
# redis-cli -p 27001 info sentinel
引用:
# Sentinel
sentinel_masters:3
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster1,status=ok,address=10.140.0.90:7003,slaves=3,sentinels=2
master1:name=mymaster2,status=ok,address=10.140.0.89:7002,slaves=1,sentinels=1
master2:name=mymaster3,status=ok,address=10.140.0.90:7003,slaves=3,sentinels=2
這個時候在打開redis-sentinel-27001.conf 配置文件,發現Sentinel 節點會在啟動後,會給自己分配一個sentinel myid 值,同時會將他所感知到的一些節點信息保存到他指定的配置文件中去,同時將執行結果複寫至原檔案。
基本上...這樣就已經完成 redis sentinel 的部署與配置了
參考資料:
https://www.leeyom.top/2018/04/20/redis-sentinel/