Redis高级——集群(Cluster)

什么是集群(Cluster)

Redis 集群是一个由多个主从节点群组成的分布式服务集群,数据分布在这些节点中,进行统一管理,对外呈现单机的服务效果


数据存储设计

Redis Cluster 采用虚拟槽分区,所有的 key 根据哈希函数映射到 0 ~ 16383个整数槽内

计算公式:slot = CRC16(key) & 16384

由于采用高质量的哈希算法,每个槽所映射的数据通常比较均匀

Redis 集群中,将存储空间总和等分为 16384 个槽,每一台主机保存若干个,key 通过哈希算法得到对应的槽编号,并存储到对应的主机的槽中

  • 当添加新的节点时,会将先前各个节点中取出部分槽,组成新的节点的槽空间
  • 当删除节点时,将删除节点的槽分散到现有的节点中

内部通讯设计

每一个节点中都存有一份各个节点中槽空间编号的信息

当某个节点收到数据请求时,计算得出该数据所在的槽编号

  • 若该槽编号恰好在该节点中(命中),返回数据即可
  • 若该槽编号不在该节点中(未命中),通过查询可知该槽编号对应的节点,直接访问对应节点即可


集群搭建

集群配置

对集群中的主从节点进行相应的配置

cluster-enabled yes
cluster-config-file nodes-端口号.conf
cluster-node-timeout 10000

cluster-enabled yes

表示开启集群功能,此 redis 实例作为集群的一个节点

cluster-config-file nodes-端口号.conf

指定集群配置文件,它是集群节点自动维护的文件,主要用于记录集群中的节点、槽相关信息等

cluster-node-timeout 10000

指定集群中节点的超时时限为 10 秒,超过这个时间,该节点就会被认为故障。如果主节点超过这个时间还是不可达,则它的从节点将启动故障迁移,升级成主节点

启动集群

使用 src 目录下的 redis-trib.rb 创建集群

./redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384

--replicas 1 参数表示为每个主节点创建一个从节点,后面跟着 6 个地址,自动识别前 3 个为 master ,后 3 个为 slave,如果为 --replicas 2 ,则前 2 个为 master ,后 4 个为 slave


集群下的存取值

客户端连接集群时 redis-cli 命令需要加上 -c 参数

执行写入命令时,会暗含一个对 key 进行哈希映射的过程,计算出 key 所属的槽编号,并将数据存储到对应的节点的槽中

执行读取命令时,同样暗含一个对 key 进行哈希映射的过程,并根据对应的槽编号,找到相应的节点进行读取

おすすめ

転載: blog.csdn.net/qq_25274377/article/details/120856555