基于Docker的Redis集群

news/2025/2/15 23:38:33/

单台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 已经变成之前设置的第二个从节点,这个主从切换过程由哨兵节点自动帮我们完成

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

文章来源:https://blog.csdn.net/Z_zfer/article/details/129795339
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/news/35838.html

相关文章

不在路由器上做端口映射,如何访问局域网内网站

假设现在外网有一台ADSL直接拨号上网的电脑,所获得的是公网IP。然后它想访问局域网内的电脑上面的网站,那么就需要在路由器上做端口映射。在路由器上做端口映射的具体规则是:将所有发向自己端口的数据,都转发到内网的计算机。 访…

雅礼集训1.2 T1串

题目大意 给定一个由小写字母组成的字符串sss,每次你可以删去它的一个非回文子串,求删成空串的最小次数。 有ttt组数据,1≤t≤201\leq t\leq 201≤t≤20,1≤n≤1051\leq n\leq 10^51≤n≤105 题解 如果sss不是回文串&#xff0…

Spring IoC循环依赖问题

什么是循环依赖 循环依赖其实就是循环引⽤,也就是两个或者两个以上的 Bean 互相持有对⽅,最终形成闭环。⽐如A 依赖于B,B依赖于C,C⼜依赖于A。 注意,这⾥不是函数的循环调⽤,是对象的相互依赖关系。循环调…

webRTC直播为什么比RTMP快?

Nginx-RTMP存在的问题 首先是延迟较高,大约是1.7秒,在扭转摄像头后观察画面,有非常明显的滞后感。 当页面处于后台时,浏览器分配的解码算力有所下降,延迟会有累加情况。 相比于刚才17:09时的1.7秒延迟,此…

运动蓝牙耳机哪个品牌好?运动蓝牙耳机推荐

国内运动耳机品牌的兴起对外国品牌带了不小的冲击。在国内运动消费市场快速增长的今天,运动耳机市场的竞争也是相当的激烈。谁能吃下这块大蛋糕,当然当然是要用实力说话了。今天小编就来盘点一下市场上的明星产品,是骡子是马拉出来溜溜。 1、…

EPPlus电子表格的.NET库Crack

EPPlus电子表格的.NET库Crack 改进了数据验证中的性能和对跨工作表引用的支持。 EPPlus是一个用于管理Office Open XML电子表格的.NET库。该库的设计考虑到了开发人员,使任何了解Microsoft Excel或任何其他电子表格库的开发人员都可以轻松地使用API。EPPlus为Micros…

DRF 使用djangorestframework-jwt 报错

报错信息 ImportError: Could not import rest_framework_jwt.authentication.JSONWebTokenAuthentication for API setting DEFAULT_AUTHENTICATION_CLASSES. ImportError: cannot import name smart_text from django.utils.encoding原因 JSON Web Token不再维护&#xff0c…

【Spring Cloud Alibaba】9.分布式配置管理(Nacos Config)

文章目录简介分布式配置中心Nacos ConfigNacos设置微服务设置pom修改添加配置文件测试项目修改Nacos配置添加测试接口启动项目配置动态更新测试简介 接下来对分布式项目实现统一配置管理,本操作先要完成之前的步骤,详情请参照【Spring Cloud Alibaba】S…