Docker 搭建 Redis Cluster集群 每一步都带有操作图、命令!!!
一、环境
- 阿里云服务器 CentOS 8
- docker版本为20.10.7
- redis 镜像 (拉取为默认最新镜像)


大致步骤:😜
- 下载Redis镜像
- 编写Redis配置文件
- 启动Redis 容器
- 创建Redis Cluster 集群。
- 进行实际测试
二、前期准备
2.1、搜索、拉取redis镜像
```shell docker search redis docker pull redis
<br /><a name="fOYCe"></a>### 2.2、Docker 容器网络1. 创建虚拟网卡😄创建虚拟网卡,主要是用于redis-cluster能于外界进行网络通信,一般常用桥接模式。```shelldocker network create myredis
- 查看Docker 网卡信息
docker network ls

3、查看dockerr网络详细信息docker network inspect myredis

4、补充(删除网卡信息、帮助命令)docker network rm myredis #删除网卡命令 多个中间 空格隔开docker network --help #显示可带参数等
2.3、编写配置文件
此处用到了一点 shlle 编程中 的一些命令,让我们操作更加便利。😃 ```shell
for port in $(seq 6379 6384); do mkdir -p /home/redis/node-${port}/conf touch /home/redis/node-${port}/conf/redis.conf cat << EOF > /home/redis/node-${port}/conf/redis.conf port ${port} requirepass 1234 masterauth 1234 bind 0.0.0.0 protected-mode no daemonize no appendonly yes cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 cluster-announce-ip 114.115.158.185 cluster-announce-port ${port} cluster-announce-bus-port 1${port} EOF done
命令解释:😊- port:节点端口;- requirepass:设置密码,访问时需要验证- masterauth: 当master服务设置了密码保护时,slave服务连接master的密码。这个配置很重要,当初我没配置,然后master挂了,slave没有上位。原因就是没配置这个参数,导致slave复制master数据的时候,因为设置了密码,导致不能复制数据,上位失败。如果开启了密码验证模式,所有的主从节点必须配置masterauth,因为某一个节点宕机重启之后,会自动变为从节点,此时如果想要从master复制数据,就必须需要主节点的密码- protected-mode:保护模式,默认值 yes,即开启。开启保护模式以后,需配置 bind ip 或者设置访问密码;关闭保护模式,外部网络可以直接访问;- daemonize:是否以守护线程的方式启动(后台启动),默认 no;- appendonly:是否开启 AOF 持久化模式,默认 no;- cluster-enabled:是否开启集群模式,默认 no;- cluster-config-file:集群节点信息文件;- cluster-node-timeout:集群节点连接超时时间;节点超时时间,单位毫秒,设置一个较小的超时时间,目的是为了后面测试自动故障转移的效果,默认15000- cluster-announce-ip:集群节点 IP- 注意: 如果你想要你的redis集群可以供外网访问,这里直接填 服务器的IP 地址即可- 如若为了安全,只是在服务器内部进行访问,这里还需要做一些修改。- cluster-announce-port:集群节点映射端口;- cluster-announce-bus-port:集群节点总线端口。**redis 在官网上有说明为什么需要映射两个端口** :[redis官网](https://link.juejin.cn/?target=https%3A%2F%2Fredis.io%2Ftopics%2Fcluster-tutorial)<br />---执行命令完:<br /><br />我们通过tree 命令查看目录结构:(如果没有 tree 命令先安装 yum install -y tree)<br />---接下来就是启动容器拉<a name="etlac"></a>## 三、启动容器<a name="NiQ0U"></a>### 3.1、启动redis容器因为要启动六个容器,一个一个去启动,肯定是麻烦丫。就再次借助shell编程的力量。```shellfor port in $(seq 6379 6384); \do \docker run -it -d -p ${port}:${port} -p 1${port}:1${port} \--privileged=true -v /home/redis/node-${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \--privileged=true -v /home/redis/node-${port}/data:/data \--restart always --name redis-${port} --net myredis \--sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.confdone
解释:🤑
- -it:交互
- -d:后台运行,容器启动完成后打印容器
- —privileged:是否让docker 应用容器 获取宿主机root权限(特殊权限-)
- -p :端口映射
- -v:文件挂载
- —sysctl参数来设置系统参数,通过这些参数来调整系统性能
- —restart always:在容器退出时总是重启容器
- —name :给容器取名
- —net myredis :使用我们创建的虚拟网卡 (想详细了解,可以去看看Docker 网络方面知识)
执行完成:
亦可使用docker ps -a 查看运行中容器。
可以看到已全部启动成功。
👨🔧
3.2、创建Redis Cluster集群
1、进入redis-6379 容器
docker exec -it redis-6379 /bin/bash
2、创建集群
redis-cli -a 之前设置的密码 --cluster create 配置文件中的IP地址:6379 IP地址:6380 IP地址:6381 IP地址:6382 IP地址:6383 IP地址:6384 --cluster-replicas 1 复制代码我输入的是redis-cli --cluster create 114.115.158.185:6379 114.115.158.185:6380 114.115.158.185:6381 114.115.158.185:6382 114.115.158.185:6383 114.115.158.185:6384 --cluster-replicas 1 -a 1234
3、查看节点相关信息
进入容器后,通过redis-cli -p 6379 -c -a 1234,进入redis。👼
输入cluster info 查看集群信息
也可输入cluster nodes 查看所有节点相关信息
四、测试
4.1、本机测试
4.2、外网测试



五、上述执行代码汇总
创建网络docker network create myredis创建配置文件及文件夹for port in $(seq 6379 6384);domkdir -p /home/redis/node-${port}/conftouch /home/redis/node-${port}/conf/redis.confcat << EOF > /home/redis/node-${port}/conf/redis.confport ${port}requirepass 1234bind 0.0.0.0protected-mode nodaemonize noappendonly yescluster-enabled yescluster-config-file nodes.confcluster-node-timeout 5000cluster-announce-ip 59.110.213.162cluster-announce-port ${port}cluster-announce-bus-port 1${port}EOFdone启动容器for port in $(seq 6379 6384); \do \docker run -it -d -p ${port}:${port} -p 1${port}:1${port} \--privileged=true -v /home/redis/node-${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \--privileged=true -v /home/redis/node-${port}/data:/data \--restart always --name redis-${port} --net myredis \--sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.confdone进入容器docker exec -it redis-6379 /bin/bash创建3主3从redis-cli --cluster create 59.110.213.162:6379 59.110.213.162:6380 59.110.213.162:6381 59.110.213.162:6382 59.110.213.162:6383 59.110.213.162:6384 --cluster-replicas 1 -a 1234进入即可redis-cli -p 6379 -c -a 1234
六、注意
如果使用阿里云、腾讯云、华为云等服务器需要开通安全组6379-6884、16379-16384端口

