Redis 分布式



一、集群的意义

1、 性能
2、 扩展
3、 可用性、 安全

二、Redis主从复制

replicaof 192.168.44.186 6379
无盘复制 repl-diskless-sync=no
适用于master节点所在机器磁盘性能较差但网络宽带较充裕的场景
主从复制的不足
 - 没有解决高可用问题
 - 需要手动切换主从

三、Sentinel哨兵

1.高可用思路

目标:
服务端: 自动切换主从
客户端: 自动发现路由

2.Sentinel

是一个特殊状态的Redis服务监控master/slave并且相互监控

3.Sentinel工作原理

1、 主观下线与客观下线
2、 Raft算法

4.故障转移

master选举因素
1、 如果与哨兵连接断开的比较久, 超过了某个阈值, 就直接失去了选举权。
2、 如果拥有选举权,那就看谁的优先级高, 这个在配置文件里可以设置 (replica-priority 100) , 数值越小优先级越高。
3、如果优先级相同, 就看谁从master中复制的数据最多(复制偏移量最大) , 选最多的那个
4、 如果复制数量也相同,就选择进程id最小的那个。

5.不足

主从切换的过程中会丢失数据, 因为只有一个master。
只能单点写, 没有解决水平扩容的问题。

四、Redis分布式方案

1.Redis Cluster 故障转移

1.slave发现自己的master变为FAIL
2.将自己记录的集群currentEpoch加1, 并广播FAILOVER_AUTH_REQUEST信息
3.其他节点收到该信息, 只有master响应, 判断请求者的合法性, 并发送FAILOVER_AUTH_ACK, 对每一个epoch只发送一次ack
4.尝试failover的slave收集FAILOVER_AUTH_ACK
5.超过半数后变成新Master
6.广播Pong通知其他集群节点
2.Redis Cluster 特点

  1. 无中心架构。
  2. 数据按照slot存储分布在多个节点, 节点间数据共享, 可动态调整数据分布。
  3. 可扩展性, 可线性扩展到1000个节点(官方推荐不超过1000个) , 节点可动态添加或删除。
  4. 高可用性, 部分节点不可用时, 集群仍可用。 通过增加Slave做standby数据副本, 能够实现故障自动failover, 节点之间通过gossip协议交换状态信息, 用投票机制完成Slave到Master的角色提升。
  5. 降低运维成本, 提高系统的扩展性和可用性
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值