“《麻雀虽小,五脏俱全》之主机现有Redis服务迁移到Docker Swarm Overlay网络,并搭建高可用容器集群。
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: overlayattachable: true // 将现有的overlay网络配置为:可附加容器
.....
官方Redis镜像持久化数据存储在:
/data
, 本处我们需要将现有的主机Redis dump.rdb文件外挂进Master容器。
# 下面是master/slave docker-compose.yml文件
version: '3.7'
services:master:image: rediscontainer_name: redis-mastercommand: redis-server --requirepass zxcde@1 --masterauth zxcde@1volumes:- /home/redis-sentinel/redis/data:/dataports:- "6380:6379"networks:- webnetslave1:image: rediscontainer_name: redis-slave-1ports:- "6381:6379"command: redis-server --slaveof redis-master 6379 --masterauth zxcde@1 --requirepass zxcde@1networks:- webnetslave2:image: rediscontainer_name: redis-slave-2ports:- "6382:6379"command: redis-server --slaveof redis-master 6379 --masterauth zxcde@1 --requirepass zxcde@1networks:- webnet
networks:webnet:external: truename: eqidstack_webnet // 使用现有的Dokcer Overlay网络
经过验证,StackExchange.Redis最新版本2.1.58 可以更简洁的方式支持Redis-sentinel,:
只需更改原单点连接字符串,其中
10.0.7.41:26379,10.0.7.42:26379,10.0.7.43:26379
是sentinel容器端点,serviceName
为Sentinel配置的Maser/slave名称。
"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网络,便于同网络段容器通信。
对于ASP.NET Core && Docker && Redis相关问题, 欢迎各位提出并一起探讨。
https://hub.docker.com/_/redis
https://stackexchange.github.io/StackExchange.Redis/Configuration.html
前后端分离,如何在前端项目中动态插入后端API基地址?(in docker)
解读三组容易混淆的Dockerfile指令
掌握了Docker Layer Caching才敢自称精通Dockerfile
基于docker-compose的Gitlab CI/CD实践&排坑指南