Redis 提供了主從復制(Master-Slave Replication)和哨兵(Sentinel)兩種機制來進行故障恢復。下面分別介紹這兩種方法:
主從復制是 Redis 默認的故障恢復方式。它通過將一個 Redis 服務器(主服務器)的數(shù)據(jù)復制到一個或多個其他 Redis 服務器(從服務器)來實現(xiàn)故障恢復。當主服務器出現(xiàn)故障時,可以將一個從服務器提升為主服務器,接管故障主服務器的請求。
配置主從復制的步驟如下:
a. 配置主服務器:
在主服務器的 redis.conf 配置文件中,添加以下內(nèi)容:
bind 0.0.0.0
protected-mode no
port 6379
requirepass your_master_password
這里將主服務器的綁定地址設置為 0.0.0.0,以便從服務器可以連接到主服務器。同時,設置密碼保護。
b. 配置從服務器:
在從服務器的 redis.conf 配置文件中,添加以下內(nèi)容:
bind 0.0.0.0
protected-mode no
port 6380
slaveof your_master_ip 6379
masterauth your_master_password
這里將從服務器的綁定地址設置為 0.0.0.0,以便客戶端可以連接到從服務器。同時,設置主服務器的 IP 地址和端口,以及主服務器的密碼。
c. 重啟 Redis 服務:
在主服務器和從服務器上重啟 Redis 服務。
d. 驗證主從復制狀態(tài):
在主服務器上執(zhí)行 info replication
命令,查看主從復制的狀態(tài)。在從服務器上執(zhí)行 info replication
命令,查看從服務器的狀態(tài)。
當主服務器出現(xiàn)故障時,可以通過以下步驟將從服務器提升為主服務器:
a. 在從服務器上執(zhí)行 SLAVEOF NO ONE
命令,將從服務器提升為主服務器。
b. 修改從服務器的 redis.conf 配置文件,將 slaveof
配置項刪除。
c. 重啟 Redis 服務。
哨兵是 Redis 官方提供的分布式故障轉(zhuǎn)移解決方案。它監(jiān)控主從復制環(huán)境中的主服務器和從服務器,當主服務器出現(xiàn)故障時,自動將從服務器提升為主服務器,并將新的主服務器地址通知客戶端。
配置哨兵的步驟如下:
a. 配置哨兵:
創(chuàng)建一個名為 sentinel.conf 的配置文件,添加以下內(nèi)容:
sentinel monitor mymaster your_master_ip 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1
這里將主服務器的名稱設置為 mymaster
,IP 地址設置為 your_master_ip
,端口設置為 6379
。同時,設置故障檢測時間間隔為 5 秒,故障轉(zhuǎn)移超時時間為 60 秒,并行同步從服務器數(shù)量為 1。
b. 啟動哨兵:
在哨兵所在的機器上執(zhí)行 redis-sentinel sentinel.conf
命令,啟動哨兵。
c. 驗證哨兵狀態(tài):
執(zhí)行 redis-cli sentinel get-master-addr-by-name mymaster
命令,查看主服務器的地址。
當主服務器出現(xiàn)故障時,哨兵會自動將從服務器提升為主服務器,并將新的主服務器地址通知客戶端。