让我们尝试运行Redis Cluster

Redis Cluster 是什么?

Redis集群是一种通过组合多个Redis实例来实现分片(水平分割)和复制的技术。

    • Redisインスタンス一つをノードと呼ぶ。

 

    • 0番~16383番まで存在するSlotをN分割し、それぞれのシャードに割り当てるシャーディング(水平分割)を行う。

 

    それぞれのシャードには書き込み可能なマスターノードと読み取り専用のスレーブノードの二種類を割り当てることができ、可用性を高めることができる。

让我们试着做一下。

创建以下类型的docker-compose文件。准备了六个服务,命名为redis1到redis6。

version: '3.7'
services:
  redis1:
    image: redis

    volumes:
      - "./redis1:/etc/redis"
    command: "/etc/redis/redis.conf"
  redis2:
    image: redis
    volumes:
      - "./redis2:/etc/redis"      
    command: "/etc/redis/redis.conf"
  redis3:
    image: redis
    volumes:
      - "./redis3:/etc/redis"      
    command: "/etc/redis/redis.conf"
  redis4:
    image: redis
    volumes:
      - "./redis4:/etc/redis"      
    command: "/etc/redis/redis.conf"
  redis5:
    image: redis
    volumes:
      - "./redis5:/etc/redis"      
    command: "/etc/redis/redis.conf"
  redis6:
    image: redis
    volumes:
      - "./redis6:/etc/redis"      
    command: "/etc/redis/redis.conf"

为每个指定的redis.conf在同一个目录下准备redis1/redis.conf,redis2/redis.conf,redis3/redis.conf,redis4/redis.conf,redis5/redis.conf,redis6/redis.conf。

每个内容都是共同的,并且指定为cluster-enabled和端口号。

cluster-enabled yes
port 6379

既然准备到这一步了,就试着执行docker-compose吧。

docker compose up -d

这样就有了6个redis实例。我想将它们转化为Redis集群,但需要指定每个实例的IP地址。使用dig命令获取它们。从任何一个bash中执行以下命令。

apt-get update
apt install dnsutils
seq 1 6 | xargs -i dig redis{} | grep redis

通过此操作可以得到以下输出。

; <<>> DiG 9.16.27-Debian <<>> redis1
;redis1.                                IN      A
redis1.                 600     IN      A       172.27.0.4
; <<>> DiG 9.16.27-Debian <<>> redis2
;redis2.                                IN      A
redis2.                 600     IN      A       172.27.0.6
; <<>> DiG 9.16.27-Debian <<>> redis3
;redis3.                                IN      A
redis3.                 600     IN      A       172.27.0.7
; <<>> DiG 9.16.27-Debian <<>> redis4
;redis4.                                IN      A
redis4.                 600     IN      A       172.27.0.5
; <<>> DiG 9.16.27-Debian <<>> redis5
;redis5.                                IN      A
redis5.                 600     IN      A       172.27.0.2
; <<>> DiG 9.16.27-Debian <<>> redis6
;redis6.                                IN      A
redis6.                 600     IN      A       172.27.0.3

使用这个来指定创建Redis Cluster。

redis-cli --cluster create 172.27.0.5:6379 172.27.0.7:6379 172.27.0.3:6379 172.27.0.4:6379 172.27.0.6:6379 172.27.0.2:6379

在这种状态下,会进行如下所述的指定。

Master[0] -> Slots 0 - 2730
Master[1] -> Slots 2731 - 5460
Master[2] -> Slots 5461 - 8191
Master[3] -> Slots 8192 - 10922
Master[4] -> Slots 10923 - 13652
Master[5] -> Slots 13653 - 16383
M: 825509db68aa9f08ef94e50dc8fde3292df48792 172.27.0.5:6379
   slots:[0-2730] (2731 slots) master
M: 5e0f25f4d77ec190cce3cd31cd5e6b6634572d83 172.27.0.7:6379
   slots:[2731-5460] (2730 slots) master
M: a41e612e80b1050d27bc962a12472b9ca0503eaf 172.27.0.3:6379
   slots:[5461-8191] (2731 slots) master
M: 1b704bc2d6e0d956253a4ba684cf0c82c833fc45 172.27.0.4:6379
   slots:[8192-10922] (2731 slots) master
M: bbb821b88d4b6de154eff17d289e810360e859ff 172.27.0.6:6379
   slots:[10923-13652] (2730 slots) master
M: 775fc4dcece3930993c000b3d04034f6685d0a92 172.27.0.2:6379
   slots:[13653-16383] (2731 slots) master

有6个节点,将0-16383个槽位分割。这6个节点都是主节点。

取消这个,然后再尝试添加–cluster-replicas 1选项。

redis-cli --cluster create 172.27.0.5:6379 172.27.0.7:6379 172.27.0.3:6379 172.27.0.4:6379 172.27.0.6:6379 172.27.0.2:6379 --cluster-replicas 1

从这里开始进行以下指定。

Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 172.27.0.6:6379 to 172.27.0.5:6379
Adding replica 172.27.0.2:6379 to 172.27.0.7:6379
Adding replica 172.27.0.4:6379 to 172.27.0.3:6379
M: 825509db68aa9f08ef94e50dc8fde3292df48792 172.27.0.5:6379
   slots:[0-5460] (5461 slots) master
M: 5e0f25f4d77ec190cce3cd31cd5e6b6634572d83 172.27.0.7:6379
   slots:[5461-10922] (5462 slots) master
M: a41e612e80b1050d27bc962a12472b9ca0503eaf 172.27.0.3:6379
   slots:[10923-16383] (5461 slots) master
S: 1b704bc2d6e0d956253a4ba684cf0c82c833fc45 172.27.0.4:6379
   replicates a41e612e80b1050d27bc962a12472b9ca0503eaf
S: bbb821b88d4b6de154eff17d289e810360e859ff 172.27.0.6:6379
   replicates 825509db68aa9f08ef94e50dc8fde3292df48792
S: 775fc4dcece3930993c000b3d04034f6685d0a92 172.27.0.2:6379
   replicates 5e0f25f4d77ec190cce3cd31cd5e6b6634572d83

这次,通过三个主节点将插槽分成了三个部分,剩下的三个部分被复制为从节点,以对应相应的主节点。