? ? ? ? ? ? ? ? Redis提供了哨兵機制實現主從集群下的故障轉移,其中包含了對主從服務的檢測、自動故障恢復和通知。
1.環境
centos7、redis6.2.4、MobaXterm
目的:
搭建redis的主從同步+哨兵集群(一主一從三哨兵)
2.步驟
1.主從集群的搭建
主從集群搭建https://blog.csdn.net/m0_74808313/article/details/149283482?spm=1011.2124.3001.6209
2.創建掛載目錄和添加配置文件
使用命令創建掛載目錄:
mkdir -p redis-demo/sentinel7001/conf
mkdir -p redis-demo/sentinel7001/data
mkdir -p redis-demo/sentinel7002/conf
mkdir -p redis-demo/sentinel7002/data
mkdir -p redis-demo/sentinel7002/conf
mkdir -p redis-demo/sentinel7002/data
添加配置文件sentinel.conf:
vim /home/hl/redis-demo/sentinel7001/conf/sentinel.conf
將以下內容復制到文件中:
port 27001
# 統一虛擬機ip
sentinel announce-ip 192.168.206.180
# 指定主節點以及哨兵的quonum
sentinel monitor mymaster 192.168.206.180 7001 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
剩余兩個哨兵同樣的操作,記得改端口號。
3.創建并啟動sentinel容器
docker run -d \--name sentinel1 \--net redis-net \-p 27001:27001 \--privileged=true \-v /home/hl/redis-demo/sentinel7001/conf:/etc/redis \-v /home/hl/redis-demo/sentinel7001/data:/data \redis:6.2.4 \redis-sentinel /etc/redis/sentinel.conf
docker run -d \--name sentinel2 \--net redis-net \-p 27002:27002 \--privileged=true \-v /home/hl/redis-demo/sentinel7002/conf:/etc/redis \-v /home/hl/redis-demo/sentinel7002/data:/data \redis:6.2.4 \redis-sentinel /etc/redis/sentinel.conf
docker run -d \--name sentinel3 \--net redis-net \-p 27003:27003 \--privileged=true \-v /home/hl/redis-demo/sentinel7003/conf:/etc/redis \-v /home/hl/redis-demo/sentinel7003/data:/data \redis:6.2.4 \redis-sentinel /etc/redis/sentinel.conf
使用docker ps命令查看是否啟動成功:
出現信息則表示啟動成功
使用docker exec -it sentinel1 redis-cli -p 27001 sentinel master mymaster命令查看sentinel信息:
出現以上信息則表示連接成功。
執行docker logs sentinel1命令查看打印的日志信息:
我們可以看到哨兵檢測的主從集群:
3.自動故障轉移測試
我們來模擬哨兵的自動故障轉移,關閉master容器來模擬宕機,來查看slave會不會成為新的master,恢復舊的master,來查看是否成為了slave。
docker stop redis-7001
等待幾秒后再查看sentinel日志:
我們可以看到有超過quonum的哨兵都認為master主觀下線了,master節點由原來的7001轉移到了7002,也就是slave節點成為了新的master
重新啟動docker容器,可以看到恢復連接后master仍是7002
docker start redis-7001