docker搭建redis主从复制+sentinel高可用集群

docker搭建redis主从复制+sentinel高可用集群

redis的主从复制配合sentinel模式使用时,当主机宕机后,通过sentinel模式会自动选举出新的master,从而实现高可用。

1,搭建redis主从复制

启动三个redis docker容器分别映射到6380,6381,6382端口。

docker run -it --name redis-master6380 -p 6380:6379 -d redis
docker run -it --name redis-node6381 -p 6381:6379 -d redis
docker run -it --name redis-node6382 -p 6382:6379 -d redis

通过docker inspect redis-master6380命令 查看master6380节点容器内网的ip地址为172.17.0.4

进入node6381的redis-cli

docker exec -it redis-node6381 redis-cli

查看当前节点为master状态

info replication

将当前节点设置为master6380的slave

SLAVEOF 172.17.0.4 6379

对node6382做同样的操作将其设为master6380的slave

再次使用info replication 可以看到node6381和node6382状态都为slave

2,搭建sentinel模式

创建sentinel配置文件redis-master6380.conf、redis-node6381.conf和redis-node6382.conf

redis-master6380.conf

# 哨兵端口号
port 6380	
# 设定密码认证
# requirepass 123456
bind 0.0.0.0	
# 配置哨兵的监控参数
# 格式:sentinel monitor <master-name> <ip> <redis-port> <quorum>
# master-name被监控的master的名字
# ip是被监控的master的IP或主机名。
# quorom个哨兵判定这个节点失效后,才认为这个节点真的失效了
sentinel monitor redis-master6380 192.168.59.228 6380 2

# 连接主节点的密码
# 格式:sentinel auth-pass <master-name> <password>
#sentinel auth-pass local-master 123456

# 表示对外暴露的IP地址与端口号
slave-announce-ip 192.168.59.228
slave-announce-port 6380

redis-node6381.conf

port 6381
#requirepass 123456
bind 0.0.0.0
# quorom个哨兵判定这个节点失效后,才认为这个节点真的失效了
sentinel monitor redis-master6380 192.168.59.228 6380 2

#sentinel auth-pass redis-node6381 123456

# 表示对外暴露的IP地址与端口号
slave-announce-ip 192.168.59.228
slave-announce-port 6381

redis-node6382.conf

port 6382
# 设定密码认证
#requirepass 123456
bind 0.0.0.0
sentinel monitor redis-master6380 192.168.59.228 6380 2
# 连接主节点的密码
# 格式:sentinel auth-pass <master-name> <password>
#sentinel auth-pass redis-matser6380 123456

# 表示对外暴露的IP地址与端口号
slave-announce-ip 192.168.59.228
slave-announce-port 6382

将配置三个文件拷贝到对应的容器内

docker exec -it redis-master6380 /bin/bash -c ‘mkdir /etc/redis’
docker cp redis-master6380.conf redis-master6380:/etc/redis/sentinel.conf

docker exec -it redis-node6381 /bin/bash -c ‘mkdir /etc/redis’
docker cp redis-node6381.conf redis-node6381:/etc/redis/sentinel.conf

docker exec -it redis-node6382 /bin/bash -c ‘mkdir /etc/redis’
docker cp redis-node6382.conf redis-node6382:/etc/redis/sentinel.conf

进入容器启动sentienl

docker exec -it redis-master6380 bash
redis-sentinel /etc/redis/sentinel.conf

docker exec -it redis-node6381 bash
redis-sentinel /etc/redis/sentinel.conf

docker exec -it redis-node6382 bash
redis-sentinel /etc/redis/sentinel.conf

当前是在前台运行,方便观察,如果需要后台运行sentinel,需要加上参数daemonize yes

3,测试

在master节点上面写入数据,三台redis上都有同样的数据

在这里插入图片描述

停止redis-mater6380容器后观察日志,选举6381节点作为master

在这里插入图片描述

重新启动matser6380节点,观察日志,matser6380自动成为6381节点的slave

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值