cluster为redis带来了什么呢?
- 高达1000个节点的高性能和线性可扩展性,在多个节点间自动拆分数据集
- 可接受的写安全度
系统尝试(尽最大努力)保留来自与大多数主节点连接的客户端的所有写操作。通常有一些小窗口,在这些窗口中可以丢失已确认的写入。当客户端位于少数分区时,丢失已确认写入的窗口会更大。
- 一部分节点出现故障或无法与集群的其余部分通信时,继续运行的能力。
redis cluster能够在大多数主节点都可访问且每个不再可用的主节点上至少有一个可访问的从节点的分区中幸存。而且,通过使用副本迁移,不再由任何从属复制的主控将从一个由多个从属覆盖的主控接收一个主控。
当然,在发生较大故障时(例如大多数主服务器不可用时、主从同时宕机时),群集将停止运行
集群总线
每个Redis群集节点都需要打开两个TCP连接,常规的6379(默认)用于向客户端提供数据服务,集群总线端口(常规端口+10000,默认16379)用于故障检测,配置更新,故障转移授权等,集群总线端口应确保在集群中所有服务器都能访问到(打开防火墙)。所有群集节点都使用TCP总线和称为Redis群集总线的二进制协议进行连接。每个节点都使用群集总线连接到群集中的每个其他节点。群集总线还用于在用户请求时跨群集传播Pub / Sub消息,并在用户请求时安排手动故障转移(手动故障转移不是Redis Cluster故障检测器而是由系统管理员直接发起的故障转移)
客户端永远不要尝试与集群总线通信
流言协议(gossip)
redis cluster 节点之间通过流言协议传播消息,它们互相发送ping命令以确保其他客户端都在正常工作。流言协议简单说是一种“一传十、十传百”的裂变型消息传递方式,它的优点很明确:消息的传递非常快(传播速度近乎指数级的增长),容错性高(部分节点损坏不影响其他节点散播消息)、收敛一致性高(一个消息到达后,会快速传遍整个网络,系统状