文章目錄
在 CentOS 7 上將 Redis sentinel 安裝成開機啟動的 service
之前曾經在 在 Linux 中將 Redis 安裝成 Service - 以 CentOS 7 為例 介紹過如何使用 redis 內建的 install_server.sh
執行檔將 redis instance 安裝成開機啟動的 service,也在 Windows 環境如何設定 Redis Master-Slave 與 Sentinel 介紹過如何在 Windows 環境中將 redis instance 及 sentinel 安裝為 windows service
最近公司正在 review redis 相關設定,才發現筆記中缺了 redis sentinel 在 CentOS 7 上相關設定的內容,剛好趁這個機會補上
準備 sentinel config
詳細內容可以參考 Windows 環境如何設定 Redis Master-Slave 與 Sentinel
建立 sentinel config
vi /etc/redis/sentinel.conf
修改 config (以下僅示範用,請依實際情況調整)
port 26379 daemonize yes 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
設定 Service 啟動 script
將 redis 預設腳本複製至
/etc/init.d/
中cp ~/redis-4.0.1/utils/redis_init_script /etc/init.d/redis_sentinel
調整啟動 script
vi /etc/init.d/redis_sentinel
修改
REDISPORT
一般慣例 sentinel 使用
26379
,但只要不跟 redis instance 重複, port 並沒有實際限制修改
EXEC
使用
redis-sentinel
來執行比較方便 (使用redis-server
需要加上--sentinel
參數)修改
CONF
指定上面準備的 sentinel config 位置
下方範例可直接使用
#!/bin/sh # # Simple Redis init.d script conceived to work on Linux systems # as it does use of the /proc filesystem. REDISPORT=26379 EXEC=/usr/local/bin/redis-sentinel CLIEXEC=/usr/local/bin/redis-cli PIDFILE=/var/run/redis_${REDISPORT}.pid CONF="/etc/redis/sentinel.conf" case "$1" in start) if [ -f $PIDFILE ] then echo "$PIDFILE exists, process is already running or crashed" else echo "Starting Redis server..." $EXEC $CONF fi ;; stop) if [ ! -f $PIDFILE ] then echo "$PIDFILE does not exist, process is not running" else PID=$(cat $PIDFILE) echo "Stopping ..." $CLIEXEC -p $REDISPORT shutdown while [ -x /proc/${PID} ] do echo "Waiting for Redis to shutdown ..." sleep 1 done echo "Redis stopped" fi ;; *) echo "Please use start or stop as first argument" ;; esac
設定 systemd 的定義檔
建立
redis_sentinel.service
定義檔vi /etc/systemd/system/redis_sentinel.service
新增定義檔內容
[Unit] Description=Redis Sentinel on port 26379 [Service] Type=forking ExecStart=/etc/init.d/redis_sentinel start ExecStop=/etc/init.d/redis_sentinel stop [Install] WantedBy=multi-user.target
啟動 service
重新載入 systemd 中的 config
systemctl daemon-reload
開啟開機自動啟動
systemctl enable redis_sentinel.service
立即啟動 service
systemctl start redis_sentinel.service
systemctl start redis_sentinel.service
如果啟動失敗可以看到詳細訊息
systemctl list-unit-files | grep -i redis_sentinel.service
可以用來看 redis_sentinel.service 的狀態
- 啟動前
- 啟動後
redis-cli -p 26379 ping
確認是否有正確啟動,回應
PONG
即正確
心得
sentinel 建立 service 的方式不像一般 redis instance 那麼方便,設定相對繁瑣些,但依上述步驟操作也還算容易,經過上述設定後就可以讓 sentinel 也能在 server 開機時自動執行,讓 redis HA 機制不會因為 server 重啟而失效
參考資訊
文章作者 Yowko Tsai
上次更新 2021-11-03
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。