利用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.136
redis版本:5.0.9
redis实例端口: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 https://download.docker.com/linux/centos/docker-ce.repoyum install docker-ce启动并加入开机启动systemctl start dockersystemctl enable docker由于docker默认是从国外拉取镜像,速度会比较慢,所以需要配置docker从国内的镜像网站拉取镜像,其配置步骤如下所示

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

文章插图
docker hub 镜像加速资源列表
将国内镜像网站添加到daemon.json配置文件
>/etc/docker/daemon.json{"registry-mirrors": ["https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://reg-mirror.qiniu.com","https://mirror.ccs.tencentyun.com"]}添加完成之后,需要重启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目录和配置文件【利用docker轻松搭建Redis-Cluster集群环境】由于这里需要配置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`; domkdir -p /data/redis_data/${port}/conf&& PORT=${port} envsubst < /data/docker_redis/redis_cluster.conf.template > /data/redis_data/${port}/conf/redis.conf&& mkdir -p /data/redis_data/${port}/data;done使用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); dodocker 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:/dataredis: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


推荐阅读