一个基于 Docker 快速构建 redis 集群的小工具
前言
我在学习或者测试时,可能会用到 redis-cluster 环境,但当时手头没有的话得现搭,过程比较麻烦,所以搞了个 基于 Docker 快速构建 redis 集群的小工具。
集群原理就不赘述了,直接开始。
环境信息
CentOS 8
Docker 19.03.13
步骤
在 ~/ 下创建 redis-cluster 目录
cd ~/redis-cluster
1. 安装 docker 略
关闭防火墙再启动 docker
2 下载 redis 镜像
3 docker 创建虚拟网卡
1
| docker network create redis-net
|
因为redis 各容器节点要互相通信,且要与外界通信,所以选择 docker 的桥接模式,docker 虚拟网卡默认的就是桥接模式

4 创建 redis 集群通用配置模板
vim redis-cluster-tmp.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| #端口 port ${PORT}
#非保护模式 protected-mode no
#启用集群模式 cluster-enabled yes cluster-config-file nodes.conf
#超时时间 cluster-node-timeout 5000
#集群各节点IP地址 宿主机 IP cluster-announce-ip 192.168.1.10
#集群节点映射端口 cluster-announce-port ${PORT}
#集群总线端口 cluster-announce-bus-port 1${PORT}
#开启aof持久化策略 appendonly yes
#后台运行 docker 使用配置文件启动,这里一定要为 no, 或者注释掉,不能为 yes daemonize no
#进程号存储 pidfile /var/run/redis_${PORT}.pid
#集群加密 masterauth zhengyk requirepass zhengyk
|
4.创建 用 docker 构建 redis 的脚本: start-redis-cluster.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| #!/bin/bash #在~/redis-cluster下生成conf和data目标,并生成配置信息
for port in `seq 7002 7007`; do mkdir -p ./${port}/conf && PORT=${port} envsubst < ./redis-cluster-tmp.conf > ./${port}/conf/redis.conf && mkdir -p ./${port}/data; done
#创建6个redis容器 for port in `seq 7002 7007`; do docker run -d -it -p ${port}:${port} -p 1${port}:1${port} -v ~/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf -v ~/redis-cluster/${port}/data:/data --privileged=true --restart always --name redis-${port} --net redis-net --sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf; done
#打印出 docker 各个 redis ip for port in `seq 7002 7007`; do echo -n "$(docker inspect --format '{{ (index .NetworkSettings.Networks "redis-net").IPAddress }}' "redis-${port}")":${port}" "; done
|
5 授予 start-redis-cluster.sh 可执行权限并执行该脚本
1 2
| chmod 777 start-redis-cluster.sh ./start-redis-cluster.sh
|
控制台打印:

红框内的地址就是 我们创建的 6 台 redis 节点, 查看容器运行信息

6 将 6个redis 节点加入到集群中
进入到任意一个安装好的redis节点的bin目录,里面有个脚本对象 redis-cli ,然后执行集群创建
1
| docker exec -it redis-7002 /bin/bash
|
1 2 3
| #在容器内部 #-a zhengyk 是前面配置文件里的集群认证密码, -cluster-replicas 1 表示每个主节点有 1 个从节点 ./usr/local/bin/redis-cli --cluster create 172.18.0.2:7002 172.18.0.3:7003 172.18.0.4:7004 172.18.0.5:7005 172.18.0.6:7006 172.18.0.7:7007 --cluster-replicas 1 -a zhengyk
|
输入 yes ,redis 集群会自动分配 slot, 控制台打印

这样我们就基于 docker 快速创建了 一个 3 主 3 从的 redis 集群。
7 停止集群的脚本 stop-redis-cluster.sh
1 2 3 4
| #!/bin/bash docker stop redis-7002 redis-7003 redis-7004 redis-7005 redis-7006 redis-7007 docker rm redis-7002 redis-7003 redis-7004 redis-7005 redis-7006 redis-7007 rm -rf 7002 7003 7004 7005 7006 7007
|
最后附上所需的 配置文件和 启动、停止集群的脚本
redis-cluster-tmp.conf
start-redis-cluster.sh
stop-redis-cluster.sh