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

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

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

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