ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

双活数据中心架构选型与实施指南:从存储双活到切换演练

双活数据中心架构选型与实施指南:从存储双活到切换演练 简介双活数据中心解决方案PPT系统、完整地梳理了企业级双活数据中心从存储、应用到网络的端到端技术架构适合IT架构师、运维工程师及容灾决策人员学习参考。资源为单个pptx演示文稿大小5.29MB已有630人学习。方案围绕双活存储层、双活应用层、双活网络层展开涵盖基于虚拟化网关的异构阵列镜像冗余、Oracle RAC/VMware/FusionSphere跨DC高可用以及GSLB/SLB配合≤100km裸光纤实现高可靠二层互联与最优访问路径。具体内容上前端应用双活部分给出了VMware大二层互通、虚拟化网关镜像卷、vSphere HA/DRS配合负载均衡设备实现Weblogic业务自动漂移的配置要点后端Oracle RAC部分讲解了‘21’集群部署、Service绑定本地实例、TAF故障切换以及访问分离以减少缓存融合。对于正在规划或建设双活数据中心、追求业务连续性和数据零丢失的团队这份文档提供了从架构设计到关键技术落地的完整参考。1. 双活数据中心不是“两个机房都在跑”这么简单它到底解决什么、代价多大很多人以为双活数据中心就是两个机房同时开着一台挂了另一台顶上。真做到生产环境你才会发现最难的不是买两台存储而是把存储、网络、主机、数据库这套体系从“主备思维”整体扳到“两边都在运行”的模型上。双活要解决的是单一机房故障时业务不中断通常能做到RPO为0、RTO到分钟级特别适合数据库、支付这类核心系统。我会按一线实施的角度讲清楚架构怎么选、参数怎么调、切换怎么演练也会把脑裂和一致性组这类最容易翻车的点单独拎出来说。如果你才接触数据中心运行与管理方向把它当成一份从概念到命令的完整参考也够用。2. 双活架构怎么选存储双活、网络大二层与仲裁的三角关系双活方案画在 PPT 上就是两条平行线落地时要回答三个问题数据怎么在两台存储上同时写、主机怎么同时访问两边、两边失去联系时谁说了算。这三个问题分别对应存储复制、网络互联和仲裁机制任何一条腿短了方案都跑不起来。常见的做法是先定存储层。存储层决定了你的 RPO 能不能做到 0也决定了每天运维要盯哪些指标网络层解决主机怎么“认为”两端是同一个存储仲裁解决极端故障下怎么不出现两边抢数据。这三者里存储选型最贵、网络最容易被低估、仲裁最容易被忽略。2.1 三种双活实现模型网关、存储原生与分布式怎么选模型典型形态适用场景主要代价存储网关双活网关设备把异构存储统一成虚拟卷两端同时读写已有多种品牌存储、想统一管理网关多一跳IO 路径变长网关自身要做冗余存储原生双活两台中高端阵列之间做同步复制主机多路径选路核心数据库、交易类系统两端必须同品牌同系列扩容受厂商限制分布式存储双活分布式集群跨站点多副本无专用硬件云化平台、大数据业务对时延敏感型数据库要重点实测网关双活适合机房里有多个品牌存储、短期没法统一替换的环境虚拟化网关把 A 端的盘和 B 端的盘映射成一个逻辑卷主机只看到一个命名空间。代价是 IO 多走一层网关故障点也多了网关本身必须做成集群否则网关一挂两边存储再健康也白搭。存储原生双活是核心系统的首选阵列之间直接同步复制控制器把每个写请求同时落到两端缓存后才给主机确认天然做到 RPO 为 0。主机侧配多路径软件两条路径都能干活任何一端阵列故障IO 自动切到另一端不需要人工干预。我一般只把数据库、支付、账务这类系统放进来其他业务不上双活成本和收益不成正比。分布式存储双活在云原生场景里越来越多靠跨站点多副本而不是同步复制保证一致性扩缩容灵活但延迟比传统存储高一些。数据库这类对时延极敏感的业务上之前必须用真实业务模型压测不能只看厂商给的基准数字。2.2 仲裁站点第三仲裁为什么不能省、放在哪双活最怕的是脑裂两个站点之间的链路断了但两边阵列都活着每个站点都认为对端已经死了于是同时抢着接管数据卷。两边同时写入同一份数据等链路恢复数据就成了两套互相矛盾的版本。仲裁就是给这个局面投票的第三方。两个站点网络不通时先联系上仲裁的那一边继续提供服务另一边自动降级避免两边同时写。所以仲裁机部署位置比性能更重要2 核 4G 的轻量虚机完全够用但必须满足三个条件和两个站点都有独立网络通路、不在任何一个站点内部、网络质量可靠。常见的做法是把仲裁放在同城的第三方机房或者放在云厂商的可用区里用专线连接两个站点。注意不要把仲裁机放在主存储同一个机柜里更不要和某一边共用一个 UPS——机房断电时仲裁跟着一边下线等于没放仲裁。心跳参数的默认值通常可以直接用但建议确认两件事判死阈值用的是连续丢包次数而不是单次超时仲裁链路做了独立 QoS 或物理隔离。血泪经验是很多脑裂误判不是存储故障而是心跳小包走业务链路业务高峰期拥塞几秒钟仲裁直接把一边隔离了。2.3 网络层要搭什么大二层、波分链路和环路控制传统主备网络用三层 VRRP 做主备网关主网关在哪边流量就从哪边出。双活环境下主机需要同时访问两边的存储和业务 IP网关固定在一边会导致故障切换时 IP 要跟着漂移等于把切换压力从存储转移到了网络这不是双活。所以双活数据中心网络层要做大二层让两个站点像一个机房一样工作。同城距离不远时用波分专线打通二层距离远一些用 VXLAN EVPN 做分布式网关业务 IP 不变两边都能作为默认网关转发流量。选型时重点看 DCI 设备支持多大的 MTU建议两端统一配置 9000 字节巨型帧存储同步复制的大块 IO 分片会严重影响吞吐。链路冗余和防环是另一个重点。两台交换机之间跑 MC-LAG 做跨设备链路聚合服务器双网卡分别上联到两个站点的 TOR既增加带宽又避免 STP 阻塞导致路径浪费。DCI 带宽不要按平均值规划同步复制下每个写 IO 都要复制一份到对端带宽需求是“写 IO 的峰值 × IO 大小 × 2”还要留出广播和运维流量余量。网络规划时漏算这条上线后第一个业务高峰就会被打脸。3. 把双活落到命令和脚本最小配置、多路径参数与切换演练上一章解决了“选什么”的问题这一章解决“怎么配”。下面以存储原生双活加 Linux 多路径为例给一套能走通的最小配置流程。命令风格接近主流产品关键字以你手里的设备 CLI 为准重点是理解每一步在做什么、顺序为什么不能乱。3.1 部署前检查清单链路时延、版本和机柜功率余量先别急着建存储双活域部署前检查能省后面大半的排查时间。第一项是两站点的链路时延。同步复制要求往返时延在 2ms 以内最好是 1ms 以内超过这个值每个写请求都要等对端确认业务时延立刻能感觉到。用大包连续丢测别看 ping 小包的结果小包通过不代表大包在拥塞时不丢。第二项是两端存储型号和微码版本。常见翻车现场是两套阵列微码不一致双活域建到一半提示不支持被迫变更窗口延期。先升级到一致版本再配双活别指望后期在线升级不影响复制。主机侧确认多路径软件已装好、HBA 卡或网卡的驱动版本在存储兼容列表里这一步在官网查兼容矩阵比事后刷固件省事得多。第三项是机房侧资源。双活意味着两个站点在故障时都要能承载全量业务备用机柜的功率和制冷余量必须按全量负载预留。现在新采购的设备单机柜功率密度越来越高改造时按业务峰值加暖通冗余来算别打八折估算否则真切换过去另一站点的机房温度会直接触发告警。3.2 存储侧最小配置双活域、一致性组和 LUN 配对存储侧的配置逻辑是“先划范围再建分组最后配对卷”。双活域定义哪两台阵列参与双活一致性组定义哪些卷必须作为一个整体切换LUN 对把两端的物理卷一一对应起来。命令如下以通用 CLI 风格演示# 1. 建立双活域本端角色为 primary storage-cli create domain nameDR_DOMAIN site_roleprimary # 2. 把对端阵列加入双活域 storage-cli add array domainDR_DOMAIN \ array_nameDR_SITE_B rolesecondary # 3. 创建一致性组同步模式、写回缓存 storage-cli create consistency_group nameCG_ERP \ domainDR_DOMAIN \ sync_modesync \ write_policywrite_back \ recovery_policyauto # 4. 把两端对应的 LUN 组成 LUN 对 storage-cli create lun_pair cgCG_ERP \ local_lun/dev/sdc remote_lun/dev/sdc第一步的双活域是边界后续所有对象都在这个域里创建第二步把对端阵列加进来后两端才能识别彼此的卷。第三步里 sync_modesync 表示每个 IO 要等两端都落盘才返回这是 RPO0 的前提write_policywrite_back 必须依赖存储控制器的缓存掉电保护没有 BBU 或闪存保护就别开否则断电丢数据比双活问题更严重。第四步的 LUN 对要特别注意两端卷容量一致最好用厂商推荐的方式由系统自动创建对等卷避免手动建卷时容量或块大小不一致。一致性组这里我用了 CG_ERP 这样的命名数据库的数据文件、日志、控制文件必须放在同一个组里因为只有组才能保证跨卷崩溃一致性。3.3 主机多路径与参数故障切换时间为什么不能拍脑袋存储侧双活做好了主机侧还差多路径这步。多路径软件的角色不是简单冗余而是“选路器”两条路径都正常时可以双活负载均衡也可以设置优先级让 A 站优先某条路径故障时把 IO 快速切到另一条。关键参数在 /etc/multipath.conf 里配置# /etc/multipath.conf 关键段 defaults { path_selector service-time 0 path_grouping_policy group_by_prio path_checker tur failback 10 no_path_retry 5 } multipath { wwid 3600xxxxx alias dm_erp path_grouping_policy multibus }path_grouping_policy 有两个常用值multibus 表示所有路径平等两边同时分担 IOgroup_by_prio 表示按存储返回的优先级分组优先走主站点路径主站点故障才切到备站点。核心数据库我一般用 group_by_prio避免两站点时延不同导致数据库节点之间出现明显的延迟差异。参数作用建议值path_checker路径健康检查方式turSCSI 测试单元就绪failback主路径恢复后回切时间10 秒避免抖动来回切no_path_retry全路径失败后重试次数5 次防止无限阻塞业务path_checker 用 tur 比 readsector0 对阵列负载小监控系统密集轮询时不至于把存储管理端口打满。failback 不要设成 immediate链路抖动恢复时路径瞬间来回切反而造成 IO 抖动。no_path_retry 设成 5 左右低于上层应用的 IO 超时时间让应用快速失败而不是无限等待。3.4 切换演练脚本先停业务、再切存储、最后验证回切配置全部完成不代表双活可用真正的检验是切换演练。演练编排按“停业务、拆组、切换、验证”的顺序来顺序反过来就会造成数据不一致。把核心步骤写成脚本每次演练留痕比临时敲命令可靠得多#!/usr/bin/env bash set -euo pipefail APP_NAME${1:-erp} CG_NAMECG_${APP_NAME} do_failover() { echo [1/4] 停止应用与数据库确保无新写入 systemctl stop app-${APP_NAME} sync echo [2/4] 拆分一致性组指定 B 站接管 storage-cli split cg${CG_NAME} keepsite_b echo [3/4] 激活 B 站 LUN 并挂载 mount /dev/mapper/dm_${APP_NAME} /mnt/${APP_NAME} echo [4/4] 启动健康检查 /opt/bin/app_healthcheck } do_failback() { echo [1/3] 反向同步数据并校验一致性 storage-cli resync cg${CG_NAME} fromsite_b echo [2/3] 切换回 A 站 storage-cli switchover cg${CG_NAME} tosite_a echo [3/3] 重新挂载并恢复应用 mount -a systemctl start app-${APP_NAME} }脚本中第一步必须先停应用再动存储如果应用还在写入时就 split 一致性组B 站接管后拿到的数据缺了最后一段数据库大概率起不来。第二步的 keepsite_b 是让 B 站保留完整的当前数据视图。failback 时 resync 是反向同步这个方向要注意顺序先让 B 站“投降”并交出数据再在 A 站确认数据完整性最后才启动应用。每次演练都要记录开始时间、每个步骤耗时、数据校验结果这些记录既是你优化切换脚本的依据也是方案汇报时最有说服力的附件。演练中发现哪个步骤超过预期时间直接改脚本和 SOP不要靠下一次“注意一点”解决。4. 双活踩坑与排查脑裂、性能劣化和一致性组这三个坎4.1 脑裂误判导致业务抖动现象、定位与心跳参数现象某天存储侧报“双活域已分裂”但两端阵列本身完全健康网络也通主机侧业务 IO 瞬间卡顿甚至变只读。过几分钟自动恢复查不到磁盘错误和链路告警每次都是谜一样的抖动。原因心跳链路到其中一端发生过短暂拥塞出发了仲裁的判死逻辑系统把一边隔离。最常见的是心跳流量和业务流量挤在同一条链路业务高峰出现微突发时心跳的探测包被延迟或丢弃仲裁误以为该站点失联。这类问题之所以玄学是因为链路平时都正常故障窗口只有几百毫秒。解决先确认仲裁链路和业务链路是否物理隔离或做了独立 QoS微信公众号里的定位命令可以参考但我一般直接看仲裁日志里的丢票记录比看存储日志更快。把判死阈值从“连续 2 次心跳失败”调到“连续 5 次”给瞬时抖动留缓冲。同时给心跳包设置独立的 DSCP 标记让交换机优先转发这个配置要和网络组一起评审单靠存储侧无法完成。4.2 开了双活后性能劣化同步复制的时延预算现象双活上线前存储写时延 0.8ms上线后变成 4ms数据库日志组提交明显变慢批处理跑批时间拉长。业务方反馈“双活拖慢了系统”压力都给了存储组。原因同步复制模式下每一个写 IO 都要等对端确认IO 的响应时间天然等于“本端写入 链路往返 对端写入”。如果两端存储的写缓存策略是 write-throughIO 直接落到物理盘时延会急剧放大。另外 DCI 带宽不够时队列里的 IO 会一起堆积表现为时延飙升而不是带宽跑满。解决先确认写缓存策略调整成 write-back 并启用了镜像缓存让两端缓存都接收写请求后再返回确认这种情况下时延主要取决于链路往返。再检查链路实际有效带宽每个写 IO 到对端都会产生一份复制流量按峰值 IOPS 乘平均 IO 大小乘 2 核算达不到就先扩容链路。热点卷放在全闪盘上并单独配 QoS避免和其他业务卷争抢缓存。优化后时延一般能回到原生时延的 1.2 到 1.5 倍如果还差很多链路才是瓶颈。4.3 切换后数据不一致一致性组没有跟着业务一起切现象演练时 A 站断电B 站接管数据库数据库实例起不来报控制文件和数据文件不一致或者日志文件找不到对应的数据块。原因双活配置时只把数据文件所在的 LUN 加进了双活日志文件和控制文件的 LUN 不在同一个一致性组里。数据库的崩溃恢复依赖“日志 数据文件 控制文件”的一致性这三者的 LUN 被拆在两个组里切换后各自的状态不在同一个时间点数据库自然无法完成恢复。解决按应用维度重新梳理业务卷组把数据库的数据文件、在线日志、控制文件、归档目录全部放进同一个一致性组确保切换时整组一起切。切换操作也以一致性组为最小单元不要单独操作某个 LUN。更稳的做法是数据库层再叠加一个应用级复制比如用数据库自带的同步机制存储双活和应用复制互为兜底任何一层失效另一层还能救回来。这个双保险只做在最核心的 1 到 2 套系统上成本可控。4.4 双活运维体系没跟上半年不演练就等于没有容灾现象双活项目验收后半年没人碰突发故障时值班人员按照 SOP 切换失败了。检查发现仲裁进程证书过期、存储一端因为单边升级微码漂移、新扩容的 LUN 没加入一致性组多路径配置文件在主机变更时被覆盖。原因双活不是“配置完就结束”它是一套需要长期运维的体系。数据中心运维把双活当成普通存储管理只顾日常巡检不关注双活专有指标变更管理缺失导致两端配置漂移演练只做桌面推演不碰真实切换命令问题全被掩盖到故障那一刻。解决建立双活专项巡检每天检查双活域状态、一致性组成员、心跳链路时延、主机多路径路径数量这些指标用脚本采集并推送告警比人眼盯控制台可靠。证书、固件版本、配置文件变更全部纳入变更清单两端版本必须同步升级。每季度做一次真切换演练至少每半年一次完整回切演练要记录切换耗时、失败步骤并修订 SOP。没有配套运维体系的容灾本质上是给审计看的 PPT真到用的时候大概率翻车。5. 把方案写进 PPTTCO 口径、边界说明和分期路线的四个技巧最终方案要回到汇报材料上。能在评审会上通过的 PPT不是架构图画得漂亮而是把指标、代价和边界讲清楚了。先给指标再给架构。首页放一张对比表RPO 和 RTO 用数字说话单机房 RPO 小时级、RTO 半天以上主备 RPO 分钟级、RTO 半小时到数小时双活 RPO 为 0、RTO 分钟级。决策人只看这个表决定值不值得投入。方案RPORTO投入特点典型适用单机房小时级半天以上最低非核心系统同城主备分钟级半小时到数小时中等一般业务系统同城双活0分钟级存储容量 ×2 加专线与仲裁数据库、支付等核心系统TCO 分析要列全不能只写存储设备成本。两套存储容量、机柜改造、暖通和 UPS 余量、专线年费、仲裁机房租金、多路径软件许可、每年演练人天全部摊到 3 年看。常见测算里双活的总体拥有成本是同容量主备方案的 1.8 到 2.5 倍这个差价要和业务中断损失放在同一页让决策人自己权衡。边界条件必须写清楚。同城双活有物理边界常规做法适用 50 到 100 公里以内、链路往返时延小于 1.5ms传输距离拉长应用时延和脑裂风险都在涨这个结论要在方案里明说避免验收时扯皮。同时标注好依赖条件机房双路供电、暖通按满负荷预留、DCI 链路冗余、仲裁独立部署。最后给分期路线。第一期只做核心数据库双活配数据库层复制做双保险第二期把一般业务放到分布式存储双活第三期接入统一容灾管理平台做统一的切换编排。分期的好处是每一期都有明确验收指标投入可控团队也有时间消化运维能力。我做过的几个双活项目里最后真正敢拍胸脯说“敢切”的都是把一致性组清单和演练脚本当代码库一样维护的团队。指标写不进 PPT每一次切换记录和回切时长才是方案真实可信的注脚。守住这条双活方案才不是装修出来的效果图。希望帮到你。本文还有配套的精品资源点击获取
返回列表