创建Dokcer网络

为了让后面创建的所有容器都在一个网络内,这里创建一个docker网络

docker network create redis --subnet 172.42.0.0/16

创建持久化目录

用shell脚本循环创建方便一点,这里创建了6个目录

for port in $(seq 1 6); \
do \
mkdir -p /data/redis/node-${port}/{conf,data}
touch /data/redis/node-${port}/conf/redis.conf
cat << EOF >/data/redis/node-${port}/conf/redis.conf
port 6379 
bind 0.0.0.0
dir /data
#masterauth(设置集群节点间访问密码,跟下面一致)
masterauth angernb666
#requirepass(设置redis访问密码,密码可不加,如果加了的话创建集群时必须有-a参数,连接时也要加密码)
requirepass angernb666
cluster-enabled yes 
cluster-config-file nodes.conf
cluster-node-timeout 5000
#配置完成后仅本机可以访问,如需所有地址均可访问,需要配置成宿主机地址
cluster-announce-ip 172.42.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done

部署Redis

还是使用shell脚本循环部署

for port in $(seq 1 6); \
do
docker run -p 637${port}:6379 -p 1637${port}:16379 --name redis-${port} \
-v /data/redis/node-${port}/data:/data \
-v /data/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.42.0.1${port} redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf; \
done

使用命令查看容器是不是都创建成功了

docker ps -a

可以看到容器都创建成功了,接着进入容器开始初始化集群

#进入容器1
docker exec -it redis-1 /bin/sh
#创建集群,如果报IP错误可以退出容器查看实际IP,命令是:docker inspect 容器名或容器ID
redis-cli -a angernb666 --cluster create 172.42.0.11:6379 172.42.0.12:6379 172.42.0.13:6379 172.42.0.14:6379 172.42.0.15:6379 172.42.0.16:6379 --cluster-replicas 1
#输入yes就开始初始化集群了
#--cluster-replicas 后面的数字代表每个master的从节点数量,按照当前配置前三个节点会变为master后面三个会变为从节点
#查看集群信息

redis-cli -c -a angernb666
cluster info
三主三从

到这里集群就创建完成了