配置redis主從加哨兵
Sentinel 程式可以在編譯後的 src 文檔中發現, 它是一個命名為 redis-sentinel 的程式。
Redis 源碼中包含了一個名為 sentinel.conf 的檔案, 這個檔案是一個帶有詳細注釋的 Sentinel 配置檔案示例。
運作一個 Sentinel 所需的最少配置如下所示:
// 監控一個 Redis 伺服器
// 名稱為 mymaster ,IP 為 127.0.0.1 端口為 6380
// 最後的 2 是指最少有 2 給 Sentinel 執行個體同意一台 redis 伺服器當機,才會認為 客觀下線。
// sentinel monitor 自定義的主節點名稱 主節點的 IP 主節點端口 票數
sentinel monitor mymaster 127.0.0.1 6380 2
sentinel down-after-milliseconds mymaster 3000
// 180 秒後開始故障自動裝換
sentinel failover-timeout mymaster 5000
sentinel parallel-syncs mymaster 1
down-after-milliseconds 選項指定了 Sentinel 認為伺服器已經斷線所需的毫秒數。
如果伺服器在給定的毫秒數之内, 沒有傳回 Sentinel 發送的 PING 指令的回複, 或者傳回一個錯誤, 那麼 Sentinel 将這個伺服器标記為主觀下線(subjectively down,簡稱 SDOWN )。
不過隻有一個 Sentinel 将伺服器标記為主觀下線并不一定會引起伺服器的自動故障遷移: 隻有在足夠數量的 Sentinel 都将一個伺服器标記為主觀下線之後, 伺服器才會被标記為客觀下線(objectively down, 簡稱 ODOWN ), 這時自動故障遷移才會執行。
客觀下線就是有2台哨兵覺得你當機了你就是當機 如果隻有一台隻是他的主觀下線 是以上面的參數設定為2
parallel-syncs 選項指定了在執行故障轉移時, 最多可以有多少個從伺服器同時對新的主伺服器進行同步, 這個數字越小, 完成故障轉移所需的時間就越長。
這個參數意思就是故障轉移時可以有幾個從伺服器對新的主伺服器同步資料 是以數字小 完成時間越長
過濾原檔案到sentinel-27000.conf
grep -Ev ‘#|KaTeX parse error: Expected group after '^' at position 60: …conf grep -Ev '^̲#|^’ sentinel.conf > /etc/redis/sentinel-27001.conf
grep -Ev ‘#|$’ sentinel.conf > /etc/redis/sentinel-27002.conf
修改監聽端口
sed -i ‘s/26379/27000/g’ /etc/redis/sentinel-27000.conf
sed -i ‘s/26379/27001/g’ /etc/redis/sentinel-27001.conf
sed -i ‘s/26379/27002/g’ /etc/redis/sentinel-27002.conf
修改 dir 指定的目錄
最終的配置檔案 配置檔案最好指定具體ip位址 不是 127.0.0.1不然有可能會故障轉移不過去 當然這是一台多執行個體的 多台不存在這種情況
sentinel-27000.conf
daemonize yes
port 27000
dir /redis/data/
logfile /var/log/sentinel-27000.log
sentinel monitor mymaster 127.0.0.1 6380 2
sentinel down-after-milliseconds mymaster 3000
sentinel failover-timeout mymaster 5000
sentinel parallel-syncs mymaster 1
啟動服務的文法:
redis-sentinel sentinel的配置檔案 我的是/etc/redis/sentinel-27000.conf
3個哨兵依次啟動
啟動哨兵後哨兵的配置檔案會添加内容 不要動它
可以使用以下指令檢視哨兵的資訊
[[email protected] ~]# redis-cli -p 27001 info
…略…
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=127.0.0.1:6380,slaves=2,sentinels=3
故障演練
停止 Master 節點的服務
redis-cli -p 6380 shutdown
不斷的重新整理其中一個 Sentinel 節點的資訊,觀察最後一行資訊的變化
redis-cli -p 27001 info
…略…
master0:name=mymaster,status=ok,address=127.0.0.1:6382,slaves=2,sentinels=3
端口就會轉移到6382上 如果想轉移回來就停止哨兵和redis程序
重新啟動redis主從和3個哨兵就好了