1,准备

准备好redis镜像

docker pull redis

准备好集群网络

docker network create 172.19 --gateway 172.19.0.1 --subnet 172.19.0.0/24

redis集群官方建议最少6个节点,准备如下6个节点ip

172.19.0.11,172.19.0.12,172.19.0.21,172.19.0.22,172.19.0.31,172.19.0.32

准备如下文件

-rw-r--rw-. 1 root root  61K 4月  24 10:06 redis-cluster11.conf
-rw-r--rw-. 1 root root 9.5K 4月  24 11:35 redis-cluster11.log
-rw-r--rw-. 1 root root  61K 4月  24 10:58 redis-cluster12.conf
-rw-r--rw-. 1 root root 7.1K 4月  24 11:35 redis-cluster12.log
-rw-r--rw-. 1 root root  61K 4月  24 10:08 redis-cluster21.conf
-rw-r--rw-. 1 root root 9.5K 4月  24 11:35 redis-cluster21.log
-rw-r--rw-. 1 root root  61K 4月  24 10:59 redis-cluster22.conf
-rw-r--rw-. 1 root root 7.4K 4月  24 11:35 redis-cluster22.log
-rw-r--rw-. 1 root root  61K 4月  24 10:09 redis-cluster31.conf
-rw-r--rw-. 1 root root 9.8K 4月  24 11:35 redis-cluster31.log
-rw-r--rw-. 1 root root  61K 4月  24 10:59 redis-cluster32.conf
-rw-r--rw-. 1 root root 7.8K 4月  24 11:35 redis-cluster32.log

各个文件之后挂载到对应容器节点(配置文件,可从本地环境拷贝一份)

各个配置文件需要修改的主要参数:

logfile /var/log/redis.log
dir /data
#主从认证密码
masterauth 123.com
#本地认证密码
requirepass 123.com
cluster-enabled yes
cluster-config-file nodes-11.conf

各个节点配置唯一不同的地方在于最后一行,可以依次按节点命名(如上所示)

2,创建容器

for i in {11,12,21,22,31,32}
do
docker run -d --name redis-cluster$i --hostname redis-cluster$i --ip 172.19.0.$i --network 172.19 --restart unless-stopped -v /data/redis/conf/redis-cluster$i.conf:/etc/redis.conf -v /data/redis/conf/redis-cluster$i.log:/var/log/redis.log redis redis-server /etc/redis.conf
done

创建结果如下:

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS      NAMES
0926b0803caa   redis     "docker-entrypoint.s…"   35 minutes ago   Up 35 minutes   6379/tcp   redis-cluster32
dfd9a6a1baf5   redis     "docker-entrypoint.s…"   35 minutes ago   Up 35 minutes   6379/tcp   redis-cluster31
12b26ff7c35c   redis     "docker-entrypoint.s…"   35 minutes ago   Up 35 minutes   6379/tcp   redis-cluster22
f0b3c49afd8c   redis     "docker-entrypoint.s…"   36 minutes ago   Up 35 minutes   6379/tcp   redis-cluster21
677263b89606   redis     "docker-entrypoint.s…"   36 minutes ago   Up 36 minutes   6379/tcp   redis-cluster12
3118704df588   redis     "docker-entrypoint.s…"   36 minutes ago   Up 36 minutes   6379/tcp   redis-cluster11

3,创建集群

任意进入一个节点,执行如下命令

redis-cli --cluster create 172.19.0.11:6379 172.19.0.12:6379 172.19.0.21:6379 172.19.0.22:6379 172.19.0.31:6379 172.19.0.32:6379 --cluster-replicas 1 --pass 123.com

结果如下:

docker搭建redis集群(cluster)_cluster

输入 yes 并回车,结果如下

docker搭建redis集群(cluster)_docker_02

在当前节用redis终端登入redis节点

redis-cli -c --pass 123.com

执行cluster info

docker搭建redis集群(cluster)_cluster_03

可以看见集群相关信息

cluster_known_nodes:6 这一行确认集群有6个节点

执行 cluster nodes

docker搭建redis集群(cluster)_docker_04

可以看到,三主三从的相关信息,

比如,主节点是11,12,21;32是12的从节点,22是21的从节点,31是11的从节点

可以在任意节点执行 info replicaiton 来再次验证,比如在11节点

docker搭建redis集群(cluster)_集群_05

至此,redis集群搭建完毕。