Redis Cluster 是一个提供在多个 Redis 节点间共享数据的程序集。 Redis Cluster 并不支持处理多个 keys 的命令,因为这需要在不同的节点间移动数据,所以达不到像 Redis 那样的性能,在高负载的情况下可能会导致不可预料的错误。 Redis Cluster 集群通过分区来提供一定程度的可用性,在实际环境中当某个节点宕机或者不可达的情况下继续处理命令。

❗注意 Redis 配置文件里必须要设置 bind 0.0.0.0,这是允许其他IP可以访问当前 Redis 。如果不设置这个参数,就不能组建 Redis 集群。

获取Redis镜像

  1. docker pull nivinivin/redis

创建redis集群网络

  1. docker network create --subnet=172.19.0.0/16 redis_net

创建6节点Redis容器

  1. docker run -it -d --name redis1 -p 6001:6379 -p 16001:16379 --net=redis_net --ip 172.19.0.2 nivinivin/redis bash
  2. docker run -it -d --name redis2 -p 6002:6379 -p 16002:16379 --net=redis_net --ip 172.19.0.3 nivinivin/redis bash
  3. docker run -it -d --name redis3 -p 6003:6379 -p 16003:16379 --net=redis_net --ip 172.19.0.4 nivinivin/redis bash
  4. docker run -it -d --name redis4 -p 6004:6379 -p 16004:16379 --net=redis_net --ip 172.19.0.5 nivinivin/redis bash
  5. docker run -it -d --name redis5 -p 6005:6379 -p 16005:16379 --net=redis_net --ip 172.19.0.6 nivinivin/redis bash
  6. docker run -it -d --name redis6 -p 6006:6379 -p 16006:16379 --net=redis_net --ip 172.19.0.7 nivinivin/redis bash

❗注意 如果6个节点的端口号分别是6001,6002,6003,6004,6005,6006。那么防火墙需要打开这个6个端口号,并且还需要打开16001,16002,16003,16004,16005,16006这6个集群总线端口

启动6节点Redis容器

进入redis1节点容器修改配置

  1. docker exec -it redis1 bash
  2. cd /home/redis
  3. vim redis.conf
  4. # 添加下面三行配置
  5. # cluster-announce-ip XXX.XXX.XXX.XXX 宿主机真实IP
  6. # cluster-announce-port 6001
  7. # cluster-announce-bus-port 16001
  8. redis-server ./redis.conf

进入redis2节点容器修改配置

  1. docker exec -it redis2 bash
  2. cd /home/redis
  3. vim redis.conf
  4. #添加下面三行配置
  5. #cluster-announce-ip XXX.XXX.XXX.XXX 宿主机真实IP
  6. #cluster-announce-port 6002
  7. #cluster-announce-bus-port 16002
  8. redis-server ./redis.conf

进入redis3节点容器修改配置

  1. docker exec -it redis3 bash
  2. cd /home/redis
  3. vim redis.conf
  4. #添加下面三行配置
  5. #cluster-announce-ip XXX.XXX.XXX.XXX 宿主机真实IP
  6. #cluster-announce-port 6003
  7. #cluster-announce-bus-port 16003
  8. redis-server ./redis.conf

进入redis4节点容器修改配置

  1. docker exec -it redis4 bash
  2. cd /home/redis
  3. vim redis.conf
  4. #添加下面三行配置
  5. #cluster-announce-ip XXX.XXX.XXX.XXX 宿主机真实IP
  6. #cluster-announce-port 6004
  7. #cluster-announce-bus-port 16004
  8. redis-server ./redis.conf

进入redis5节点容器修改配置

  1. docker exec -it redis5 bash
  2. cd /home/redis
  3. vim redis.conf
  4. #添加下面三行配置
  5. #cluster-announce-ip XXX.XXX.XXX.XXX 宿主机真实IP
  6. #cluster-announce-port 6005
  7. #cluster-announce-bus-port 16005
  8. redis-server ./redis.conf

进入redis6节点容器修改配置

  1. docker exec -it redis6 bash
  2. cd /home/redis
  3. vim redis.conf
  4. #添加下面三行配置
  5. #cluster-announce-ip XXX.XXX.XXX.XXX 宿主机真实IP
  6. #cluster-announce-port 6006
  7. #cluster-announce-bus-port 16006
  8. redis-server ./redis.conf

创建集群

  1. #在redis1节点上执行下面的指令
  2. cd /home/redis
  3. #创建集群(如果是宿主机共享模式,请使用宿主机的真实IP和端口号)
  4. ./redis-trib.rb create --replicas 1 172.19.0.2:6379 172.19.0.3:6379 172.19.0.4:6379 172.19.0.5:6379 172.19.0.6:6379 172.19.0.7:6379