Redis Cluster 原理说的头头是道,这些配置不懂就是纸上谈兵Redis Cluster 集群相关配置,使用集群方式的你必须重视和知晓 。别嘴上原理说的头头是道,而集群有哪些配置?如何配置让集群快到飞起 , 实现真正的高可用却一头雾水,通过下面这些配置详解也让你对集群原理更加深刻 。
cluster-enabled普通的 Redis 实例是不能成为集群的一员,想要将该节点加入 Redis Cluster,需要设置 cluster-enabled yes
。
cluster-config-filecluster-config-file nodes-6379.conf
指定集群中的每个节点文件 。
集群中的每个节点都有一个配置文件,这个文件并不是让程序员编辑的,是我自己创建和更新的,每个节点都要使用不同的配置文件,一定要确保同一个集群中的不同节点使用的是不同的文件 。
cluster-node-timeout设置集群节点不可用的最大超时时间,节点失效检测 。集群中当一个节点向另一个节点发送PING命令,但是目标节点未在给定的时限内返回PING命令的回复时,那么发送命令的节点会将目标节点标记为PFAIL(possible failuer , 可能已失效);
如果master 节点超过这个时间还是无响应,则用它的从节点将启动故障迁移,升级成主节点 。
注意,任何一个节点在这个时间之内如果还是没有连上大部分的主节点,则此节点将停止接收任何请求 。
默认配置是 cluster-node-timeout 15000
,单位是毫秒数 。
cluster-port该端口是集群总线监听 TCP 连接的端口,默认配置为 cluster-port 0
, 我就会把端口绑定为客户端命令端口 + 10000(客户端端口默认 6379,所以绑定为 16379 作为集群总线端口) 。每个 Redis Cluster 节点都需要开放两个端口:
- 一个用于服务于客户端的 TCP 端口,比如 6379.
- 另一个称为集群总线端口 , 节点使用集群总线进行故障监测、配置更新、故障转移等 。客户端不要与集群总线端口通信,另外请确保在防火墙打开这两个端口,否则 Redis 集群接地那将无法通信 。
下面提供了两种方式来评估 slave 的数据是否太旧 。
- 如果有多个 slave 可以 failover , 他们之间会通过交换信息选出拥有拥有最大复制 offset 的 slave 节点 。
- 每个 slave 节点计算上次与 master 节点交互的时间,这个交互包含最后一次
ping
操作、master 节点传输过来的写指令、上次可 master 断开的时间等 。如果上次交互的时间过去很久,那么这个节点就不会发起 failover 。
(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节点与master节点上次交互时间已经过去了310秒 , 那么slave节点就不会做failover 。调大
cluster-replica-validity-factor
则允许存储过旧数据的 slave 节点提升为 master,调小的话可能会导致没有 slave 节点可以升为 master 节点 。考虑高可用 , 建议大家设置为
cluster-replica-validity-factor 0
。cluster-migration-barrier没有 slave 节点的 master 节点称为孤儿 master节点,这个配置就是用于防止出现裸奔的 master 。
当某个 master 的 slave 节点宕机后,集群会从其他 master 中选出一个富余的 slave 节点迁移过来 , 确保每个 master 节点至少有一个 slave 节点,防止当孤立 master 节点宕机时,没有slave节点可以升为 master 导致集群不可用 。
默认配置为
cluster-migration-barrier 1
,是一个迁移临界值 。含义是:迁移后 master 节点至少还有 1 个 slave 节点才能做迁移操作 。比如 master A 节点有2个以上 slave 节点,当集群出现孤儿 master B 节点时 , A 节点富余的 slave 节点可以迁移到 master B 节点上 。
生产环境建议维持默认值,最大可能保证高可用,设置为非常大的值或者配置
cluster-allow-replica-migration no
禁用自动迁移功能 。cluster-allow-replica-migration
默认配置为 yes,表示允许自动迁移 。cluster-require-full-coverage默认配置是
推荐阅读
- Java并发编程 | Synchronized原理与使用
- 抛砖系列之redis监控命令
- 非常全面 Dubbo 原理和机制详解
- Redis 01: 非关系型数据库 + 配置Redis
- AI 【第1篇】人工智能语音测试原理和实践---宣传
- Redis 02: redis基础知识 + 5种数据结构 + 基础操作命令
- 1 Redis—问题
- 之四 2流高手速成记:SpringBoot整合redis及mongodb
- SpringBoot框架SpEL表达式注入漏洞复现与原理分析
- 深入剖析Sgementation fault原理