Redis cluster 目标
Redis Cluster 是分布式Redis, 按重要性排序, 需要实现以下几个目标:
- 高性能、可线性扩展至1000个节点。不使用代理, 没有异步复制, 不需要任何值的合并操作
- 比较高的写安全度: 系统尝试(以最大努力的方式)保留来自与大多数主节点连接的客户端的所有写入。通常有一些小窗口,确认的写入可能会丢失,只有小部分分区会丢失已确认写入的窗口。
- 可用性: Redis集群能够在大多数主节点可访问的分区中生存,并且对于每个不再可访问的主节点,至少有一个可访问的从节点。此外,使用副本迁移时, 当某一个主没有任何从复制时, 可以从另外一个有多个从的主那里获取到新的从
Redis Cluster 是3.0版本以后支持的。
Redis Cluster是单机功能的子集
Cluster实现了所有单机Redis的命令。对于一些复杂的多key批量操作比如集合的并集和交集也是支持的, 只是需要这些keys能hash到一个槽上(slot)。
Redis Cluster实现了一个称为哈希标签的概念,可以使用它来强制将某些keys存储在同一哈希槽中。但是,在手动重分片期间,多键操作可能在一段时间内不可用,而单键操作始终可用。
Redis Cluster 不支持单机redis的那种多database的功能。集群模式只有database 0 因此 切换database的SELECT 命令是不支持的。
Redis Cluster 协议中客户端和服务端角色
节点负责保存数据,并获取集群的状态,包括将keys映射到正确的节点。集群节点还能够自动发现其他节点,检测非工作节点,并在需要时将从属节点提升为主节点,以便在发生故障时继续运行。
为了执行任务,所有集群节点都使用TCP总线和称为Redis集群总线的二进制协议连接。每个节点都使用集群总线连接到集群中的每个其他节点。节点使用gossip协议来传播关于集群的信息,以便发现新节点,发送ping包以确保所有其他节点都正常工作,并发送集群消息以通知特定条件。集群总线还用于在集群中传播发布/订阅消息,并在用户请求时协调手动故障切换(手动故障切换不是由Redis集群故障检测器发起,而是由系统管理员直接发起)。
由于群集节点无法代理请求,因此可能会使用重定向错误-MOVED和-ASK将客户端重定向到其他节点。理论上,客户机可以自由地向集群中的所有节点发送请求,如果需要,可以重定向,因此客户机不需要保持集群的状态。然而,能够缓存键和节点之间映射的客户端可以以合理的方式提高性能。
(免费订阅,永久学习)学习地址:
更多DPDK相关学习资料有需要的可以自行报名学习,免费订阅,永久学习,或点击这里加qun免费
领取,关注我持续更新哦! !
LinuxC/C++服务器开发/架构师 面试题、学习资料、教学视频和学习路线图(资料包括C/C++,Linux,Ngi