利用docker轻松搭建Redis-Cluster集群环境

简介Redis Cluster是Redis官方的一个高可用分布式解决方案 , 其优点是高可用 , 缺点是不能保证数据强一致 。 在这里使用docker容器来搭建一套6节点(3主 , 3从)Redis-Cluster集群环境 。
环境准备操作系统版本:CentOS Linux release 7.6.1810 (Core)docker版本:19.03.13服务器IP地址:192.168.112.136redis版本:5.0.9redis实例端口:8001--8006
docker安装首先需要在CentOS系统上安装好docker软件 , 目前docker软件分为社区版ce和企业版ee , 企业版是需要收费的 , 所以在这里使用社区版 , 要安装docker软件 , CentOS系统的内核版本高于 3.10 。
下面是docker安装步骤
yum install -y yum-utils device-mapper-persistent-data lvm2yum-config-manager --add-repo yum install docker-ce启动并加入开机启动systemctl start dockersystemctl enable docker由于docker默认是从国外拉取镜像 , 速度会比较慢 , 所以需要配置docker从国内的镜像网站拉取镜像 , 其配置步骤如下所示
利用docker轻松搭建Redis-Cluster集群环境文章插图
docker hub 镜像加速资源列表
将国内镜像网站添加到daemon.json配置文件
>/etc/docker/daemon.json{"registry-mirrors": ["","","",""]}添加完成之后 , 需要重启docker服务器 , 使配置生效
systemctl daemon-reloadsystemctl restart dockerdocker服务器重启之后 , 使用docker info命令 , 检查配置是否生效
redis镜像拉取在docker-hub官网 , 有很多版本的redis镜像可供选择 , 在这里 , 选择redis:5.0.9-buster进行拉取
利用docker轻松搭建Redis-Cluster集群环境文章插图
redis镜像
[root@mysql ~]# docker pull redis:5.0.9-buster[root@mysql ~]# docker imagesREPOSITORYTAGIMAGE IDCREATEDSIZEredis5.0.9-busterc440306287f47 days ago98.3MB创建redis目录和配置文件由于这里需要配置6个redis实例的配置文件 , 所以在这里 , 可以先创建一个模板配置文件 , 之后使用代码批量替换的方式来创建每个redis的配置文件 。
创建模板文件
创建目录mkdir -p /data/docker_redis/编写redis_cluster.conf.template文件vi redis_cluster.conf.templateport ${PORT}requirepass 1234masterauth 1234protected-mode nodaemonize noappendonly yescluster-enabled yescluster-config-file nodes.confcluster-node-timeout 5000cluster-announce-ip 192.168.112.136cluster-announce-port ${PORT}cluster-announce-bus-port 1${PORT}在这里需要讲解2个参数cluster-announce-port:此端口为redis提供服务端口 , 用于应用客户端连接cluster-announce-bus-port:此端口用于redis集群进行故障检测、配置更新、故障转移授权和内部通讯使用 , 不用于应用客户端连接使用 。
创建6个redis实例的数据目录 , 配置文件目录和配置文件
for port in `seq 8001 8006`; do \mkdir -p /data/redis_data/${port}/conf \\done【利用docker轻松搭建Redis-Cluster集群环境】使用tree命令检查创建的目录和文件
[root@mysql data]$ tree redis_data/redis_data/|-- 8001||-- conf||`-- redis.conf|`-- data|-- 8002||-- conf||`-- redis.conf|`-- data|-- 8003||-- conf||`-- redis.conf|`-- data|-- 8004||-- conf||`-- redis.conf|`-- data|-- 8005||-- conf||`-- redis.conf|`-- data`-- 8006|-- conf|`-- redis.conf`-- data18 directories, 6 files批量创建容器在这里使用for循环批量创建redis容器 , 代码如下所示
for port in $(seq 8001 8006); do \docker run -d -it -p ${port}:${port} -p 1${port}:1${port} --restart always --name redis-${port} \-v /data/redis_data/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \-v /data/redis_data/${port}/data:/data \redis:5.0.9-buster redis-server /usr/local/etc/redis/redis.conf; \done在这里使用-v参数 , 让容器的redis配置参数和数据全部使用宿主机的文件目录 。 这样做的好处是 , 保证redis的数据不丢失 。
查看刚刚创建的redis容器
[root@mysql data]# docker psCONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMESf4c971ce2d84redis:5.0.9-buster"docker-entrypoint.s鈥 6 seconds agoUp 5 seconds0.0.0.0:8006->8006/tcp, 6379/tcp, 0.0.0.0:18006->18006/tcpredis-80061b5a8b0a1c93redis:5.0.9-buster"docker-entrypoint.s鈥 7 seconds agoUp 6 seconds0.0.0.0:8005->8005/tcp, 6379/tcp, 0.0.0.0:18005->18005/tcpredis-800535d8fe01fc71redis:5.0.9-buster"docker-entrypoint.s鈥 7 seconds agoUp 6 seconds0.0.0.0:8004->8004/tcp, 6379/tcp, 0.0.0.0:18004->18004/tcpredis-8004408e5302378aredis:5.0.9-buster"docker-entrypoint.s鈥 8 seconds agoUp 7 seconds0.0.0.0:8003->8003/tcp, 6379/tcp, 0.0.0.0:18003->18003/tcpredis-8003c1c23c543233redis:5.0.9-buster"docker-entrypoint.s鈥 8 seconds agoUp 7 seconds0.0.0.0:8002->8002/tcp, 6379/tcp, 0.0.0.0:18002->18002/tcpredis-8002c752fab6c6b8redis:5.0.9-buster"docker-entrypoint.s鈥 9 seconds agoUp 8 seconds0.0.0.0:8001->8001/tcp, 6379/tcp, 0.0.0.0:18001->18001/tcpredis-8001