Redis集群的一点理解

一、集群与分布式的区别 (摘自某乎)

分布式:一个业务分拆多个子业务,部署在不同的服务器上

集群:同一个业务,部署在多个服务器上

二、集群技术 Cluster (摘自百度百科)

集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高可用性和可缩放性。

1 提高性能 -- 其实就是负载均衡的好处

2 降低成本 -- 其实单位性能性价比

3 提高可扩展性 -- 可以随时增加和去掉节点

4.增强可靠性 -- 高可用

三、典型的两种集群 (摘自百度百科)

负载均衡集群 --- 扩展性

高可用性集群 --- 高可用

四、集群需要解决的问题,及Redis集群的处理 (摘自某篇文章)

负载失衡 负载均衡算法策略

网络包溢出 溢出可能发生在主控平衡器,也可能是在各服务节点

这两个问题,其实是一个问题。因负载失衡,会更容易导致某节点的网络包溢出。

Redis为了解决这种问题,使用了直连的方法,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。

可用性保证 多节点,每个节点均存在主备双机。

Redis每个节点推荐使用主备节点。若某一节点的主备节点均失效,不影响其他节点的正常运行。若节点的失效数量超过整个集群的节点数量的一半,也就是说至少有一半的访问无法正常处理时,才判定整个集群失效。

(因为是过半选举,那么节点数量最好为奇数)

存储一致性 多节点共享数据,如何保证一致性,特别是redis这种本身作为数据存储的服务

实际上每个key的内容存储在固定的节点上,不同的节点在提供访问时,均会从存储节点那获取信息,这样保证了存储的一致性。

这样意味着每个节点均需要获取其他节点的数据。因此redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.

所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value

Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点

五、总结:Redis集群实际上是 负载均衡集群和高可用集群的集合。

多个节点分担访问和计算压力

每个节点的主备双机,保证高可用

注意: Redis集群并不提供单机的完整功能,如一个命令获取多个key。这很好理解,毕竟每个key分布的节点是很有可能不一样的。如果一次性获取多个key,也就意味着一个节点,需要同时获取多个节点的数据。

 

posted @ 2017-09-02 15:42  紫霄馆  阅读(3024)  评论(0编辑  收藏  举报