本來不想寫的,但前兩天因工作需要新部署一套3Redis + 3Sentinel的架構的時候,發現步驟好多細節全忘了,又重頭查官站搞了一遍……還是寫下來吧,權當備忘。
安裝Redis Master節點
下載源碼包
編譯安裝
make PREFIX={destpath} install
進入{destpath},創建相關目錄
mkdir logs conf rdb
redis.conf
從源碼包中把redis.conf拷貝到{destpath}下
編輯redis.conf,主要關注幾個地方:
bind {ip} #不要bind 127.0.0.1
port {port}
protected-mode yes #不要關閉protected-mode
daemonize yes #后臺運行
logfile "{destpath}/logs/redis.log"
requirepass "{password}"
dir "{destpath}/rdb" #dump.rdb輸出位置
修改操作系統參數
編輯/etc/sysctl.conf
vm.overcommit_memory = 1
net.core.somaxconn = 1024
立即生效:
sysctl -p
啟動
bin/redis-server ./redis.conf
驗證
略
安裝配置兩個Slave節點
步驟同上,唯一區別是在redis.conf中增加兩行:
slaveof <masterip> <masterport>
masterauth "{password}"
驗證主從同步
在master節點寫數據,從slave節點讀取,具體略
配置三個Sentinel節點
sentinel.conf
在{destpath}下編輯sentinel.conf
daemonize yes
loglevel notice
logfile "{destpath}/logs/sentinel.log"
bind {ip}
port {port}
dir "/tmp"
sentinel monitor {name} {masterip} {masterport} 2 #name為主從集群標識名,可隨便定義
sentinel down-after-milliseconds {name} 8000 #master失聯多久后啟動選舉
sentinel auth-pass {name} {password} #{password}為在redis.conf中配置的
啟動
bin/redis-sentinel ./sentinel.conf
驗證
三個sentinel節點均啟動后,使用redis-cli登入任意一個sentinel節點,執行:
SENTINEL master {name}
會輸出當前master的信息,應為當前主節點的ip和port
SENTINEL slaves {name}
輸出slave的信息,應輸出除master外另兩個Redis實例的ip和port
上述兩個命令輸出的flags字段應該為"master"和"slave",如果出現"sdown"、"odown"等信息,則說明配置有誤
failover測試
連接master節點,執行命令:
DEBUG sleep 10
此命令會讓master節點停止工作10秒鐘,如果配置的down-after-milliseconds在10秒以內的話,應當會觸發sentinel的選舉。
等待10秒后,連接任意sentinel,執行
SENTINEL master {name}
應看到返回的master變為了另一個ip,而
SENTINEL slaves {name}
返回的兩個slave中應包含原先的master