基于Docker的Redis集群

文章介绍了如何使用Docker搭建Redis的一主两从三哨兵集群,详细阐述了主从复制的配置过程,以及哨兵机制在故障检测和自动恢复中的作用。通过哨兵监控主从节点状态,当主节点宕机时,哨兵能自动将从节点提升为主节点,确保系统的高可用性。
摘要由CSDN通过智能技术生成

单台Redis系统很难满足高并发的需求,另外为了避免单机故障,redis引入了主从复制模式

  1. 在主从复制模式的集群里,主节点(master server)一般是一个,从节点(slave server)一般是多个,写入主节点的数据会被复制到从节点上面,这样一旦主节点出现故障,系统就能切换到从节点去读数据,提升系统的可用性
  2. 主从复制模式默认采用读写分离机制,主节点只允许写入,从节点只允许读数据,大大提高了系统读写性能
  3. 在主从模式的集群中,主服务器宕机时,需要人工手动切换到从节点服务器上,同时重新设置集群的主从关系,因此 redis 引入了哨兵机制

哨兵机制:

  • 哨兵进程监控主从服务器是否可用
  • 当主服务器出现故障时,哨兵机制可以实现故障自动恢复
  • 为了防止单个哨兵故障,一般在集群中引入多个哨兵
  • 哨兵本身也是一个 redis 服务器,只是以哨兵模式启动

本文利用docker镜像配置一主两从三哨兵的redis集群:

1. 通过docker镜像模拟集群

    执行命令 -> 创建一个主节点和两个从节点

# 搭建主节点 name:redis-master port: 6379
docker run -itd --name redis-master -p 6379:6379 redis
# 搭建从节点1 name:redis-salve-1 port: 6380
docker run -itd --name redis-slave-1 -p 6380:6380 redis
# 搭建从节点2 name:redis-salve-2 port: 6381
docker run -itd --name redis-slave-2 -p 6381:6381 redis

   查看容器内部主节点ip

docker inspect redis-master | grep IPAddress

# "IPAddress": "172.17.0.2"

   查看容器内部两个从节点ip

docker inspect redis-slave-1 | grep IPAddress
# "IPAddress": "172.17.0.3"

docker inspect redis-slave-2 | grep IPAddress
# "IPAddress": "172.17.0.4"

  2. 主从复制模式

   在从节点的 redis 命令行使用 slaveof 命令

slaveof 172.17.0.2 6379

# 指定当前redis-slave为172.17.0.2 6379的从节点

   进入主节点查看信息

# 进入主节点redis
docker exec -it redis-master redis-cli
# 查看信息
info replication

此时可以看到主节点上面已经绑定了两个从节点,主从节点绑定之后,从节点不断地更新自己从而追求和主节点服务器数据保持一致---主从复制模式

从节点的slave_read_only:1,默认从节点是只读的,主节点是只写的,然后主节点将写操作同步到从节点

3. 配置三个哨兵节点服务器

哨兵节点本身也是一个 redis 服务器,只是配置文件和启动方式有所不同

  启动方式

# 方式一
redis-sentinel /opt/sentinel.conf
# 方式二
redis-server /opt/sentinel.conf --sentinel

  哨兵配置文件 vi /etc/redis/sentinel-1.conf

# 指定哨兵工作端口
port 26379
# matser: 给监控服务器起名master 监控服务器的ip和端口
# 2表示至少有两台哨兵节点认可才能确认该主节点服务器失效
sentinel monitor redis-master 172.17.0.2 6379 2
# 指定哨兵节点的日志路径
logfile /var/sentinel.log

# master节点宕机后,等待多少时间(毫秒),认定master不可用
# 默认30s,这里为了测试,改成10s
sentinel down-after-milliseconds redis-master 10000
# 当替换主节点后,剩余从节点重新和新master做同步的并行数量,默认为 1
sentinel parallel-syncs redis-master 1
# 主备切换的时间,若在3分钟内没有切换成功,换另一个从节点切换
sentinel failover-timeout redis-master 180000

  以 redis-sentinel 方式读取 sentinel-1.conf 配置文件启动哨兵容器

docker run -itd --name sentinel-1 -p 26379:26379 -v /etc/redis:/sentinel redis redis-sentinel /sentinel/sentinel-1.conf

  进入哨兵容器查看哨兵状态

docker exec -it sentinel-1 redis-cli -p 26379
127.0.0.1:26379> 

# 哨兵工作端口 = 26379

   查看哨兵状态

info sentinel

       可以看到该哨兵监听的主节点服务器 status=ok,address 代表的是主节点的 ip 和端口,slaves=2 代表有两个从节点,sentinel=1 代表当前只有一个哨兵节点

 利用同样的步骤创建哨兵2和哨兵3,哨兵2的 port=26380,哨兵3的 port=26381

# 启动哨兵2 配置文件/ect/redis/sentinel-2.conf  端口=26380
docker run -itd --name sentinel-2 -p 26380:26380 -v /etc/redis:/sentinel redis redis-sentinel /sentinel/sentinel-2.conf
# 启动哨兵3 配置文件/ect/redis/sentinel-3.conf  端口=26381
docker run -itd --name sentinel-3 -p 26381:26381 -v /etc/redis:/sentinel redis redis-sentinel /sentinel/sentinel-3.conf

 4. 模拟故障恢复主从切换-failover

  重启主服务器节点 redis-master

# 停止主节点服务器运行
docker stop redis-master 

# 10s 后再启动主节点服务器
docker start redis-master

此时可以看到 redis-master 主节点已经变成 slave 从节点了,而 master_host 已经变成之前设置的第二个从节点,这个主从切换过程由哨兵节点自动帮我们完成

缺点分析:哨兵模式基于主从复制模型,同时也继承了主从复制模式的缺点,受限于单机配置,难以在线扩容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值