文章目錄
Windows 環境如何設定 Redis Master-Slave 與 Sentinel
最近在幫公司同事做 Redis 基礎教育,雖說公司 Redis 架在 Rehat 上,但身為一個 .NET 開發人員讓我轉換環境操作 Linux 還是相對苦手的,所以就在自己的 Windows 電腦上架了 Redis Master-Slave 與 Sentinel,隨手筆記備忘一下
準備工作
下載 Windows 版 Redis
.msi 可以直接安裝為 Windows Service (但設定調整比較麻煩,建議使用 .zip)
- 預設安裝在
c:\Program Files\Redis
檔案修改權限設定比較繁瑣
- 預設安裝在
.zip
- 建議不要放在 OS 槽,會少掉許多權限設定問題
準備建立 Master-Slave 與 Sentinel(下列方式擇一即可)
- 採取實體隔離
- 將 zip 解壓縮至資料夾後複製多份並標記用途(e.g. Redis-{Master|SlaveSentinel})後備用
- 僅建立不同用途之 config
- 採取實體隔離
以下 demo 將以建立不同 config 方式進行
Master-Slave 設定
調整
redis.windows.conf
config 設定- Master
- 保留預設值即可
Slave
- 如果採用 config 隔離,請記得修改檔案(e.g. redis.windows6380.conf)
- 修改 port (不可與 master port 重複)
加入 slave 設定
slaveof {masterip} {masterport>}
- Master
啟動 Master & Slave (下列方式擇一即可)
指令
啟動 master
執行 redis-server.exe 並指定使用 master config
redis-server redis.windows.conf
啟動 slave
執行 redis-server 並指定使用 slave config (執行前確認 config 是否已正確修改)
redis-server redis.windows6380.conf
啟動後 Master 也會出現 sync 資料的訊息
Windows Service
- 如果路徑包含空白請記得使用跳脫字元
\
搭配"
將路徑包起來,下面 Sentinel 有使用範例 設定 master
sc.exe create "Redis6379" start= auto binPath= "c:\redis\redis-server.exe --service-run c:\redis\redis.windows-service.conf" DisplayName= "Redis6379"
設定 slave
sc.exe create "Redis6380" start= auto binPath= "c:\redis\redis-server.exe --service-run c:\redis\redis.windows-service6380.conf" DisplayName= "Redis6380"
- 如果路徑包含空白請記得使用跳脫字元
確認執行狀況
Master
redis-cli -h 127.0.0.1 -p 6379 info replication
Slave
redis-cli -h 127.0.0.1 -p 6380 info replication
Sentinel config 設定
Winodws 7 使用 Windows Redis 3.2.100 版本無法啟動 sentinel,需使用 3.0.504 版
- 新增 sentinel.conf 檔案
逐一加入以下設定
指定 port
port 26379
指定監視名為
master
ip 為127.0.0.1
port 為6379
的 redis master instance,最後數字代表幾個 sentinel 同意才進行切換sentinel monitor master 127.0.0.1 6379 1
指定
3000
毫秒沒有回應就視名為master
的 instance 失效sentinel down-after-milliseconds master 3000
指定
18000
毫秒未完成視為 failover 失敗sentinel failover-timeout master 18000
指定同時只有
1
個 salve 可以從新 master 同步資料回去sentinel parallel-syncs master 1
- 數字愈小,failover 耗時就愈久(需等所有 slave 都同步完)
- slave 同步資料可能會造成 slave 無法回應,所以也不建議設太大
指定連線密碼為
password
(非必要)sentinel auth-pass password
最終設定範例
port 26379 sentinel monitor master 127.0.0.1 6379 1 sentinel down-after-milliseconds master 3000 sentinel failover-timeout master 18000 sentinel parallel-syncs master 1
啟動 Sentinel
指令
執行 redis-server.exe 並指定使用 sentinel config 及
--sentinel
參數 (執行前請確認 sentinel config 已設定)redis-server.exe sentinel.conf --sentinel
Windows Service
如果路徑包含空白請記得使用跳脫字元
\
搭配"
將路徑包起來sc.exe create "RedisSentinel" start= auto binPath= "\"c:\Program Files\redis\redis-server.exe\" --service-run \"c:\Program Files\redis\sentinel.conf\" --sentinel" DisplayName= "RedisSentinel"
確認執行狀態
redis-cli -h 127.0.0.1 -p 26379 info sentinel
模擬 master 失效
手動 shutdown master
redis-cli -h 127.0.0.1 -p 6379 shutdown
確認 sentinel 資訊
consoel 出現 failover 操作資訊
config 也自動修改了
確認 slave 資訊
console 出現啟用 Master mode
config
slaveof {masterip} {masterport>} 已被移除
使用
redis-cli -h 127.0.0.1 -p 6380 info replication
確認
模擬 slave 接替成為 master 後,原 master 回復服務
手動 shutdown master
redis-cli -h 127.0.0.1 -p 6379 shutdown
確認 sentinel 資訊
consoel 出現 failover 操作資訊
config 也自動修改了
確認 slave 資訊
console 出現啟用 Master mode
config
slaveof {masterip} {masterport>} 已被移除
使用
redis-cli -h 127.0.0.1 -p 6380 info replication
確認
回復已 shutdown 的 master
再次啟動原 master
自動連線至新 master (原 slave) ,並成為其 slave 開始同步資料
新 master (原 slave) 同步資料至 原 master(新 slave)
Sentinel 偵測到
原 master
加入並將其指定為 slave原 master(新 slave) 的 config 會被自動加上
slaveof {新 master} {新 masterport>}
使用指令確認一下
原 master:6379 –> slave
redis-cli -h 127.0.0.1 -p 6379 info replication
原 slave :6380 –> master
redis-cli -h 127.0.0.1 -p 6380 info replication
參考資料
文章作者 Yowko Tsai
上次更新 2021-10-04
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。