一、部署架构
- 主从结构
- 主节点:部署于192.168.56.100
- 从节点:部署于192.168.56.101和192.168.56.103
- 哨兵结构
- 每台服务器部署一个哨兵实例,形成三哨兵集群。
ip | redis节点名称 | sentinel节点名称 |
192.168.56.100 | redis-master | redis-sentinel |
192.168.56.101 | redis-slave1 | redis-sentinel |
192.168.56.103 | redis-slave2 | redis-sentinel |
二、配置文件准备
创建conf目录保存redis.conf和sentinel.conf文件
创建data目录保存appendonly.aof、dump.rdb、
redis.log文件
1.主节点Redis配置(redis-master.conf
)
# 任何都可以连接redis
bind 0.0.0.0
# 配置master密码
requirepass 123456
# 宕机后成为从要连接master的密码
masterauth 123456
# 开启持久化
appendonly yes
2.从节点Redis配置(redis-slave.conf
)
# 指向主节点IP和端口
replicaof 192.168.56.100 6379
# 任何都可以连接redis
bind 0.0.0.0
# 从节点密码
requirepass 123456
# 主节点密码
masterauth 123456
# 开启持久化
appendonly yes
3.哨兵配置(sentinel.conf
)
port 26379
# 监控主节点,2为最小投票数
sentinel monitor mymaster 192.168.56.100 6379 2
# 主节点密码
sentinel auth-pass mymaster 123456
# 6秒无响应判定主节点下线
sentinel down-after-milliseconds mymaster 6000
# 控制同时进行同步的从节点数量为 1
sentinel parallel-syncs mymaster 1
# 故障转移超时时间
sentinel failover-timeout mymaster 6000
三、Docker-Compose文件编写
在三台服务器分别配置docker-compose
#version: '3'
services:
redis:
image: redis:6.2.14 # redis镜像版本
container_name: redis-master # 容器名称
ports:
# 指定宿主机端口与容器端口映射关系
- 6379:6379
volumes:
# 映射配置文件目录
- ./redis/conf/redis-master.conf:/usr/local/etc/redis/redis.conf
# 映射数据目录
- ./redis/data:/usr/local/etc/redis/data
restart: always # 容器开机自启
privileged: true # 获取宿主机root权限
command: redis-server /usr/local/etc/redis/redis.conf # 指定配置文件启动redis-server进程
networks:
- my-network
sentinel:
image: redis:6.2.14
container_name: redis-sentinel
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
ports:
- "26379:26379"
volumes:
- ./redis/conf/sentinel.conf:/usr/local/etc/redis/sentinel.conf
restart: always
networks:
- my-network
networks:
my-network:
#external: true
name: my-network
driver: bridge
*从节点需将
redis-master.conf
替换为redis-slave.conf
,并调整container_name
sentinel内容不变
*
四、部署步骤
1.启动服务
docker-compose up -d # 每台服务器执行
2.验证部署
- 主从同步检查:
docker exec -it redis-master redis-cli -a 123456 info replication
查看
role
和connected_slaves
字段
- 哨兵状态检查:
docker exec -it redis-sentinel redis-cli -p 26379 sentinel master mymaster
或者
进入哨兵容器:
docker exec -it redis-sentinel /bin/bash
连接哨兵:
redis-cli -p 26379
info
五、测试主从和故障转移
进入redis容器:
docker exec -it redis-master /bin/bash
redis-cli
auth 123456
1.测试主从复制
- master节点创建一个键值对:
- 从节点查看key是否存在:
主从复制正常!!!
2. 测试故障转移
我们把master(192.168.56.100)停掉,查看一个哨兵的日志:
docker stop redis-master
docker logs -f redis-sentinel
故障转移成功!!!