1
0

6.Redis Cluster集群.md 3.0 KB

Redis Cluster集群


传统Redis集群存在那些问题

  1. Redis哨兵集群模式,每个节点都保存全量同步数据,冗余的数据比较多;
  2. 只能允许一个主节点
  3. 中心化模式

而在Redis Cluster模式中集群中采用分片集群模式,可以减少冗余数据,缺点就是构建该集群模式成本非常高。

  • 去中心化模式

传统RedisCluster集群的原理

Redis3.0开始官方推出了集群模式 RedisCluster,原理采用hash槽的概念,预先分配16384个卡槽,并且将该卡槽分配给具体服务的节点;

通过key进行crc16(key)%16384获取余数,余数就是对应的卡槽的位置,一个卡槽可以存放多个不同的key,从而将读或者写转发到该卡槽的服务的节点。 最大的有点:动态扩容、缩容。

  1. 为每个server节点部署从节点,保证高可用
  2. 一个卡槽可以分配不同的key
  3. 可以通过重定向来找到对应的server
  4. 卡槽(数据库的具体分表)其实就是服务器位置的标识符,从而实现数据均摊存放
  5. 动态的实现扩容和缩容
# 自动分配卡槽
redis-cli --cluster create  192.168.245.20:7000  192.168.245.20:7001  192.168.245.20:7002  192.168.245.20:7003  192.168.245.20:7004  192.168.245.20:7005  --cluster-replicas 1
# 默认不转发,应该使用集群模式连接
# 修改为Redis的集群方式连接
redis-cli -h 192.168.245.20 -p 7000 -c

image-20220522144243791

扩容

如果我们新增一个节点,我们需要重新分配卡槽。数据会一起迁移到主节点

redis-cli --cluster add-node  新增集群地址:端口  集群中已经存在的任意一台连接地址:端口 
redis-cli --cluster add-node 192.168.245.20:7006   192.168.245.20:7000  

image-20220522155302372

原因:redis配置文件复用,但是数据不同步

解决办法:将rdb文件和aof文件改个名字

image-20220522161015869

分配卡槽

# 扩容从节点:
redis-cli --cluster add-node   192.168.245.20:7007  192.168.245.20:7000  --cluster-slave   --cluster-master-id  583ad82a8582733f278d1afb740dd3a5ca89c6ef
# 如何分配卡槽节点
redis-cli --cluster reshard  192.168.245.20:7000
# 输入需要接受的id

image-20220522162300489

RedisCluster master宕机效果

如果master宕机之后,会自动的在从节点会顺利的选为主节点;当原来的主节点在恢复启动的时候会变为从节点;

RedisCluster集群模式缩容节点

redis-cli --cluster  reshard  192.168.245.20:7000  --cluster-from   需要缩容的卡槽节点  --cluster-to  接受卡槽的节点  --cluster-slots 4096


redis-cli --cluster  reshard  192.168.245.20:7000  --cluster-from   9299bfa1bb47dc7d53ed737f32bd0630ff5c8136  --cluster-to bdd488f3e42b2b05649856c9d59e2fc8acec7ed1  --cluster-slots 4096