一种可快速恢复的Zabbix高可用架构设计
做运维的朋友们可能都有过这样的深夜惊魂好容器完成了监控的Server、Proxy的部署、告警的收敛监控的覆盖率也达标了结果承载Zabbix Server和PostgreSQL的机器突然宕机。那一刻不是“少看几张图”的问题而是整个团队瞬间“告警失明”。监控对象越多积累的数据量就越大恢复就会越繁琐这个时候快速的恢复系统的可用是最为重要的任务所以现在和大家分享一下我在设计这套系统时的取舍与思考。第一部分痛点与取舍——我们为什么要这么设计做高可用本质上是一场“拿什么换什么”的交易。我们要解决的问题非常明确监控对象多环境复杂。一旦主机故障最要命的不是数据丢了而是在最需要告警的时候我们失去了全部告警能力。基于这个需求定下了三条硬约束无单点故障无论是zabbix server还是数据库都需要冗余的设计。复制是异步的数据是持续的写入的异步传输虽然可能会损失一些数据可以通过通过架构上的设计来避免但是保证主server的写入性能毕竟监控项数量起来了采集的数据量写入也不小。底线是分钟级恢复我们可以接受丢失几分钟的数据但绝对不能接受系统停摆几个小时。认清了现实我们确立了按优先级排序的三条取舍原则第一优先级绝不出双主 一切。数据分叉双主是不可逆的灾难而停机是可恢复的。所以在任何不确定的情况下我们的答案都是“不动作”。第二优先级可用性 零丢失。我们要的是“分钟级恢复可控丢失”。为了快速拉起服务我们愿意牺牲那一点点还没来得及同步的数据。第三优先级好维护 聪明。我们拒绝引入Keepalived、etcd或Patroni这些复杂的组件。我们只需要一个状态命令和一张决策清单。归位要人跑、强制启动要人敲越简单越不容易出错。所以这套方案解决的是“可用性”问题而不是“数据保全”问题。我们要保管的不是数据反正有主备两份而是“能登录节点”的能力。根据这些原则总体架构图如下架构非常简单就是两台配置一样的虚拟机作为盛昌服务器另外拿一台配置略低的服务器当作仲裁机生产机定期将自己的状态上报给到仲裁再依据仲裁提供的信息决定自己当前的服务启停当无法与生产服务器通信时保持当前服务状态。当前大部分使用场景中监控数量不超过五十万NVPS大概也是在5000以内实际NVPS我个人不是很看重毕竟一条日志和一个整数的写入在NVPS的计算里面体现不出差异但是对于系统资源的消耗是完全不一样的另外采集数据经过zabbix proxy整理以后到server通常都是顺序的写入了对存储的压力并不大反而要对历史数据进行分析的时候会产生大量的离散读这个时候压力是最大的。所以大部分场景中把数据库和zabbix server和DB部署在同一个虚拟机里面是能够应付的带来的好处对外是一个独立的环境运维起来相对简单在本方案中实际有两套完整的监控系统因为zabbix的前端基本就是静态的所以只要保证后端数据库的数据库完整前端就能正常操作。最后因为数据库是完全复制所以也方便做演练。第二部分不同场景的应对——出了事各自怎么办高可用架构不是装完就万事大吉而是要看它在各种极端情况下的表现。我们把各种故障场景的“损失”和“收益”做了一个盘点故障场景收益做对了什么损失付出了什么代价主库真故障60秒内做出决策约2分钟服务在VIP上恢复少量数据丢失主库计划内重启数据零丢失维护窗口内若发生真故障系统不会自动切换备库故障主库继续服务业务不受影响进入“一台服务、零台备份”的脆弱状态可能静默数月仲裁节点故障主库继续服务不中断失去自动切换能力需人工兜底网络分区绝不发生双主该切的时候没切服务不中断但失去高可用旧主库修复回来自动尝试归位一次故障期间未同步的写入永久丢失双主/撞车无收益正在发生数据分叉最严重的灾难复制早已中断后才故障拒绝接管防止丢失更多数据服务停摆直到人工介入两台同时重启自动各归各位无损失第三部分灵活的仲裁设计——怎么防止“脑裂”为什么我们需要第三台仲裁机器想象一下两台机器互相判断时如果网络分区了两边都看不到对方。这时候两边都可能觉得自己才是对的从而都去接管VIP这就是可怕的“双主”。第三台仲裁节点的价值就是“站在两边之外”。它能区分“两台都联系不上它”和“另一台真的死了”。在我们的系统里有两条雷打不动的不变式我是主库 ⇔ 我持有VIP身份不是靠嘴说的是靠绑上VIP这个动作来证明的。 2.成为主库 本机自证 仲裁许可缺一不可。仲裁许可的确切含义是VIP没有别人持有且没有任何证据表明对端正在服务。一次自动接管必须连过五道闸门总开关打开 → 复制是刚刚断的不是早就断了 → 仲裁可达且判定新鲜 → 判定结果为allow → VIP空闲且配置一致。在这里证据是有分级的带外观测 网络观测 自报。我们能确证的只有两件事VIP在哪台、对端在不在复制。该两项条件大于除此之外的一切读数。在遇到网络分区或仲裁宕机时系统会主动放弃自动化宁可“该切不切”也绝不双主。“什么都不做”也是一种极其重要的应对策略。第四部分极端情况下的恢复当故障发生旧主库修复后为什么归位必须是两阶段的归位的意思是让旧主库退回成备库并重新接回复制。自动程序只做两件事停掉本机的PG然后尝试归位一次。为什么只试一次因为每次归位都要停PG、回退数据目录绝不能变成无限重试的死循环。拉起旧主库必须让人来确认。这里有一个强制启动force的设计。当仲裁坏了但主库必须尽快起来时人可以使用force命令。它省掉了繁琐的仪式但不降级判据。它只解锁仲裁许可不解锁VIP检查。一句话绕过仲裁不绕过VIP。我们要时刻警惕最贵的错误——双主。数据分叉不可逆而停机可恢复。所以我们在绑VIP前后各复查一次值守程序也是第二道闸门。每一个不确定的地方答案都是“不动作”。–第五部分重建方式的考量归位是有代价的但也留了退路。增量归位pg_rewind是分钟级的如果失败才会退到全量重建那是小时级的。我们有一条铁律旧数据目录改名但不删。脚本绝不替人删数据这是最后一份“归位前”的现场证据。为了配合这套架构我们定下了三条核心纪律 1.不确定就不动作宁可该切不切人工兜底不可不该切却切了。 2.能确证的只有两件事VIP在哪台、对端在不在复制其余都是自述。 3.恢复速度换少量数据用分钟级恢复可控丢失换来“绝不双主”的底线。此外没有任何东西可以直连节点真实IP的5432端口所有流量必须走VIP。写在最后高可用架构从来不是追求100%不宕机而是在灾难发生时用最小的代价换取业务的延续。我们接受了分钟级的数据丢失接受了偶尔的人工兜底换来的极端条件下快速恢复的能力。运维的本质就是在各种不确定性中寻找那个最稳妥的平衡点。希望这次的分享能给正在搭建高可用架构的你带来一点不一样的启发。个人认知也有限其中若有错误之处也欢迎大家指正。项目地址https://gitee.com/liujun0253/zabbix-ha

相关新闻

2026网站创建用什么ai建站系统?科技赋能才能事半功倍!

2026网站创建用什么ai建站系统?科技赋能才能事半功倍!

2026网站创建用什么AI建站系统?科技赋能才能事半功倍!中国信通院2026年初发布的《中小企业数字化发展白皮书》显示,国内超六成中小企业将“低成本快速搭建线上阵地”列为数字化转型首要需求,AI建站系统凭借低门槛、高效率、全链路…

2026/10/15 4:01:45 阅读更多 →
做了这么久技术博主,我从后台私信里看透了这几种人

做了这么久技术博主,我从后台私信里看透了这几种人

做技术专栏这么久,后台私信几千条,我现在是分情况处理的——但一开始不是。 刚开号那会儿我每条都回。有人问问题,我认认真真写解答;有人要加微信,我不好意思拒绝;有人半夜甩过来一整段代码让帮忙看&#x…

2026/10/15 4:01:45 阅读更多 →
从零开始用Canvas开发五子棋网页游戏:技术选型、AI博弈与实战解析

从零开始用Canvas开发五子棋网页游戏:技术选型、AI博弈与实战解析

1. 项目设计与技术选型思路1.1 这个项目到底在做什么五子棋网页版小游戏,是前端练手项目里出现频率极高的一种。它看起来简单,但如果把完整需求列出来,会发现麻雀虽小五脏俱全:棋盘渲染、落子交互、胜负判定、悔棋、重置、人机对战…

2026/10/15 4:01:45 阅读更多 →

最新新闻

MIPS核心指令硬件原理与工程避坑指南

MIPS核心指令硬件原理与工程避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 4:46:53 阅读更多 →
iOS应用代码保护与Ipa Guard命令行自动化集成指南

iOS应用代码保护与Ipa Guard命令行自动化集成指南

1. 项目背景与核心价值在iOS应用开发领域,代码保护一直是开发者关注的重点。随着移动应用市场的竞争加剧,防止逆向工程和代码窃取变得尤为重要。传统的代码混淆工具往往需要手动操作,这在持续集成和自动化部署流程中显得效率低下。Ipa Guard命…

2026/10/15 4:46:53 阅读更多 →
Samba容器化实战:多租户隔离、协议兼容与权限映射

Samba容器化实战:多租户隔离、协议兼容与权限映射

1. 为什么在容器里跑Samba,而不是直接装在宿主机上?“Docker里跑Samba?这不反直觉吗?”——这是我第一次被团队同事问到这个问题时的真实反应。当时我们正在重构一个老旧的文件协作系统,原方案是在物理服务器上直接部署…

2026/10/15 4:46:53 阅读更多 →
STM32+华为云IoT+Qt:从传感器到云端的物联网数据链路实战

STM32+华为云IoT+Qt:从传感器到云端的物联网数据链路实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 4:46:53 阅读更多 →
沙箱代理工作流实战:隔离、权限与提示注入防御

沙箱代理工作流实战:隔离、权限与提示注入防御

1. 沙箱代理工作流到底在解决什么问题第一次接触“沙箱代理工作流”这个概念,是在一个自动化任务编排的项目里。当时团队想让一个智能代理去帮我们处理一批外部数据:抓取、清洗、分类、再写回内部系统。听起来很顺,但真正跑起来才发现&#x…

2026/10/15 4:46:53 阅读更多 →
模板代码生成工具:从元数据到可用接口的完整实现

模板代码生成工具:从元数据到可用接口的完整实现

1. 为什么需要模板代码生成工具:一大半重复代码其实不该手写做后端开发的朋友应该都有过这种体验:新项目启动,建表、写实体、写Mapper、写Service接口和实现、写Controller,然后前端再把列表页、表单页、弹窗、状态标签挨个撸一遍…

2026/10/15 4:45:53 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →