知识点

  • redis集群的原理是划分16384(2^14)个槽,这些槽会完全分布到集群中主节点上
  • 写入时,对key进行hash找到对应的槽,然后连接拥有该槽的主节点进行写入
  • 读取和写入类似,找到保存key的主节点,然后连接读取
  • 集群元数据使用Gossip协议和Raft算法
  • Redis5.0之后不再使用redis-trib.rb工具管理集群,改为redis-cli —cluster

    准备配置文件

    cluster-1.conf
    1. # 绑定ip
    2. bind 192.168.124.25
    3. # 监听端口
    4. port 9010
    5. # 开启集群
    6. cluster-enabled yes
    7. # 判定节点不可达的毫秒数
    8. cluster-node-timeout 15000
    9. # 保存集群节点自动生成的配置
    10. cluster-config-file "cluster-1.conf"
    11. # 开启AOF
    12. appendonly yes
    13. # 设置AOF文件名
    14. appendfilename "cluster-1.aof"
    15. # 设置RDB文件名
    16. dbfilename "cluster-1.rdb"
    cluster-2.conf~cluster-6.conf与cluster-1.conf类似,只需修改port、cluster-config-file、appendfilename、dbfilename四项即可,故不再列出。

启动集群

我们首先需要启动这六个节点

  1. docker run -d --name redis-cluster-1-9010 --net=host \
  2. -v $PWD/conf/cluster-1.conf:/etc/redis.conf \
  3. -v $PWD/data:/data redis redis-server /etc/redis.conf && \
  4. docker run -d --name redis-cluster-2-9011 --net=host \
  5. -v $PWD/conf/cluster-2.conf:/etc/redis.conf -v $PWD/data:/data redis redis-server /etc/redis.conf && \
  6. docker run -d --name redis-cluster-3-9012 --net=host \
  7. -v $PWD/conf/cluster-3.conf:/etc/redis.conf \
  8. -v $PWD/data:/data redis redis-server /etc/redis.conf && \
  9. docker run -d --name redis-cluster-4-9013 --net=host \
  10. -v $PWD/conf/cluster-4.conf:/etc/redis.conf \
  11. -v $PWD/data:/data redis redis-server /etc/redis.conf && \
  12. docker run -d --name redis-cluster-5-9014 --net=host \
  13. -v $PWD/conf/cluster-5.conf:/etc/redis.conf \
  14. -v $PWD/data:/data redis redis-server /etc/redis.conf && \
  15. docker run -d --name redis-cluster-6-9015 --net=host \
  16. -v $PWD/conf/cluster-6.conf:/etc/redis.conf \
  17. -v $PWD/data:/data redis redis-server /etc/redis.conf

然后利用redis-cli将这六个节点组成集群,集群使用一主一从的模式保证高可用

  1. /usr/local/redis-5.0.5/src/redis-cli --cluster
  2. \create 192.168.124.25:9010 192.168.124.25:9011 192.168.124.25:9012
  3. \ 192.168.124.25:9013 192.168.124.25:9014 192.168.124.25:9015
  4. \--cluster-replicas 1

如果你像我一样所有节点都在一台主机上的话,这时候redis会报警告,输入yes继续就好

集群创建完成后检查一下集群的完整性

  1. redis-cli --cluster check 192.168.124.25:9010

结果如下:

192.168.124.25:9010 (d8aa982d…) -> 0 keys | 5461 slots | 1 slaves. 192.168.124.25:9012 (6975af42…) -> 0 keys | 5462 slots | 1 slaves.

192.168.124.25:9011 (9206e021…) -> 0 keys | 5461 slots | 1 slaves.

[OK] 0 keys in 3 masters.

0.00 keys per slot on average.

Performing Cluster Check (using node 192.168.124.25:9010)

M: d8aa982d1bc65e07c8c02fecadd420f695f2ddd2 192.168.124.25:9010

slots:[1010-5460],[10923-11932] (5461 slots) master

1 additional replica(s)

S: 10e67a1439fb0a7f703e6f20d322dccdf70be4aa 192.168.124.25:9014

slots: (0 slots) slave

replicates d8aa982d1bc65e07c8c02fecadd420f695f2ddd2

M: 6975af42782538706be1a81bfa5b6b5a08bd8724 192.168.124.25:9012

slots:[0-1009],[5461],[11933-16383] (5462 slots) master

1 additional replica(s)

S: e9b82944f84db2203a4fd9072b40ce91b934a183 192.168.124.25:9015

slots: (0 slots) slave

replicates 9206e021fa265b1cf7dc37ba94df304587e6b209

M: 9206e021fa265b1cf7dc37ba94df304587e6b209 192.168.124.25:9011

slots:[5462-10922] (5461 slots) master

1 additional replica(s)

S: d5d4382da4ba93489a51c31890a916d573a39b96 192.168.124.25:9013

slots: (0 slots) slave

replicates 6975af42782538706be1a81bfa5b6b5a08bd8724

[OK] All nodes agree about slots configuration.

Check for open slots…

Check slots coverage…

[OK] All 16384 slots covered.

集群扩展

待续

集群收缩

待续