查看 centOS 版本 :

cat /etc/centos-release
CentOS Linux release 7.6.1810 (Core)

1.拉取redis image

docker pull redis

2.批量创建 redis配置文件脚本 createRedisConfig.sh

复制好像有点问题,最好先复制在文本里后再复制到shell里

#!/bin/sh

for port in $(seq 6380 6385);
do
mkdir -p /home/redisCluster/node-${port}/conf
touch /home/redisCluster/node-${port}/conf/redis.conf
cat  << EOF > /home/redisCluster/node-${port}/conf/redis.conf
#节点端口
port ${port}
#添加访问认证
requirepass 1234
#如果主节点开启了访问认证,从节点访问主节点需要认证
masterauth 1234
#保护模式,默认值 yes,即开启。开启保护模式以后,需配置 bind ip 或者设置访问密码;关闭保护模式,外部网络可以直接访问
protected-mode no
#bind 0.0.0.0
#是否以守护线程的方式启动(后台启动),默认 no
daemonize no
#是否开启 AOF 持久化模式,默认 no
appendonly yes
# 每秒钟备份
appendfsync everysec
# 对aof文件进行压缩时,是否执行同步操作
no-appendfsync-on-rewrite no
# 当目前aof文件大小超过上一次重写时的aof文件大小的100%时会再次进行重写
auto-aof-rewrite-percentage 100
# 重写前AOF文件的大小最小值 默认 64mb
auto-aof-rewrite-min-size 64mb
#是否开启集群模式,默认 no
cluster-enabled yes 
#集群节点信息文件
cluster-config-file nodes.conf
#群节点连接超时时间
cluster-node-timeout 5000
#集群节点 IP , hosts模式为宿主机的ip ,如果填docker分配的ip可能会导致部分节点跳转失败
cluster-announce-ip 192.168.152.129
#集群节点映射端口
cluster-announce-port ${port}
#集群节点总线端口
cluster-announce-bus-port 1${port}
# 日志配置
# debug:会打印生成大量信息,适用于开发/测试阶段
# verbose:包含很多不太有用的信息,但是不像debug级别那么混乱
# notice:适度冗长,适用于生产环境
# warning:仅记录非常重要、关键的警告消息
loglevel notice
# 日志文件路径
logfile "/data/redis.log"
EOF
done

3.批量创建docker脚本 operateDockerRedis.sh

复制好像有点问题,最好先复制在文本里后再复制到shell里

#!/bin/sh

## 首次创建并运行redis容器
if [ "$1" = "create" ]; then
        for port in $(seq 6380 6385);
        do
              docker run -di --restart always --name redis-${port} -e TZ=Asia/Shanghai -p ${port}:${port} -p 1${port}:1${port} -v /home/redisCluster/node-${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf -v /home/redisCluster/node-${port}/data:/data redis redis-server /usr/local/etc/redis/redis.conf
        done
fi

##停止redis容器
if [ "$1" = "stop" ]; then
        for port in $(seq 6380 6385);
        do
                docker stop redis-${port}
        done
fi

##启动已有的redis容器
if [ "$1" = "start" ]; then
        for port in $(seq 6380 6385);
        do
                docker start redis-${port}
        done
fi

## 删除redis容器
if [ "$1" = "rm" ]; then
        for port in $(seq 6380 6385);
        do
                docker rm redis-${port}
        done
fi

4.执行脚本

先执行创建redis.conf文件的脚本,在执行docker脚本

sh createRedisConfig.sh

sh operateDockerRedis.sh create

用docker ps -a 查看容器

redis arm版本 docker镜像 redis cluster docker_redis

4.进入容器,创建redis集群;

docker exec -it redis-6380 /bin/bash

redis-cli -a 1234 --cluster create 192.168.152.129:6380 192.168.152.129:6381 192.168.152.129:6382 192.168.152.129:6383 192.168.152.129:6384 192.168.152.129:6385 --cluster-replicas 1

redis arm版本 docker镜像 redis cluster docker_redis_02


我这里报错了,因为有之前的节点信息,删除各个容器下的 nodes.conf aof 和 rdb 文件

可以直接用 rm -f -r /data 删除整个data目录下的文件

redis arm版本 docker镜像 redis cluster docker_3c_03


重启容器后再进入容器,执行创建redis集群的命令,会出现如下提示:

root@fa71468ee927:/data# redis-cli -a 1234 --cluster create 192.168.152.129:6380 192.168.152.129:6381 192.168.152.129:6382 192.168.152.129:6383 192.168.152.129:6384 192.168.152.129:6385 --cluster-replicas 1
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.152.129:6384 to 192.168.152.129:6380
Adding replica 192.168.152.129:6385 to 192.168.152.129:6381
Adding replica 192.168.152.129:6383 to 192.168.152.129:6382
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 65da73706cb9d5325c8da00087d4eeed6b88bd5d 192.168.152.129:6380
   slots:[0-5460] (5461 slots) master
M: a2b755113e57c9293dbdbb03565ff97955f446b1 192.168.152.129:6381
   slots:[5461-10922] (5462 slots) master
M: de648ca757bf8a206fbafa64608f3647faa43cfc 192.168.152.129:6382
   slots:[10923-16383] (5461 slots) master
S: 1d7972efc461cf1470e66d37fc2c50f604d6dbf5 192.168.152.129:6383
   replicates de648ca757bf8a206fbafa64608f3647faa43cfc
S: d8f213f68ff4f0ce68a009b1c1e337c602b98758 192.168.152.129:6384
   replicates 65da73706cb9d5325c8da00087d4eeed6b88bd5d
S: 211edd660518b2a2a099cd6335c1609ab8d23bc3 192.168.152.129:6385
   replicates a2b755113e57c9293dbdbb03565ff97955f446b1
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
.
>>> Performing Cluster Check (using node 192.168.152.129:6380)
M: 65da73706cb9d5325c8da00087d4eeed6b88bd5d 192.168.152.129:6380
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 211edd660518b2a2a099cd6335c1609ab8d23bc3 192.168.152.129:6385
   slots: (0 slots) slave
   replicates a2b755113e57c9293dbdbb03565ff97955f446b1
S: 1d7972efc461cf1470e66d37fc2c50f604d6dbf5 192.168.152.129:6383
   slots: (0 slots) slave
   replicates de648ca757bf8a206fbafa64608f3647faa43cfc
M: a2b755113e57c9293dbdbb03565ff97955f446b1 192.168.152.129:6381
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
M: de648ca757bf8a206fbafa64608f3647faa43cfc 192.168.152.129:6382
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: d8f213f68ff4f0ce68a009b1c1e337c602b98758 192.168.152.129:6384
   slots: (0 slots) slave
   replicates 65da73706cb9d5325c8da00087d4eeed6b88bd5d
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

5.验证

redis arm版本 docker镜像 redis cluster docker_centos_04