1. 准备reids镜像

docker pull redis
docker images

REPOSITORY              TAG       IMAGE ID       CREATED        SIZE
redis                   latest    87c26977fd90   3 weeks ago    113MB

2. 创建自定义网络
为方便各redis容器之间的通信连接,可以使用自定义网络:

docker network create redisnet --subnet 172.18.0.0/16
7c54ac31eab5af3166ff83d72a8f15d79a5ef89cd64cb46441b953779b588662

docker network ls
NETWORK ID     NAME       DRIVER    SCOPE
6e0195b65225   bridge     bridge    local
62cd016ed66a   host       host      local
fc650e2a675e   none       null      local
7c54ac31eab5   redisnet   bridge    local

3. 创建redis集群目录,或者编写脚本创建

目录和ip记得修改成自己的!

compose docker 部署redis 集群 docker redis集群搭建_redis集群


参数解析:

参数名

含义

参数值

port

redis 端口号

端口号,6379

bind

ip 访问白名单

ip , 0.0.0.0表示任意ip

cluster-enabled

是否开启集群模式

yes/no

cluster-config-file

请注意,尽管有此选项的名称,但这不是用户可编辑的配置文件,而是Redis群集节点每次发生更改时自动保留群集配置(基本上为状态)的文件,以便能够 在启动时重新读取它。总之就是照着写,不用管,是redis自己用的

nodes.conf

cluster-node-timeout

Redis群集节点可以不可用的最长时间,而不会将其视为失败。 如果主节点超过指定的时间不可达,它将由其从属设备进行故障切换

毫秒数

cluster-announce-ip

redis

端口号

bind

集群节点的ip。个人理解是,集群中的node信息,存的就是这个ip。客户端就是在选择好目标节点后会根据这个ip向目标节点发送命令。所以,如果要公网访问,那这里的ip要填写成公网IP地址。如果是局域网访问,那就填局域网ip即可。总之,就是要填写客户端能够到达的ip

ip地址

cluster-announce-port

集群节点的端口号

端口号

cluster-announce-bus-port

Redis集群通过总线进行节点间的数据交换,每个Redis节点都会开辟一个额外端口与总线进行TCP连接,以二进制形式进行数据交换

一般是Redis port加上10000

appendonly

是否开启redis的持久化

yes/no

每个节点的redis.conf都得添加,对应配置文件如下:

# ip,redis端口和集群端口改成自己的!
cat redis.conf

port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.18.0.11
cluster-announce-port 6381
cluster-announce-bus-port 16381
appendonly yes

自己本地创建的目录结构如下,3个主节点3个从节点共6个文件目录,红框框住的是redis集群运行起来后自动添加的文件(还会生成 dump.rdb 文件,由于时间关系没等到生成该文件),这些文件不用管,只需要配置好redis.conf 即可。

compose docker 部署redis 集群 docker redis集群搭建_redis集群_02


4. 启动redis镜像,创建docker容器

docker run -p 6381:6379 -p 16381:16379 --name redis01 -v /opt/redis/redis-cluster/redis81/data:/data -v /opt/redis/redis-cluster/redis81/conf/redis.conf:/etc/redis/redis.conf -d -it --net redisnet --ip 172.18.0.11 redis redis-server /etc/redis/redis.conf;
docker run -p 6382:6379 -p 16382:16379 --name redis02 -v /opt/redis/redis-cluster/redis82/data:/data -v /opt/redis/redis-cluster/redis82/conf/redis.conf:/etc/redis/redis.conf -d -it --net redisnet --ip 172.18.0.12 redis redis-server /etc/redis/redis.conf;
docker run -p 6383:6379 -p 16383:16379 --name redis03 -v /opt/redis/redis-cluster/redis83/data:/data -v /opt/redis/redis-cluster/redis83/conf/redis.conf:/etc/redis/redis.conf -d -it --net redisnet --ip 172.18.0.13 redis redis-server /etc/redis/redis.conf;
docker run -p 6384:6379 -p 16384:16379 --name redis04 -v /opt/redis/redis-cluster/redis84/data:/data -v /opt/redis/redis-cluster/redis84/conf/redis.conf:/etc/redis/redis.conf -d -it --net redisnet --ip 172.18.0.14 redis redis-server /etc/redis/redis.conf;
docker run -p 6385:6379 -p 16385:16379 --name redis05 -v /opt/redis/redis-cluster/redis85/data:/data -v /opt/redis/redis-cluster/redis85/conf/redis.conf:/etc/redis/redis.conf -d -it --net redisnet --ip 172.18.0.15 redis redis-server /etc/redis/redis.conf;
docker run -p 6386:6379 -p 16386:16379 --name redis06 -v /opt/redis/redis-cluster/redis86/data:/data -v /opt/redis/redis-cluster/redis86/conf/redis.conf:/etc/redis/redis.conf -d -it --net redisnet --ip 172.18.0.16 redis redis-server /etc/redis/redis.conf;

compose docker 部署redis 集群 docker redis集群搭建_docker_03


5. 创建redis集群

redis-cli --cluster create 172.18.0.11:6379 172.18.0.12:6379 172.18.0.13:6379 172.18.0.14:6379 172.18.0.15:6379 172.18.0.16:6379 --cluster-replicas 1

compose docker 部署redis 集群 docker redis集群搭建_redis集群_04


6. 进入到容器内,连接redis集群,正常使用

# 先进入容器
docker exec -it redis01 /bin/bash

# 在连接redis集群, "-c" 表示连接集群
redis-cli -c -h 172.18.0.11 -p 6379

# 查看集群信息,三种都可以
172.18.0.11:6379> cluster info
172.18.0.11:6379> cluster nodes
172.18.0.11:6379> info replication

# 使用redis
172.18.0.11:6379> keys *
(empty array)

7. 如何删除已创建的redis集群?
 7.1 直接停止并删除redis容器

docker rm $(docker ps -aq)

 7.2 删除宿主机的所有redis节点下的appendonly.aof 文件、dump.rdb 文件以及nodes.conf 文件

compose docker 部署redis 集群 docker redis集群搭建_redis_05


 7.3 重新拉起redis容器,并创建集群