先寫總結
1.sentinel 的配置文件要配置master的密碼:sentinel auth-pass mymaster phFUND_linux_redis。
2.爲了主從能自由切換請給主從都配置好密碼,而且要設置相同的密碼(完成切換後,因爲從沒有配置masterauth,導致重啓後連接不上主):
masterauth "phFUND_linux_redis"
requirepass "phFUND_linux_redis"
3.強烈建議各位在部署時,使用該版本redis自帶的配置文件進行配置,且一定要保證配置項的順序和原版保持一致。針對自己的需要修改配置項。如果不一致,可能會報錯。
4.會看sentinel的日誌。:
+try-failover master mymaster 172.**.**.117 6379(開始嘗試進行failover)
+vote-for-leader e2a313dd66f8e8df829628d4580d77f840ebb068 4(sentinel配置文件中的myid,確認leader sentinel)
+elected-leader master mymaster 172.**.**.117 6379(已存在的master節點)
+failover-state-select-slave master mymaster 172.**.**.117 6379(分析master的slave狀態)
+selected-slave slave 172.**.**.117:7379 172.**.**.117 7379 @ mymaster 172.**.**.117 6379(已選出一個原master的slave)
+failover-state-send-slaveof-noone slave 172.**.**.117:7379 172.**.**.117 7379 @ mymaster 172.**.**.117 6379(將新的slave進行主從切換)
+failover-state-wait-promotion slave 172.**.**.117:7379 172.**.**.117 7379 @ mymaster 172.**.**.117 6379(等待slave升級中)
+promoted-slave slave 172.**.**.117:7379 172.**.**.117 7379 @ mymaster 172.**.**.117 6379(升級完成)
+failover-state-reconf-slaves master mymaster 172.**.**.117 6379(重寫原master的配置文件)
+slave-reconf-sent slave 172.**.**.117:7381 172.**.**.117 7381 @ mymaster 172.**.**.117 6379(重寫所有slave的配置文件)
+slave-reconf-inprog slave 172.**.**.117:7381 172.**.**.117 7381 @ mymaster 172.**.**.117 6379(重寫所有slave的配置文件)
+slave-reconf-done slave 172.**.**.117:7381 172.**.**.117 7381 @ mymaster 172.**.**.117 6379(重寫所有slave的配置文件)
+slave-reconf-sent slave 172.**.**.117:7380 172.**.**.117 7380 @ mymaster 172.**.**.117 6379(重寫所有slave的配置文件)
+slave-reconf-inprog slave 172.**.**.117:7380 172.**.**.117 7380 @ mymaster 172.**.**.117 6379(重寫所有slave的配置文件)
+slave-reconf-done slave 172.**.**.117:7380 172.**.**.117 7380 @ mymaster 172.**.**.117 6379(重寫所有slave的配置文件)
+failover-end master mymaster 172.**.**.117 6379(failover結束)
+switch-master mymaster 172.**.**.117 6379 172.**.**.117 7379(slave節點已經升級爲master)
+slave slave 172.**.**.117:7381 172.**.**.117 7381 @ mymaster 172.**.**.117 7379(爲新的master節點確認slave節點)
+slave slave 172.**.**.117:7380 172.**.**.117 7380 @ mymaster 172.**.**.117 7379(爲新的master節點確認slave節點)
+slave slave 172.**.**.117:6379 172.**.**.117 6379 @ mymaster 172.**.**.117 7379(爲新的master節點確認slave節點)
+sdown slave 172.**.**.117:6379 172.**.**.117 6379 @ mymaster 172.**.**.117 7379(原master節點變爲slave,且主觀下線)
-sdown slave 172.**.**.117:6379 172.**.**.117 6379 @ mymaster 172.**.**.117 7379(重啓了,恢復狀態)
+convert-to-slave slave 172.**.**.117:6379 172.**.**.117 6379 @ mymaster 172.**.**.117 7379(已轉換爲新master 的slave)
5.sentienl常用命令:1)進入sentinel : redis-cli -h <IP> -p <port> 。2)查看集羣所有master的狀態:sentinel masters 。 3)查看某個master的所有slave:sentinel slaves <mastername>
6.sentinel的配置:
port 26379
protected-mode no(允許所有地址的訪問,如果是yes則只允許本機,默認是yes。文檔顯示設置了bind和密碼的話該設置不會生效)
logfile "/home/session/redis/logs/redis_26379.log"(日誌地址,如果配置了該地址,則不會打印堆棧。)
sentinel myid e2a313dd66f8e8df829628d4580d77f840ebb068(sentinel的唯一ID)
sentinel monitor mymaster 172.18.50.117 7379 1
sentinel down-after-milliseconds mymaster 30000(多少毫秒判定master宕機) sentinel parallel-syncs mymaster 1(同步時允許最多幾臺slave同步master,數字越小同步時間越久,在同步的過程中不能提供服務,所以配置大了也不好,依情況而定)
daemonize yes(守護線程模式)
dir "/tmp"
# Generated by CONFIG REWRITE
maxclients 4064(自動生成,也可以自己配置)
sentinel failover-timeout mymaster 150000(多少毫米未切換完成則判定失敗)
sentinel auth-pass mymaster phFUND_linux_redis(密碼要配置)
sentinel config-epoch mymaster 4(自動生成)
sentinel leader-epoch mymaster 4(自動生成)
sentinel known-slave mymaster 172.18.50.117 6379(自動生成)
sentinel known-slave mymaster 172.18.50.117 7381(自動生成)
sentinel known-slave mymaster 172.18.50.117 7380(自動生成)
sentinel current-epoch 4(自動生成)
項目和環境介紹
因爲公司的測試環境的Redis老是掛,導致系統啓動報錯。一直沒人管,所幸我自己看看。
問題:一臺master掛掉,無法進行故障轉移,不能選舉從。
先上個測試環境的架構圖:
分片規則是在應用層實現的,比較簡單,直接用hash值對接連數取模計算節點,沒有用一致性hash,擴展性很差。
而且,一個哨兵監控了兩個master,實在不明白如果請求sentinel它到底會把請求發給哪個master。
即便可以,也不建議這樣配置,一個哨兵掛了,會導致兩個主從集羣的監控都出問題。
建議用這個作者的設置:https://blog.csdn.net/men_wen/article/details/72724406。
因爲測試環境只有兩臺服務器,一般哨兵不太可能會掛,所以我改成了如下: