当前位置: 首页 > 科技观察

RedisCluster的原理简单明了,如果不了解这些配置,就是纸上谈兵

时间:2023-03-12 18:34:20 科技观察

RedisCluster相关配置,使用cluster方法时一定要注意和知道。不谈原理,先说集群的配置有哪些?如何配置集群,使其快速飞起来,实现真正的高可用,一头雾水。下面详细的配置讲解,也会让你对集群原理有更深入的了解,告别技术暂停。启用集群的普通Redis实例不能成为集群的成员。如果要将节点加入RedisCluster,需要设置cluster-enabledyes。cluster-config-filecluster-config-filenodes-6379.conf指定集群中的每个节点文件。集群中的每个节点都有一个配置文件。这个文件不是程序员编辑的,而是我自己创建和更新的。每个节点必须使用不同的配置文件。确保同一集群中的配置文件不同。节点正在使用不同的文件。cluster-node-timeout设置集群节点不可用、节点故障检测的最大超时时间。当集群中的一个节点向另一个节点发送PING命令,但目标节点在给定的时限内没有返回对该PING命令的回复时,发送该命令的节点会将目标节点标记为PFAIL(可能失败者,可能失败了);如果主节点在这个时间后仍然没有响应,它的从节点将开始故障转移并升级到主节点。请注意,如果任何节点在此时间内仍未连接到大多数主节点,则该节点将停止接收任何请求。默认配置为cluster-node-timeout15000,单位为毫秒。cluster-port该端口是集群总线监听TCP连接的端口。默认配置是cluster-port0,我将端口绑定到clientcommandport+10000(clientport默认是6379,所以绑定16379作为clusterbusport)。每个RedisCluster节点需要开启两个端口:一个用于服务客户端的TCP端口,如6379,另一个称为集群总线端口,节点使用集群总线进行故障监控、配置更新、故障转移等.客户端不要与集群总线端口通信,请务必在防火墙中打开这两个端口,否则Redis集群接地后将无法通信。cluster-replica-validity-factor该配置用于确定当RedisCluster集群中有master宕机时,如何选择slave节点完成故障转移自动恢复(failover)。如果设置为0,slave认为自己有资格成为master,而不管slave与master断开了多长时间。下面提供两种方式来判断slave数据是否过旧。如果有多个可以故障转移的slave,它们将交换信息以选择具有最大复制偏移量的slave节点。每个从节点计算它最后一次与主节点交互的时间。这个交互包括上次的ping操作,master节点发送的write命令,master上次可以断开连接的时间等。如果距离上次交互已经过去了很长时间,节点将不会发起failover。对于第二点,交互时间可以通过配置定义。如果slave和master的最后一次交互时间大于(node-timeout*cluster-replica-validity-factor)+repl-ping-replica-period,slave不会发生failover。例如``node-timeout=30秒,cluster-replica-validity-factor=10,repl-ping-slave-period=10`秒,表示从上次与slave节点交互已经过了310秒master节点,那么slave节点不会做failover。增加cluster-replica-validity-factor将允许存储旧数据的从节点提升为主节点。如果调小,则可能没有从节点晋升为主节点。考虑到高可用,建议设置为cluster-replica-validity-factor0。没有slave节点的cluster-migration-barrier主节点称为孤主节点。此配置用于防止母版裸奔。当一个master的一个slave节点宕机时,集群会从其他master中选择一个冗余的slave节点进行迁移,保证每个master节点至少有一个slave节点,防止孤立的master节点宕机时没有slave节点可以提升为master,集群不可用。默认配置是cluster-migration-barrier1,这是一个迁移阈值。意思是:迁移后,主节点还有至少一个从节点执行迁移操作。比如masterA节点有2个以上的slave节点,当集群中存在孤儿masterB节点时,可以将A节点多余的slave节点迁移到masterB节点上。生产环境建议保持默认值,尽量保证高可用,设置一个很大的值或者配置cluster-allow-replica-migrationno关闭自动迁移功能。cluster-allow-replica-migration默认配置为yes,即允许自动迁移。cluster-require-full-coverage默认配置为yes,表示当redis集群发现至少有一个hashslot没有分配时,禁止查询操作。这会导致部分集群宕机,整个集群不可用。当所有哈希槽都分配完毕后,集群将自动变得可用。如果您希望集群的一个子集仍然可用,请使用cluster-require-full-coverageyes配置它。cluster-replica-no-failover的默认配置是no,当配置为yes时,当master宕机时,slave不会进行failover并升级为master。这个配置在多数据中心的情况下会有用,你可能希望一个数据中心永远不要升级为主节点,否则主节点会漂移到其他数据中心。cluster-allow-reads-when-down默认是no,意思是当集群因为master节点数没有达到最小值或者hash槽没有分配满而被标记为无效时,节点会停止所有客户要求。如果设置为yes,当集群出现故障时,仍然可以从节点读取数据,保证高可用。cluster-allow-pubsubshard-when-down配置为yes,表示当集群因为master节点数没有达到最小值或者hash槽没有分配满而被标记为无效时,pub/sub仍然可以正常运行。cluster-link-sendbuf-limit设置每个clusterbus连接的sendbytebuffer的内存使用限制,超过限制会清空buffer(主要是防止发送buffer时无限延长时间的问题发送到慢速连接)。默认禁用,建议最小设置为1gb,这样集群连接缓冲区默认至少可以容纳一条pubsub消息(client-query-buffer-limit默认为1gb);