文档首页 / 集群与高可用

集群与高可用

多节点集群的组成、Redis 与集群配置页的参数、粘性会话要求、节点扩缩与授权节点上限、故障策略。

概述

单实例模式下,会话、缓存、定时任务都在进程内完成。集群模式下,多个节点连接同一个配置库,并借助 Redis 共享会话、广播消息、分布式锁、Leader 选举与调度协调,由前置的负载均衡分发请求。

集群由以下部分组成:

组成 作用
多个产品节点 每个节点运行同一个产品 jar,配置同一个配置库
外接配置库 所有节点共享的平台数据;集群配置、授权也保存在其中
Redis 会话存储、跨节点广播、分布式锁、节点注册与 Leader 选举
负载均衡 / 反向代理 分发请求,需要支持粘性会话,见下文

发行包不提供集群编排工具。节点安装与单机相同,见 裸机部署。

集群拓扑:负载均衡、多个产品节点、外接配置库与 Redis

功能入口

「系统 > 系统设置 > 集群配置」页,包含三块:「运行状态」「Redis 拓扑配置」「集群运行时参数」。「系统 > 智能运维 > 运行状态」页可查看运行时状态、当前节点 ID、活跃节点列表、Redis 健康与系统资源。

提示:托管模式下这些入口会被隐藏;独立部署时保留。

操作步骤

切换到集群模式

  1. 准备好 Redis,并确认应用节点能访问。
  2. 让所有节点使用同一个外接配置库(同一份 database.config 或同一组 MR_DB_* 环境变量)。见 初始化向导与数据库准备。
  3. 打开「集群配置」页,在「Redis 拓扑配置」中选择「拓扑模式」并填写连接信息,见下表。
  4. 点击「测试 Redis 连接」,通过后点击「保存配置」。
  5. 点击「切换到集群模式」,在「切换运行模式确认」对话框中点击「确认切换」。程序会先执行 Redis 连通性预检查,通过后才启动分布式会话与广播通道;未通过时按钮显示为「先验证 Redis 并继续」,不会切换。
  6. 在「运行状态」块查看「切换状态」,变为「集群运行中」即完成。

退回单实例:点击「退回单实例模式」并确认,将断开 Redis,恢复本地会话与缓存。

切换状态取值:

状态 含义
单实例运行中 未启用集群
正在切换到集群… 切换进行中
集群运行中 正常
集群受限(Redis 异常) Redis 不可用,按故障策略处理
正在退回单实例… 退回进行中

切换到集群模式的六个操作步骤

系统设置 > 「集群配置」页签:运行状态与 Redis 拓扑配置

增加节点

  1. 在新服务器上按 裸机部署 安装同一版本的产品包。
  2. 让它使用同一个配置库(复制 database.config,或设置 MR_DB_*)。
  3. 保持四个加密密钥一致(未自定义时都用内置默认值),见 配置项参考。
  4. 启动。节点从配置库读取集群配置并加入集群,在「运行状态」页的活跃节点列表中可见。
  5. 把新节点加入负载均衡。

集群令牌由第一个启动的节点在配置库中自动生成,其他节点读取使用,不需要手工分发。如需覆盖,可设置 MR_CLUSTER_TOKEN。

Redis 拓扑配置

字段 说明 默认值
拓扑模式 「单机 (Standalone)」「哨兵 (Sentinel)」「集群 (Cluster)」 Standalone
主机 单机模式的 Redis 地址 127.0.0.1
端口 单机模式的端口 6379
Master 名称 哨兵模式必填 空
哨兵节点 哨兵模式必填 空
集群节点 集群模式必填 空
最大重定向 集群模式的最大重定向次数 3
用户名 留空表示不需要 空
密码 留空表示不需要 空
数据库 Redis 库序号 0

集群运行时参数

这组参数默认只读,需要点击「启用高级参数修改」并确认后才能编辑,保存时还会再次确认。修改不当可能导致节点协调异常,默认不建议修改。

参数 说明 默认值
会话 TTL(秒) 会话有效期 86400
锁键前缀 分布式锁的 Redis 键前缀 mr:lock:
Leader 选举键 Leader 选举使用的键 mr:leader
节点心跳 TTL(秒) 节点注册心跳的存活时间 30
调度扫描间隔(秒) 定时调度的扫描周期 10
调度认领批次大小 一次认领的任务数 10
通知频道前缀 通知广播频道前缀 mr:notify:
缓存失效频道 缓存失效广播频道 mr:cache:invalidate
故障策略 Redis 异常时的行为 受限模式

故障策略

取值 行为
受限模式 (RESTRICTED) 停止调度、拒绝新会话写入、停止跨节点广播,但允许已有本地请求继续
快速失败 (FAIL_FAST) 将节点标记为不健康,交由负载均衡摘除

「运行状态」页中的「快速失败激活」显示 FAIL_FAST 是否已触发。

负载均衡要求

粘性会话

集群模式下,报表数据缓存保留在各节点的本地内存中,缓存心跳、导出、翻页等后续请求必须回到生成该缓存的节点。Sight Wall 的实时数据流(SSE)同样绑定在发起注册的节点上。

程序会在响应中带上头 X-MR-Node-Id(当前处理节点 ID),可作为负载均衡做粘性路由的依据。路由未命中时:

现象 说明
接口返回业务码 4091,提示「报表实例不在当前节点,请检查负载均衡粘性会话配置」 报表缓存所在节点与当前请求节点不一致
大屏实时流返回 sticky-miss,提示「大屏实时流未命中当前节点,请检查粘性会话配置」 大屏流所在节点与连接请求节点不一致

因此,负载均衡必须配置粘性会话,例如按客户端 IP 或 Cookie 固定到同一节点,并关闭 SSE 路径的缓冲。

健康检查

用 GET /api/health,返回字段 ready 为 true 表示可接收流量,mode 为 CLUSTER 表示运行在集群模式。返回中还包含 nodeId、leader、activeNodes。

授权与节点数

  • 授权保存在配置库中。任意节点导入一次,其他节点最迟约 60 秒内自动生效,不需要逐台导入。
  • 授权可以限定节点数上限(nodeMax)。新节点加入时,如果其他活跃节点数加上自己超过上限,该节点被拒绝加入集群,授权状态显示 node_limit_exceeded,原因为「集群节点数超过授权上限 N,本节点未加入集群。请升级授权或减少节点。」已在集群内的节点不受影响,节点重启重入也不会被拦。上限为 0 或未设置表示不限。
  • 运行配额(并发访问 IP、运行数量)在集群下需要用 Redis 计数,否则每个节点各算各的,实际放行量被放大。见 运行配额与机器绑定。

节点角色

配置项 sight-data.node.products 可指定本节点只运行哪些产品(如 [datawall]),为空表示运行全部已授权产品。节点分配不能超出授权范围。sight-data.node.name 用于给节点起标识名,便于运维和日志。

注意事项

注意:定时调度在集群中由 Leader 或库级锁保证同一任务只在一个节点执行;系统内置的自动备份也是如此,见 备份与恢复。

注意:切换运行模式会改变会话与缓存的存放方式,建议在业务低峰进行,并提前确认负载均衡已配置粘性会话。

注意:升级时,先启动的新版本节点会对配置库执行迁移,见 升级与变更管理。

相关文档

联系我们

请填写您的信息,我们将在 1 个工作日内与您联系。