
Table of Contents
1、準備服務器
-
服務器數量
準備3臺服務器,配置要求一樣,用于一主兩從架構。 -
操作系統
選擇使用Centos7.8版本Linux操作系統。
Redis支持Linux內核版本2.6.32及以上的主流發行版本。RHEL7+、CentOS7+、RHEL8+、CentOS8+、Ubuntu 18.04 LTS、Ubuntu 20.04 LTS、Ubuntu 22.04 LTS、Debian 9、Debian 10、Debian 11、Debian 12、SUSE Linux Enterprise Server (SLES) 12+ 等都可以。國產操作系統麒麟 V10也可以。
- 掛載目錄
需要掛載的目錄有根目錄,redis目錄(用于存儲redis相關內容),SWAP。
| 目錄 | 存儲大小 |
|---|---|
| / | 50G |
| redis | 100G |
| swap | 8G(根據服務器實際內存大小設置,此處為測試環境大小) |
swap:大于16G內存,設置為16G;大于8G、小于16G,設置成和內存一樣大;小于8G,設置成內存的2倍。
- 創建redis相關用戶組
使用redis用戶管理redis相關內容,將redis用戶提供給研發測試組,而不是使用root。
groupadd redis
useradd -g redis redis
echo Zqd@123 | passwd --stdin redis
- 創建redis相關目錄
創建conf目錄,用于存放redis配置文件、redis sentinel(哨兵)配置文件;創建data文件,用于存放redis持久化RDB文件;創建log文件,用于存放redis日志和哨兵日志;創建script目錄,用于存放redis相關腳本。
這些不是官方要求的目錄,是我本人認為這些目錄可以更加規范的管理運維redis 。
mkdir -p /redis/conf
mkdir -p /redis/data
mkdir -p /redis/log
mkdir -p /redis/script
chown -R redis:redis /redis
2、下載源碼包
2.1、下載
如果服務器可通外網,可以直接在服務器上下載對應版本的源碼包。
wget http://download.redis.io/releases/redis-6.2.4.tar.gz
如果服務器不通外網,可以先在外網下載對應版本源碼包后,再上傳至服務器。

2.2、上傳并解壓
將源碼包上傳至3臺服務器的 /redis 目錄。
解壓源碼包:
tar -xzvf redis-6.2.4.tar.gz -C /redis/
2.3、編譯源碼包
進入解壓后的 /redis/redis-6.2.4 目錄,編譯源碼包。
cd /redis/redis-6.2.4
make #make命令是用于編譯源碼包
下面是 redis-6.2.4 目錄中的內容:

如果編譯失敗,大概率是因為服務器缺少依賴包,按照提示安裝依賴即可。
3、修改配置文件
- 修改 redis 配置文件
在源碼包解壓后的 redis-6.2.4 目錄中有 redis.conf 配置文件,但這個配置文件中的注釋太多,不易于后期管理維護。可以在 /redis/conf 目錄中創建 redis.conf 文件,并將下面的參數分別添加到三臺服務器的 /redis/conf/redis.conf 文件中。
先對配置文件中的必要參數做簡要說明。
bind:
需要手動修改。指定服務器監聽的網絡接口IP地址。為了安全起見,此處只填寫服務器本機IP地址和127.0.0.1即可。
port:
不需要手動修改,redis服務端口,默認6379即可。
daemonize:
需要手動修改。daemonize 參數默認是 no ,與redis的守護進程相關,如果是 no 的話,那么systemctl無法正常管理它。
pidfile:
需要手動修改。指定pid文件名及路徑,redis會在啟動時將其寫入指定位置,并在退出時將其刪除。
loglevel:
不需要手動修改,默認為notice即可。redis 的 loglevel 有 debug 、verbose 、notice 、warning 、nothing。其中最常用的是notice。
logfile:
需要手動修改。指定日志文件名及路徑。
dir:
需要手動修改。此處指定的是 redis 持久化文件 rdb 的路徑,不指定文件名。
dbfilename:
不需要手動修改,默認dump.rdb即可。
requirepass:
需要手動修改。是主庫密碼,一般只需要給主節點配置即可。但經過數次主從切換實踐,在三個節點的配置文件中都進行配置比較保險。
masterauth:
需要手動修改。是從庫認證密碼,一般只需要給從節點配置即可。但經過數次主從切換實踐,在三個節點的配置文件中都進行配置比較保險。(masterauth必須與requirepass保持一致)
replicaof:
初次需要手動修改。此處代表的是主從關系,參數后面指定主庫的IP地址和端口,初次只在兩個從節點進行配置即可。在哨兵模式下進行自動主從切換時,redis會自動修改replicaof參數。
這些參數只是一部分,更多的redis參數有興趣的可以去翻閱源碼包解壓后的 redis-6.2.4 目錄中的 redis.conf 配置文件。其余參數不寫即按照redis的默認值進行處理
(1)主節點
bind 127.0.0.1 192.168.59.156
port 6379
daemonize yes
pidfile "/redis/data/redis_6379.pid"
loglevel notice
logfile "/redis/log/redis_6379.log"
dir "/redis/data"
dbfilename dump.rdb
masterauth "zqd123"
requirepass "zqd123"
(2)從節點1
bind 127.0.0.1 192.168.59.157
port 6379
daemonize yes
pidfile "/redis/log/redis_6379.pid"
loglevel notice
logfile "/redis/log/redis_6379.log"
dir "/redis/data"
dbfilename dump.rdb
masterauth "zqd123"
requirepass "zqd123"
replicaof 192.168.59.156 6379
(2)從節點2
bind 127.0.0.1 192.168.59.158
port 6379
daemonize yes
pidfile "/redis/log/redis_6379.pid"
loglevel notice
logfile "/redis/log/redis_6379.log"
dir "/redis/data"
dbfilename dump.rdb
masterauth "zqd123"
requirepass "zqd123"
replicaof 192.168.59.156 6379
- 修改 redis 哨兵配置文件
在源碼包解壓后的 redis-6.2.4 目錄中有 sentinel.conf 配置文件,但這個配置文件中的注釋太多,不易于后期管理維護。可以在 /redis/conf 目錄中創建 sentinel.conf 文件,并將下面的參數分別添加到三臺服務器的 /redis/conf/sentinel.conf 文件中,三節點哨兵配置文件一致。
先對配置文件中的必要參數做簡要說明。
sentinel monitor mymaster:
需要手動修改。此處是定義哨兵監控的主節點信息。在下面的配置文件示例中,sentinel monitor mymaster 參數末尾的 2 指的是需要多少個哨兵確認主節點下線后才會觸發故障轉移,3個哨兵就設置為2。
sentinel auth-pass mymaster:
需要手動修改。當主節點啟用了requirepass密碼時,此處設置相同的密碼,用于哨兵與主節點通信的認證。
sentinel deny-scripts-reconfig:
默認為yes,不需要手動修改。參數意思為是否允許通過腳本動態修改主從關系。
port 26379
daemonize yes
pidfile "/redis/data/redis-sentinel.pid"
logfile "/redis/log/redis-sentinel.log"
dir "/redis/data"
sentinel monitor mymaster 192.168.59.156 6379 2
sentinel auth-pass mymaster zqd123
sentinel deny-scripts-reconfig yes
4、管理服務
4.1、配置環境變量
配置環境變量,這樣redis-cli等命令就可以直接使用了。
#編輯 profile 文件
vim /etc/profile
#將 src 路徑加入path
PATH=$PATH:$HOME/.local/bin:$HOME/bin:/redis/redis-6.2.4/src/
#加載配置文件使其生效
source /etc/profile
4.2、啟動/停止服務
切換到redis用戶啟動
具體用哪種方式進行啟停要看實際要求,有的項目可能對shutdown等高危命令審查比較嚴格或者嚴格要求配置redis守護進程就適合用systemctl管理,不做要求的話就看個人習慣,但還是推薦使用systemctl管理。
- 啟動/停止 redis 服務
在源碼包解壓后的 redis-6.2.4 目錄中的 src 目錄中,有 redis-server 文件,通過 redis-server 文件并指定reidis配置文件進行啟動;而停止 redis 服務使用 redis-cli 命令行。
使用 redis-server 指定 redis.conf 啟動 redis 服務。
/redis/redis-6.2.4/src/redis-server /redis/conf/redis.conf &
使用 redis-cli 停止 redis 服務。
redis-cli -a zqd123 -p 6379 shutdown
- 啟動/停止 哨兵 服務
在源碼包解壓后的 redis-6.2.4 目錄中的 src 目錄中,有 redis-sentinel 文件,通過 redis-sentinel 文件并指定reidis哨兵配置文件進行啟動。
使用 redis-sentinel 指定 sentinel.conf 啟動 redis哨兵 服務。
/redis/redis-6.2.4/src/redis-sentinel /redis/conf/sentinel.conf &
使用 redis-cli 停止 redis哨兵 服務。
redis-cli -a zqd123 -p 26379 shutdown
- systemctl 管理 redis 服務
進入 /etc/systemd/system 目錄,編輯 redis.service 文件;將下面的信息添加進 redis.service 文件。
[Unit]
Description=Redis persistent key-value database
After=network.target
[Service]
Type=forking
ExecStart=/redis/redis-6.2.4/src/redis-server /redis/conf/redis.conf
ExecStop=/redis/redis-6.2.4/src/redis-cli -a zqd123 -p 6379 shutdown
Restart=always #當redis在意外中斷后,保證自動重新啟動;但是systemctl stop redis停止的不會重啟。
User=redis
Group=redis
[Install]
WantedBy=multi-user.target
在完成 redis.service 的配置后,進行如下操作。
systemctl daemon-reload
systemctl start redis
systemctl enable redis #設置開機自啟動
- systemctl 管理 redis哨兵 服務
進入 /etc/systemd/system 目錄,編輯 redis-sentinel.service 文件;將下面的信息添加進 redis-sentinel.service 文件。
[Unit]
Description=Redis Sentinel
After=network.target redis.service
[Service]
ExecStart=/redis/redis-6.2.4/script/redis-sentinel /redis/conf/sentinel.conf
ExecStop=/redis/redis-6.2.4/src/redis-cli -a zqd123 -p 26379 shutdown
Restart=always#當哨兵在意外中斷后,保證自動重新啟動;但是systemctl stop redis停止的不會重啟。
Type=forking
User=redis
Group=redis
[Install]
WantedBy=multi-user.target
在完成 redis-sentinel.service 的配置后,進行如下操作。
systemctl daemon-reload
systemctl start redis-sentinel
systemctl enable redis-sentinel #設置開機自啟動
4.3、檢查主從關系
執行如下命令
redis-cli -h 192.168.59.156 -a zqd123 -p 6379 INFO replication
此時可以觀察到 192.168.59.156 是 master 主節點,192.168.59.157、192.168.59.158 是從節點,且都已建立連接。此時可以在主節點 set key value,然后去兩個從節點 get key 觀察是否正常同步。

4.4、驗證主從切換
部署完 redis 哨兵,必須要驗證其是否能自動進行故障轉移。執行下面的步驟進行驗證。
(1)關閉當前主節點
redis-cli -h 192.168.59.156 -a zqd123 -p 6379 shutdown
#如果配置了守護進程(Restart=always),上面的shutdown是無法關閉的;需要用systemctl。
systemctl stop redis
(2)觀察主從信息
此時可以發現,主節點已經自動切換到 192.168.59.157,且和 192.168.59.158 節點正常建立連接。

(3)啟動手動關閉的節點
systemctl start redis
#或者
/redis/redis-6.2.4/src/redis-server /redis/conf/redis.conf &
(4)觀察主從信息
此時可以發現,192.168.59.156 已經自動加入集群,成為從節點。

這說明哨兵模式集群部署是成功的。




