OceanStor双活存储QuorumServer仲裁节点部署与运维实战
简介面向企业级存储运维、架构设计与灾备实施人员此zip包提供华为OceanStor 5300V5双活存储解决方案中的QuorumServer仲裁组件V500R007C00SPC100用于在双活站点发生网络隔离或节点故障时执行仲裁决策保障数据一致性与业务连续性。压缩包仅2.98MB共4个文件包含sh安装脚本、QuorumServer的rpm与deb包、以及qs_version.ini版本信息文件可适配主流Linux发行版方便快速部署或升级仲裁服务。已有796人学习下载适合正在搭建或维护双活存储环境、需要配置第三方仲裁服务器的工程师参考。通过该资源可一次性获得安装介质、版本校验与脚本入口配合官方文档即可完成仲裁节点的部署、参数配置和日常巡检有效提升双活集群的故障切换效率与运维可控性。1. QuorumServer 是什么一个 zip 包背后的双活决策者收到一个叫OceanStor_5300V5_V500R007C00SPC100_QuorumServer.zip的包时不少运维的第一反应是又来了个黑匣子解压完发现一个镜像加几份文档也不知道它到底在双活系统里干了什么。直白说这个包是给 OceanStor 5300V5 双活存储做脑裂仲裁用的服务端程序当两台存储之间的心跳断了业务又同时在两边写数据总得有个第三方站出来投一票告诉其中一台你让让让另一台继续干活。没有它双活就是两台各自为政的存储谈不上高可用。这篇文章面向正在做双活架构、两地三中心或者存储高可用改造的工程师把仲裁原理、部署步骤和交付现场的坑一次说透。2. 双活存储为什么要第三人脑裂、仲裁票与三种选型2.1 脑裂为什么可怕双活系统最怕两边都认为自己是主双活存储的核心卖点是两台阵列同时承接读写一台出故障另一台无缝接管。这个设计成立的前提是两台存储时刻知道我们还在一起。耦合双活靠心跳机制维持这种感知可以是专用光纤也可以是万兆网络链路。问题在于心跳是物理链路电缆会断、交换机光模块会烧、交换机升级会闪断。一旦心跳消失两台存储并不会立刻停下来业务写入仍然在各自一侧发生于是同一个 LUN 在 A 阵列写了一个版本在 B 阵列写了另一个版本两边都认为自己是活的、主的、该继续服务的这就是脑裂。脑裂之后的数据分叉是没有后悔药的。即使把光纤重新接上两台存储看到的数据已经不一致谁也不敢覆盖谁唯一的出路是找一份数据做基准另一份丢弃这就等于丢了一部分业务写入。所以一套双活存储必须有一个超越物理链路的决策机制在心跳断了的那一瞬间快速决定谁继续服务、谁退出。这个决策者不能是两台存储中的任何一台因为它们在脑裂场景下立场是对立的必须是有独立判断能力的第三方。QuorumServer 就是为这个场景存在的。2.2 QuorumServer 的决策逻辑它到底投什么票QuorumServer 本质上是一个部署在第三方位置的小型 Linux 服务独立于两台 OceanStor 5300V5 阵列运行维护着一个仲裁状态。它平时做的事很简单同时接收两台阵列发来的心跳记录各自的状态和时间戳。一旦某台阵列发现对端心跳丢失它会第一时间来问仲裁节点我还能继续写吗。QuorumServer 的综合判断依据是两样东西一是两台阵列自身的健康状态二是双方预先配置的静态优先级。它给出的结论也不复杂——投票让其中一方继续提供服务另一方进入只读或等待恢复状态。这里面有个容易被误解的点QuorumServer 本身不存业务数据也不参与 IO 路径它只是决策者。业务流量断了不会影响仲裁服务仲裁服务挂了却可能影响整个双活系统的决策能力。所以千万不要拿一台低配的、随便装在一台共享虚拟机里的 Linux 来顶替这个节点值得被当作核心基础设施对待。我一般会把它的地位等同于存储控制器你有冗余控制器仲裁节点同样要有对应的稳定性保障。2.3 静态优先、仲裁服务器、存储内置仲裁选型对比不是所有双活都必须上 QuorumServer。OceanStor 双活架构下常见的仲裁方式有三种选型取决于你两个机房之间的地位是否对等、预算有多少、对脑裂容忍度有多高。仲裁方式需要额外设备决策依据适用场景明显短板静态优先无预先指定一侧优先主备地位悬殊、从没有对等接管需求主侧一挂就直接切换不看实际数据状态决策比较武断QuorumServer 仲裁一台独立服务器/VM双活健康状态 静态优先级双方对等、需要真实脑裂保护的双活需要额外维护一个第三方节点存储侧内置仲裁无需直接由先发现心跳异常的阵列单方面判断实验环境或对数据一致性要求不高的场景脑裂场景下两边各有说辞容易出现双主实战里正经生产双活几乎都会上 QuorumServer。它有独立的网络入口、独立于两台阵列的生命周期断链之后仲裁结论更容易被业务和审计接受——毕竟有一个无利益相关的第三方拍了板。而静态优先更适合那种两地相距十万八千里压根没打算互相接管的远距离复制场景。这个选型建议在项目方案阶段就要定下来等双活配置完再想在旁边加一个仲裁节点网络规划、安全策略都得返工。3. 部署前的三件事网络隔离、时钟同步与安装包核验3.1 仲裁节点该放在哪跟双活阵列不同命运的第三地QuorumServer 的部署位置不是随便定的它有一个黄金法则它的命运必须跟两台存储阵列不同步。它的价值在于脑裂时作出独立判断如果它和其中一台阵列放在同一个机房、同一个机架、同一个接入交换机下面那这台交换机断电的同时仲裁节点和存储阵列一起失联决策能力就归零了。常见做法是放在第三个机房或者至少是同一数据中心里独立的弱电井、独立 UPS 供电的机柜网络路径也跟存储业务网区分开。另外一点要强调的是网络质量。仲裁链路不追求带宽追求的是稳定和低时延。两台阵列到 QuorumServer 之间的时延直接影响心跳超时判定时延抖动太大会造成误判——存储还没断仲裁链路先抖了结果触发切换这是最憋屈的故障。我一般会要求仲裁链路走专网、带外管理网或者被隔离的 VLAN杜绝跟业务大流量共享链路的做法。交付现场如果发现仲裁和业务流量挤在同一台交换机上我会直接把这个方案打回去。3.2 网络与端口清单先画一张访问关系表部署前先把网络访问关系画清楚不要边装边想。QuorumServer 需要与两台存储的控制网互通通常涉及 SSH 管理通道和仲裁数据通道。以下是一张我每次交付都会先填的访问关系表源目的用途防火墙策略存储阵列 A 控制口QuorumServer 服务监听地址发送仲裁心跳双向放行存储阵列 B 控制口QuorumServer 服务监听地址发送仲裁心跳双向放行运维终端QuorumServer 管理地址SSH 登录维护按管理网段放行QuorumServer存储阵列 A/B 管理口回连诊断、状态查询按管理网段放行这张表的落点是仲裁链路必须独立放通不能依赖业务网络转发防火墙策略要双向只放一行单向规则会让心跳报错的时候排查成本翻倍。具体的端口号以 zip 包里的部署文档为准不同 SPC 版本的默认端口可能有调整我不在这里写死免得误导。配完网络后第一步是验证两两互通用最基本的ping和nc测端口连通性确认没问题再进入部署环节。3.3 时钟同步为什么是硬前提双活系统里的仲裁判断非常依赖时间。当两台阵列各自记录写入时序时仲裁节点需要通过时间戳判断哪个更新、哪个落后如果 QuorumServer 的时钟跟存储阵列差了几秒甚至几分钟断链瞬间的时间戳对比就会失真很可能把本来更新的那侧判成陈旧侧切换结果直接反了。所以时钟同步不是建议项是必须项。部署 QuorumServer 的第一件事是配置 NTP指向和存储阵列同一个时间源。另外要关注时区设置统一使用 UTC 或者统一定为同一时区避免时区混用导致日志时间对不上。有一个细节我踩过虚拟化平台默认会启用时间同步功能虚拟机的系统时间会被宿主机周期性强拉这个强拉动作在 QuorumServer 上可能表现为时间跳变仲裁日志里会看到 timeline 错乱。所以仲裁虚拟机上要把虚拟化平台的时间同步关掉只保留 NTP 服务让时间平滑走。3.4 拿到 zip 后的第一步校验包与确认版本配套这一步看起来多余但交付现场十次有三次问题出在包拿错了。解压OceanStor_5300V5_V500R007C00SPC100_QuorumServer.zip之前先做两件事第一用 SHA256 校验文件完整性对一下官方渠道给出的校验值防止传输过程损坏或者被替换第二把包名里的 V500R007C00SPC100 跟你存储阵列当前的固件版本对齐确保是配套版本。存储版本已经升到 SPC100仲裁包的 SPC 也得是 100混用低版本镜像的后果在第五章会专门讲。解压开包一般里面的结构是安装镜像、校验文件、部署指南和一个版本说明。建议把版本说明打开看一眼里面有 MD5、适用的存储型号列表、已知问题清单和升级注意事项。这个文件就是包里的官方文档很多现场问题在上面有记录。我看过太多同事跳过版本说明直接装最后被已知问题撞个满怀。从拿到包到开始部署校验和读文档这两步花十分钟能省后面几个小时的排障。4. 把它装起来QuorumServer 落地到接入双活域的完整步骤4.1 在虚拟化平台上建一台最小规格的仲裁虚拟机QuorumServer 的承载形态一般有两种物理服务器或者虚拟机。考虑到它只跑仲裁逻辑负载很低多数项目会选择虚拟机但必须是独立的、资源不跟业务争抢的虚拟机。我一般推荐的最小规格是 2 核 vCPU、4GB 内存、50GB 磁盘、独立 IP。磁盘不建议太小因为仲裁日志和诊断信息会持续增长50GB 是留有安全垫的。# 以常见的 KVM 虚拟化环境为例创建仲裁虚拟机磁盘 qemu-img create -f qcow2 /data/kvm/quorum-server.qcow2 50G # 用安装镜像启动虚拟机这里用 libvirt 的 virt-install 做无人值守安装示意 virt-install \ --name quorum-server-01 \ --ram 4096 \ --vcpus 2 \ --disk path/data/kvm/quorum-server.qcow2,formatqcow2 \ --network bridgebr-mgmt \ --cdrom /opt/images/QuorumServer.iso \ --os-variant linux2022创建虚拟机时有个容易忽略的参数CPU 型号选host-passthrough还是qemu64会影响虚拟化平台上的迁移兼容性我习惯用host-passthrough仲裁虚拟机基本不需要迁移性能稳定性优先。网络桥接用独立的仲裁网桥不要跟业务虚拟机混在同一网桥。等待安装完成后先完成系统初始化设置比如 root 密码、主机名、IP 地址然后做第一次快照——这个快照是后悔药后面配置出错可以快速回滚。4.2 运行部署脚本QuorumServer 安装命令与参数说明安装镜像启动后进入系统挂载镜像里的安装目录通常里面是一个部署脚本加若干二进制包。不同版本的包结构有差异但安装逻辑大同小异。下面是一个典型的部署过程示意具体脚本名和参数以你解压出来的deploy目录里的说明为准。# 解压部署包并进入安装目录 tar -xzf QuorumServer_install_package.tar.gz cd QuorumServer_install_package # 执行安装脚本指定仲裁服务监听地址和管理网网关 ./install.sh \ --listen-addr 192.0.2.10 \ --gateway 192.0.2.1 \ --ntp-server 192.0.2.200 \ --admin-ip 192.0.2.10 # 安装完成后检查服务状态 systemctl status quorum-server--listen-addr填仲裁服务对外提供心跳服务的 IP必须是之前网络规划里跟两台存储打通的那一个--ntp-server指向和存储阵列同一时钟源这一步不要跳过安装脚本里即使没做强制校验我也会手动配置。安装输出的日志会打在/var/log/quorum/install.log如果中途报错优先看这个文件而不是只盯着屏幕上最后几行。安装完成后服务默认是启用状态然后通过systemctl status确认一下 active再用ss -lntp看监听端口是否起在--listen-addr上。这一步跑完QuorumServer 本身就已经是一个可服务的状态了。4.3 在存储侧注册第三方仲裁并观察心跳建立仲裁服务装好只是完成了一半另一半是把它注册进 OceanStor 5300V5 的双活配置里。打开存储管理界面 DeviceManager进入双活配置的仲裁相关页面把 192.0.2.10 这个地址填进去。存储侧会主动发起到 QuorumServer 的连接并做一次握手。这个过程如果画成时序就是存储 A 发心跳 → QuorumServer 记录状态 → 存储 B 发心跳 → QuorumServer 记录状态任意一侧心跳断了仲裁节点都要能在超时窗口内给出结论。注册完成后查看仲裁节点状态正常情况下应该是 online 且链路健康。第一次做这个动作时最常出现的问题是握手失败一般直接原因就是防火墙策略没放通或者端口配错。此时不要急着改存储侧配置先在 QuorumServer 上用tcpdump抓一下有没有从存储侧来的包一眼就能定位问题是出在网络层还是服务层。仲裁健康状态建立后双活域的脑裂保护才算真正生效。此时可以手动做一次断链测试验证结论是否如预期——这个测试放在第六章专门展开。4.4 验证部署结果的三个命令部署完成后我习惯跑三条命令确认状态不是只看服务起来了# 确认仲裁服务进程存活和监听端口 ss -lntp | grep quorum # 查看仲裁日志中与两台存储阵列握手成功的记录 grep -i peer.*online /var/log/quorum/quorum-server.log | tail -20 # 检查时钟同步偏差偏差应远小于 1 秒 chronyc tracking | grep -E System time|Last offset如果时钟偏移量比较大说明 NTP 配置有问题需要在业务打开之前修掉。仲裁日志里的 online 记录是必看的它证明了两边存储都成功接入了仲裁服务。那些服务起来了但存储侧显示 offline的尴尬情况基本都是在这个环节暴露出来的。把这三条命令的输出截图存档后面做维护交接或者排障时会非常有用。5. 最容易踩的五个坑交付现场常见问题与排查记录5.1 快照回滚后仲裁日志疯狂报时钟跳变现象某项目做完演练后想用快照把仲裁虚拟机恢复到演练前状态恢复后业务侧开始出现角色切换抖动存储告警层面看到仲裁节点不停上报状态翻转日志里满是clock jumped或者time reset。原因快照回滚把系统时间直接拉回旧时间点NTP 服务恢复正常后发现时间偏差巨大一次性跳变导致仲裁节点的时间戳比对错乱存储侧误判对端状态。解决回滚快照后立即重启 NTP 服务强制做一次平滑校准再重启 quorum-server 进程如果业务已经在抖动先把仲裁节点置为维护状态等时间收敛再重新激活。这个坑告诉我一个原则仲裁虚拟机不轻易做快照回滚它要的是连续稳定的时间而不是可回退的磁盘状态。5.2 把仲裁装进业务网之后三方同时失联现象某双活系统上线的第三个月业务网广播风暴导致全网拥堵存储阵列 B 到仲裁的链路和阵列间心跳同时超时存储阵列 A 到仲裁也出现了不连续丢包整个双活域陷入三方失联的僵局最终还是手工介入才恢复。原因实施时图省事把 QuorumServer 的 IP 直接划在业务网段里以为只要能通就行没有做网络隔离。解决物理上把仲裁节点接入独立管理网或专用隔离网段确保业务侧的大流量、广播报文不会占用仲裁队列同时给仲裁链路的服务质量在交换机上打高优先级标记。独立网络对于仲裁来说不是洁癖是基本生存条件。5.3 仲裁状态一直 offline日志提示心跳超时现象QuorumServer 服务正常、进程存活、端口监听正常存储侧却显示仲裁 offline日志里大量 Ignore check reply timeout。原因这个最容易翻车——MTU 不一致。存储侧和仲裁链路之间某个交换机开了巨帧仲裁虚拟机网卡还是 1500两边 MTU 不匹配小包能通、大包丢掉心跳包恰好带不上。解决把存储侧、交换机、仲裁虚拟机三方的 MTU 统一或者干脆全部设为 1500不要在生产环境里搞部分链路 9000、部分 1500的花活。排查时用ping -M do -s 1472打最大不分片包一分钟就能确认是不是 MTU 问题。5.4 高负载下仲裁进程被调度延迟导致误判现象一个跑 Oracle RAC 的双活库平时一切正常某天大促期间仲裁突然判定一侧心跳超时并触发切换但事后翻查存储侧发现两个阵列之间根本没有断链问题是仲裁虚拟机所在宿主机 CPU 被同宿主的高负载虚机挤占仲裁进程几次调度延迟超过心跳超时阈值导致误判。原因仲裁虚拟机和其他业务虚拟机共享物理资源宿主机 CPU 抢占导致仲裁心跳发送不及时。解决给仲裁虚拟机配置 CPU 独占vcpu_pinning绑定物理核或者干脆把仲裁放到独立物理机上。从那以后凡是仲裁节点我至少会给它做 CPU 绑定和内存锁定让内核不把这个进程挪来挪去。5.5 存储升到 SPC100仲裁镜像却还是旧版本现象一台 OceanStor 5300V5 从 V500R007C00SPC080 升到 SPC100 之后双活域里的仲裁节点频繁出现握手失败存储侧提示仲裁版本不兼容业务不得不暂停切换保护。原因升级存储固件时把配套的仲裁服务端忘了同步升级。仲裁协议和存储固件是配套演进的旧版仲裁服务往往不支持新版固件的协议字段。解决升级存储固件前先到存储厂商支持渠道下载对应 SPC 版本的OceanStor_5300V5_V500R007C00SPC100_QuorumServer.zip把仲裁服务平级升级到 SPC100 再执行存储侧升级。这属于典型的版本配套问题核对包名里的 SPC 号和存储当前的 SPC 号这个动作应该进入变更流程的检查列表。6. 从能用变好用仲裁有效性验证与一次真实的脑裂演练6.1 心跳健康度怎么测才算数很多人验收仲裁链路时就用ping测了一下通了就算完事这个其实远远不够。仲裁心跳要求的是持续稳定不是瞬时可用。我一般会用一段小脚本连续打几百个包统计最大最小平均时延确认链路没有周期性丢包# 从仲裁机分别向两台存储管理地址各发 200 个探测包统计时延分布 for i in $(seq 1 200); do ping -c1 -W1 192.0.2.11 | grep time | awk -Ftime {print $2} | awk {print $1} done | sort -n | awk NR1{min$1} {sum$1; max$1} END {print minmin maxmax avgsum/200}这个命令跑完你能看到仲裁到两台存储的时延是否对称、有没有偶发的大时延毛刺。如果测试结果有超过百毫秒的尖刺建议先查网络别急着上线。仲裁链路的质量直接决定了脑裂判定是否可靠这个测试值得保留成项目交付的标准动作。6.2 脑裂演练怎么做不错乱做真实脑裂演练之前先明确一个前提演练的目的是验证仲裁决策正确不是验证业务是否会断。选择业务低峰的维护窗口第一步在存储侧把双活域里两台阵列的心跳链路断开观察 QuorumServer 是否在超时窗口内完成决策确认只有一侧继续提供读写、另一侧进入等待状态业务侧无感或者只有瞬断。第二步把心跳链路恢复观察两台阵列重新握手、数据增量同步补齐仲裁状态回到 online。第三步把刚才的测试以同样的流程在反向再执行一遍验证另一方也能被洗手后的角色再接住。演练全程要录屏、存日志结束后把仲裁日志和存储告警对应起来归档。6.3 日常维护需要盯住的三条监控线上线之后日常维护不用天天盯着但有三条监控线要拉起来。第一QuorumServer 的系统资源和存活状态进程死了要实时告警第二仲裁链路的质量用 Zabbix 或者 Prometheus 周期性探测时延和丢包率设阈值第三NTP 偏差这个我吃过亏仲裁机的时钟一旦漂了整个双活决策的时间戳对比就不可信。坦白讲我也曾觉得仲裁节点不过是一个投个票的小角色直到一次机房空调故障引发的连锁跳闸把存储、仲裁全部牵连进去我才想明白一件事所有高可用机制的价值上限是由最脆弱那个环节决定的。仲裁这东西部署可以轻对待它必须重。希望这篇文章能帮你少走几步弯路让这套双活方案真正在你手里跑得稳、靠得住。希望帮到你。本文还有配套的精品资源点击获取