You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nagios XI高可用方案咨询:多数据中心主从复制手动灾备配置

Nagios XI 跨数据中心DR(主从+手动切换)实操方案

我之前帮几家企业搭建过跨数据中心的Nagios XI灾难恢复环境,刚好碰到过和你一样的网络限制——没法用corosync/pacemaker这类集群组件,只能搞主从复制加手动切换。结合实操经验,给你分享下能最小化数据损失的最优方案,都是踩过坑后总结出来的干货。

核心思路:分模块同步+预备用节点

既然没法做自动集群切换,核心就是把Nagios XI的核心数据、配置按模块做定时/增量同步,同时让备用节点保持“随时能接管”的状态,尽量缩减故障切换后的恢复时间和数据丢失量。

一、必须同步的核心模块

Nagios XI的核心内容分三类,一个都不能落:

  • 监控配置文件:主机/服务定义、模板、自定义命令等,主要在/usr/local/nagios/etc/和/usr/local/nagiosxi/etc/
  • 历史与状态数据:MySQL里的nagios(监控历史)和nagiosxi(XI应用数据)库,还有RRDtool性能数据文件(/usr/local/nagios/share/perfdata/)
  • XI应用配置:自定义视图、向导配置、用户权限等,集中在/usr/local/nagiosxi/html/下的缓存和配置目录

二、具体同步实现步骤

1. 配置文件:rsync+crontab增量同步

配置变更不会太频繁,用rsync做增量同步足够,搭配crontab定时执行:

  • 主节点写个同步脚本sync_nagios_configs.sh:
    #!/bin/bash
    DR_NODE="dr-nagios.yourdomain.com"
    SYNC_USER="nagios_sync"
    
    # 同步核心监控配置
    rsync -avz --delete /usr/local/nagios/etc/ ${SYNC_USER}@${DR_NODE}:/usr/local/nagios/etc/
    # 同步XI的应用配置
    rsync -avz --delete /usr/local/nagiosxi/etc/ ${SYNC_USER}@${DR_NODE}:/usr/local/nagiosxi/etc/
    # 同步自定义监控向导
    rsync -avz --delete /usr/local/nagiosxi/html/includes/configwizards/ ${SYNC_USER}@${DR_NODE}:/usr/local/nagiosxi/html/includes/configwizards/
    
  • DR节点配置SSH密钥登录,让rsync不用输密码
  • crontab设每5分钟同步一次:*/5 * * * * /root/sync_nagios_configs.sh > /var/log/nagios_config_sync.log 2>&1
  • 注意:平时DR节点的nagios服务要停着,避免重复监控;同步后不用立刻重启DR节点服务,切换时再处理就行。

2. MySQL数据:半同步主从复制(优先)

要最小化数据损失,半同步复制比异步靠谱——主节点提交事务后,必须等DR节点的从库接收并写入中继日志才返回,能避免主节点挂了后数据没传到从库的情况:

  • 主节点/etc/my.cnf(或/etc/mysql/my.cnf)配置:
    [mysqld]
    server-id=1
    log-bin=mysql-bin
    binlog-do-db=nagios
    binlog-do-db=nagiosxi
    # 开启半同步主库插件
    plugin-load-add=rpl_semi_sync_master.so
    rpl_semi_sync_master_enabled=1
    rpl_semi_sync_master_timeout=10000  # 10秒超时后降级为异步,避免主库挂起
    
  • DR节点my.cnf配置:
    [mysqld]
    server-id=2
    relay-log=relay-bin
    read-only=1  # 从库只读,防止误写
    # 开启半同步从库插件
    plugin-load-add=rpl_semi_sync_slave.so
    rpl_semi_sync_slave_enabled=1
    
  • 配置主从复制账号,启动从库的IO和SQL线程,之后定期用SHOW SLAVE STATUS\G检查延迟,重点看Seconds_Behind_Master,超过10秒就得排查网络或主库压力了。

3. RRDtool性能数据:rsync定时同步

RRD是二进制文件,增量同步有点麻烦,我常用两种方式:

  • 常规方案:每15分钟用rsync同步整个perfdata目录,rsync会自动只传变化的部分,15分钟的性能数据损失在可接受范围内
  • 大数据量方案:主节点用rrdcached缓存性能数据,同步缓存目录到DR节点,能减少同步的IO压力
  • 注意:DR节点的perfdata目录权限必须和主节点一致(nagios:nagios),不然Nagios读不了数据。

三、手动故障切换流程(最小化损失版)

主节点挂了后,按这个步骤操作:

  1. 最后一次抢救同步(如果主节点还能通):手动执行配置和RRD同步脚本,把主节点最后几分钟的数据拉到DR节点,能减少损失
  2. 隔离主节点:如果主节点还能操作,立刻停掉所有Nagios相关服务,避免恢复后双写冲突
  3. DR节点接管:
    • 停掉MySQL从库模式:STOP SLAVE; RESET SLAVE ALL;,然后注释掉my.cnf里的read-only=1,重启MySQL
    • 启动Nagios和XI服务:systemctl start nagios nagiosxi httpd
    • 验证:登录XI UI,检查主机/服务监控状态、历史数据是否正常
  4. 切换访问入口:把原来指向主节点的DNS或VIP改成DR节点的地址,让用户和监控代理连到新主节点

四、额外优化建议(进一步降低损失)

  • 自动备份兜底:主节点每天自动备份Nagios XI配置,同步到DR节点,万一同步出问题,还有备份可以恢复
  • 定期演练切换:每季度手动切换一次,验证同步完整性和流程顺畅度,别等真出事才手忙脚乱
  • 监控同步状态:在主节点上监控rsync日志和MySQL从库延迟,同步失败或延迟过高立刻报警
  • 环境完全一致:DR节点的OS版本、Nagios XI版本、依赖包、防火墙规则必须和主节点一模一样,避免切换时出现兼容性问题

踩过的坑提醒

  • RRD文件同步时,如果主节点的Nagios正在写文件,同步过去的RRD会损坏!后来我改成同步前停10秒Nagios:systemctl stop nagios; sleep 10; rsync...; systemctl start nagios,虽然有10秒监控中断,但能保证文件完整
  • 半同步超时问题:跨数据中心网络抖动时,主节点会降级为异步,这时候可能丢数据,建议监控Rpl_semi_sync_master_status状态,变成OFF就报警
  • DR节点平时一定要停Nagios服务!不然会重复发告警,用户会收到双倍通知,体验极差

内容的提问来源于stack exchange,提问作者RMK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:09:26