Redis高可用解决方案: 主从同步+哨兵.

1. 创建数据目录

1
2
3
4
5
# 在三台机器分别创建
cd /nfs_data/redis_data
mkdir redis_9680
mkdir redis_9682
mkdir redis_9684

2. 修改配置文件

redis-conf修改

1
2
3
4
5
6
7
port 6379 # docker内的端口, 不要改
slaveof 172.24.29.118 9680  # 这一行只在slave机器添加, 修改IP和端口为master机器主机的IP和端口
cluster-enabled no
appendonly yes
requirepass <password>  # 三台机器同样的密码
masterauth <password>  # 三台机器同样的密码
logfile "/data/redis.log"

sentinel.conf修改

1
2
3
4
5
6
7
8
daemonize yes
port 27000  # docker内的端口, 不要改
sentinel monitor mymaster 172.24.29.118 9680 2  # 修改IP和端口为master机器主机的IP和端口
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 900000
sentinel parallel-syncs mymaster 2
sentinel auth-pass mymaster <password>  # 三台机器同样的密码
logfile "/data/sentinel.log"

3. 运行docker

1
2
3
4
5
6
7
8
# Machine 1
docker run -p 9680:6379 -p 27000:27000 --name redis_9680 --restart always --mount type=bind,src=/nfs_data/redis_data/redis_9680,dst=/data -d redis redis-server /data/redis.conf

# Machine 2
docker run -p 9682:6379 -p 27002:27000 --name redis_9682 --restart always --mount type=bind,src=/nfs_data/redis_data/redis_9682,dst=/data -d redis redis-server /data/redis.conf

# Machine 3
docker run -p 9684:6379 -p 27004:27000 --name redis_9684 --restart always --mount type=bind,src=/nfs_data/redis_data/redis_9684,dst=/data -d redis redis-server /data/redis.conf

4. 启动sentinel

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# Machine 1
docker exec -it redis_9680 /bin/bash
redis-sentinel ./sentinel.conf

# Machine 2
docker exec -it redis_9682 /bin/bash
redis-sentinel ./sentinel.conf

# Machine 3
docker exec -it redis_9684 /bin/bash
redis-sentinel ./sentinel.conf