主机Redis服务迁移到现有Docker Overlay环境
记录最后一次对中型2C企业级项目的容器化改造
hello, 好久不见,之前文章记录了一个实战的2C分布式项目的改造过程,结果如下:
其中Redis并未完成容器化改造(目前是主机单点),本文记录将Redis升级到容器化Redis-Sentinel集群
。
升级思路:
- 《Docker-compose搭建Redis高可用哨兵集群》,这里将Redis-Sentinel容器接入现有Docker Swarm overlay网络,规避Redis ClientApp访问不同网络的Redis-Sentinel引发的混乱(因NAT转换和Port映射)。
- 利用主机上现有Redis dump.rdb持久化文件快速启动Redis哨兵集群
(1 master:2slave:3 sentinel) - 修改
receiver
、app
的Redis连接字符串,验证
注意事项
- 现有的应用程序处于Docker Swarm Overlay网络,默认是不允许附加其他容器,这里我们需要将该Overlay网络配置成
可附加
,方便Redis-Sentinel接入该网络,所有容器同网络。
...... # 下面生成的overlay网络名称是:eqidstack_webnet networks: webnet: driver: overlay attachable: true // 应用程序Docker swarm overlay网络配置可附加容器 .....
- 官方Redis镜像持久化数据存储在:
/data
, 本处我们需要将现有的主机Redis dump.rdb文件外挂进Master容器。
# 下面是master/slave docker-compose.yml文件 version: '3.7' services: master: image: redis container_name: redis-master command: redis-server --requirepass zxcde@1 --masterauth zxcde@1 volumes: - /home/redis-sentinel/redis/data:/data ports: - "6380:6379" networks: - webnet slave1: image: redis container_name: redis-slave-1 ports: - "6381:6379" command: redis-server --slaveof redis-master 6379 --masterauth zxcde@1 --requirepass zxcde@1 networks: - webnet slave2: image: redis container_name: redis-slave-2 ports: - "6382:6379" command: redis-server --slaveof redis-master 6379 --masterauth zxcde@1 --requirepass zxcde@1 networks: - webnet networks: webnet: external: true name: eqidstack_webnet
- 对于Redis哨兵高可用集群,Redis ClientApp 只需要知道 哨兵的IP、Port即可, 故我们可以给哨兵容器固定IP,
例如下面的每个sentinel容器固定静态IP (在Overlay网段内)
version: '3' services: sentinel1: image: redis container_name: redis-sentinel-1 ports: - 26379:26379 command: redis-sentinel /usr/local/etc/redis/sentinel.conf volumes: - ./sentinel1.conf:/usr/local/etc/redis/sentinel.conf networks: eqidstack_webnet: ipv4_address: 10.0.7.41 sentinel2: image: redis container_name: redis-sentinel-2 ports: - 26380:26379 command: redis-sentinel /usr/local/etc/redis/sentinel.conf volumes: - ./sentinel2.conf:/usr/local/etc/redis/sentinel.conf networks: eqidstack_webnet: ipv4_address: 10.0.7.42 sentinel3: image: redis container_name: redis-sentinel-3 ports: - 26381:26379 command: redis-sentinel /usr/local/etc/redis/sentinel.conf volumes: - ./sentinel3.conf:/usr/local/etc/redis/sentinel.conf networks: eqidstack_webnet: ipv4_address: 10.0.7.43 networks: default: external: name: eqidstack_webnet
- 经过验证,最新版本StackExchange.Redis 2.1.58 可以更简洁的方式支持Redis-sentinel, 只需更改连接字符串,其中
10.0.7.41:26379,10.0.7.42:26379,10.0.7.43:26379
是sentinel容器ip,serviceName
配置主节点名称。
"redis": "10.0.7.41:26379,10.0.7.42:26379,10.0.7.43:26379,serviceName=mymaster1,password=zxcde@1,abortConnect=false,connectTimeout=10000,writeBuffer=40960"
后记
将主机上现有单点Redis服务容器化,并搭建哨兵高可用集群;
且将Redis集群与应用程序放在同一Overlay网络,便于同网络段容器通信;
对于Redis哨兵集群,RedisClient APP 只需要知道哨兵IP,Port, 故这里对哨兵容器指定了容器IP.
本文来自博客园,作者:{有态度的马甲},转载请注明原文链接:https://www.cnblogs.com/JulianHuang/p/13190881.html
欢迎关注我的原创技术、职场公众号, 加好友谈天说地,一起进化
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?