• Redis Cluster 高可用原理说的头头是道,这些配置不懂就是纸上谈兵

Redis Cluster 高可用原理说的头头是道,这些配置不懂就是纸上谈兵

2025-06-24 10:00:03 栏目:宝塔面板 119 阅读

Redis Cluster 集群相关配置,使用集群方式的你必须重视和知晓。别嘴上原理说的头头是道,而集群有哪些配置?如何配置让集群快到飞起,实现真正的高可用却一头雾水,通过下面这些配置详解也让你对集群原理更加深刻,告别技术悬浮。

关于 Redis Cluster 原理请点击《Redis 高可用篇:Cluster 集群能支撑的数据有多大?

cluster-enabled

普通的 Redis 实例是不能成为集群的一员,想要将该节点加入 Redis Cluster,需要设置 cluster-enabled yes

cluster-config-file

cluster-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 集群接地那将无法通信。

cluster-replica-validity-factor

该配置用于决定当 Redis Cluster 集群中,一个 master 宕机后,如何选择一个 slave 节点完成故障转移自动恢复(failover)。如果设置为 0 ,则不管 slave 与 master 之间断开多久,都认为自己有资格成为 master。

下面提供了两种方式来评估 slave 的数据是否太旧。

  • 如果有多个 slave 可以 failover,他们之间会通过交换信息选出拥有拥有最大复制 offset 的 slave 节点。
  • 每个 slave 节点计算上次与 master 节点交互的时间,这个交互包含最后一次 ping 操作、master 节点传输过来的写指令、上次可 master 断开的时间等。如果上次交互的时间过去很久,那么这个节点就不会发起 failover。

针对第二点,交互时间可以通过配置定义,如果 slave 与 master 上次交互的时间大于 (node-timeout * cluster-replica-validity-factor) + repl-ping-replica-period,该 slave 就不会发生 failover。

例如,``node-timeout = 30 秒,cluster-replica-validity-factor=10repl-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

默认配置是 yes,表示为当 redis cluster 发现至少还有一个 哈希槽没有被分配时禁止查询操作。

这就会导致集群部分宕机,整个集群就不可用了,当所有哈希槽都有分配,集群会自动变为可用状态。

如果你希望 cluster 的子集依然可用,配置成 cluster-require-full-coverage yes

cluster-replica-no-failover

默认配置为 no,当配置成 yes,在master 宕机时,slave 不会做故障转移升为 master。

这个配置在多数据中心的情况下会很有用,你可能希望某个数据中心永远不要升级为 master 节点,否则 master 节点就漂移到其他数据中心了。

cluster-allow-reads-when-down

默认是 no,表示当集群因主节点数量达不到最小值或者哈希槽没有完全分配而被标记为失效时,节点将停止所有客户端请求。

设置成 yes,则允许集群失效的情况下依然可从节点中读取数据,保证了高可用。

cluster-allow-pubsubshard-when-down

配置成 yes,表示当集群因主节点数量达不到最小值或者哈希槽没有完全分配而被标记为失效时,pub/sub 依然可以正常运行。

cluster-link-sendbuf-limit

设置每个集群总线连接的发送字节缓冲区的内存使用限制,超过限制缓冲区将被清空(主要为了防止发送缓冲区发送给慢速连接时无限延长时间的问题)。

默认禁用,建议最小设置1gb,这样默认情况下集群连接缓冲区可以容纳至少一pubsub消息(client-query-buffer-limit 默认是1gb);

本文地址:https://www.yitenyun.com/302.html

搜索文章

Tags

数据库 API FastAPI Calcite 电商系统 MySQL Web 应用 异步数据库 数据同步 ACK 双主架构 循环复制 TIME_WAIT 运维 负载均衡 JumpServer SSL 堡垒机 跳板机 HTTPS JumpServer安装 堡垒机安装 Linux安装JumpServer Deepseek 宝塔面板 Linux宝塔 Docker esxi esxi6 root密码不对 无法登录 web无法登录 生命周期 序列 核心机制 HexHub Windows Windows server net3.5 .NET 安装出错 服务器 管理口 HTTPS加密 宝塔面板打不开 宝塔面板无法访问 查看硬件 Linux查看硬件 Linux查看CPU Linux查看内存 Windows宝塔 Mysql重置密码 Oracle 处理机制 InnoDB 数据库锁 连接控制 机制 无法访问宝塔面板 监控 Serverless 无服务器 语言 ES 协同 开源 PostgreSQL 存储引擎 技术 Spring Redis 异步化 分页查询 索引 group by 高可用 服务器性能 缓存方案 缓存架构 缓存穿透 机器学习 SQL 动态查询 日志文件 MIXED 3 响应模型 Undo Log GreatSQL 连接数 SVM Embedding 自定义序列化 R edis 线程 Postgres OTel Iceberg 工具 R2DBC ​Redis 推荐模型 数据 主库 云原生 Netstat Linux 服务器 端口 Linux 安全 SQLark PG DBA RocketMQ 长轮询 配置 共享锁 scp Linux的scp怎么用 scp上传 scp下载 scp命令 AI 助手 向量数据库 大模型 优化 万能公式 存储 SQLite-Web SQLite 数据库管理工具 Recursive 电商 系统 openHalo 查询 Hash 字段 OB 单机版 Ftp • 索引 • 数据库 Rsync 架构 聚簇 非聚簇 流量 修改DNS Centos7如何修改DNS 数据分类 加密 磁盘架构 sftp 服务器 参数 防火墙 黑客 线上 库存 预扣 人工智能 推荐系统 redo log 重做日志 同城 双活 信息化 智能运维 MySQL 9.3 MVCC 业务 场景 向量库 Milvus 数据备份 高效统计 今天这篇文章就跟大家 传统数据库 向量化 RDB AOF Doris SeaTunnel Redisson 锁芯 mini-redis INCR指令 INSERT COMPACT 窗口 函数 缓存 不宕机 Python 锁机制 网络架构 网络配置 prometheus Alert PostGIS B+Tree ID 字段 事务 Java 开发 Canal Web 崖山 新版本 引擎 性能 分库 分表 MongoDB 数据结构 IT运维 核心架构 订阅机制 数据脱敏 加密算法 分布式 集中式 filelock ZODB 容器化 数据类型 虚拟服务器 虚拟机 内存 启动故障 Redis 8.0 读写 容器 网络故障 DBMS 管理系统 OAuth2 Token JOIN 频繁 Codis 模型 自动重启 Pottery 聚簇索引 非聚簇索引 QPS 高并发 Go 数据库迁移 部署 原子性 工具链 发件箱模式 微软 SQL Server AI功能 Web 接口 Entity 排行榜 排序 Testcloud 云端自动化 SSH SpringAI 分页方案 排版 数据页 速度 服务器中毒 Caffeine CP 事务隔离 数据集成工具 MCP 开放协议 悲观锁 乐观锁 StarRocks 数据仓库 Redka sqlmock LRU 分页 AIOPS 1 优化器 池化技术 连接池 单点故障 网络 dbt 数据转换工具 大表 业务场景 EasyExcel MySQL8 意向锁 记录锁 分布式架构 分布式锁​ 行业 趋势 事务同步 仪表盘 InfluxDB 国产数据库 Order 日志 IT RAG HelixDB 字典 对象 单线程 双引擎 订单 Crash 代码 UUIDv7 主键 Ansible 编程 LLM 主从复制 代理 播客 UUID ID Valkey Valkey8.0 线程安全 Pump List 类型 恢复数据 Weaviate ReadView 产业链 兼容性 数据字典 MGR 分布式集群 语句 解锁 调优 失效 Next-Key 表空间 关系数据库 慢SQL优化 GitHub Git 查询规划 矢量存储 数据库类型 AI代理 分布式锁 Zookeeper 国产 用户 RR 互联网 算法 千万级 快照读 当前读 视图 神经系统 CAS count(*) count(主键) 行数 拦截器 动态代理 多线程 并发控制 恢复机制 技巧 闪回