Redis群集TCP端口
每个Redis集群节点都需要两个开放的TCP连接:一个用于服务客户端的Redis TCP端口,例如6379,以及第二个称为集群总线端口的端口。默认情况下,集群总线端口是通过将10000添加到数据端口(例如16379)来设置的;但是,您可以在集群端口配置中覆盖它。
集群总线是一种使用二进制协议的节点到节点通信通道,由于带宽小、流转时长长,更适合节点之间交换信息。节点使用集群总线进行故障检测、配置更新、故障转移授权等。客户端不应尝试与集群总线端口通信,而应使用Redis命令端口。但是,请确保在防火墙中打开两个端口,否则Redis集群节点将无法通信。
Redis集群数据分片 Redis Cluster data sharding
Redis集群不使用一致的散列,而是一种不同形式的分片,其中每个键在概念上都是我们所说的散列槽的一部分。
Redis集群中有16384个hash slots,采用密钥模16384的CRC16计算
Redis集群中的每个节点都负责散列槽的子集
将散列槽从一个节点移动到另一个节点不需要停止任何操作;因此,添加和删除节点,或更改节点持有的散列槽百分比,不需要停机时间。
如果您可能经常重新硬盘,这允许构建一些自动化,但是目前redis-cli无法自动重新平衡集群,检查集群节点之间的密钥分布,并根据需要智能移动插槽。此功能将在未来添加。
--clacle-yes选项指示集群管理器对命令的提示自动回答“是”,允许它在非交互模式下运行。请注意,此选项也可以通过设置REDISCLI_CLUSTER_YES环境变量来激活。
Redis集群一致性保证
Redis集群不保证强一致性。实际上,这意味着在某些情况下,Redis集群可能会丢失系统向客户端确认的写入。
Redis集群可能丢失写入的第一个原因是因为它使用异步复制。
参考资料
https://ost.51cto.com/posts/11285
https://www.cnblogs.com/dooor/p/docker-redis0227.html