Apache主备配置同步需自动触发、校验与安全重载:主节点用inotify+rsync监听并推送变更,备节点先httpd -t校验再reload,配合Git版本追溯及健康检查防脑裂。

在 Apache 主备架构中,配置文件同步更新不能靠手动复制,否则容易出错、遗漏或不同步。核心思路是:主节点变更后自动触发同步,备节点接收并校验,再平滑重载服务。
使用 rsync + inotify 实现主节点自动触发
主服务器上监听 /etc/httpd/conf 和 /etc/httpd/conf.d/ 目录变化,一旦有修改(如保存新配置、启用虚拟主机),立即推送到备机:
- 安装 inotify-tools 和 rsync:
yum install -y inotify-tools rsync - 编写监听脚本(例如
/opt/bin/sync-httpd-conf.sh):#!/bin/bash SRC="/etc/httpd/" DST="backup@192.168.1.102:/etc/httpd/" INOTIFY_CMD="inotifywait -m -e modify,create,delete,move,attrib $SRC" $INOTIFY_CMD | while read path action file; do if [[ "$file" == *.conf || "$file" == *.conf.d ]]; then rsync -avz --delete --exclude='logs/' --exclude='run/' $SRC $DST ssh backup@192.168.1.102 "httpd -t && systemctl reload httpd 2>/dev/null" fi done - 用 systemd 或 nohup 后台运行该脚本,并设置开机自启
备节点需具备配置校验与安全重载能力
仅同步不校验风险极高——错误配置可能导致 reload 失败甚至服务中断。备节点应主动验证再生效:
- rsync 接收后不直接 reload,而是先执行
httpd -t检查语法 - 仅当返回码为 0 时才执行
systemctl reload httpd;否则发告警(如邮件或写日志) - 建议在备节点的 rsync 目标目录设为临时路径(如
/tmp/httpd-sync),校验通过后再cp -r覆盖真实配置,便于回滚
加入版本控制与变更追溯机制
避免“谁改了哪行”无法定位。可在主节点每次同步前自动生成 Git 提交:
- 将
/etc/httpd/初始化为本地 Git 仓库 - 同步脚本中增加:
cd /etc/httpd && git add . && git commit -m "Sync from $(hostname) at $(date)"
- 可选:推送至中心 Git 服务器(如 Gitea),供审计和回退
注意高可用场景下的 reload 安全性
Apache reload 在主备切换期间若失败,可能造成备机服务不可用。务必确保:
- 备节点 reload 前检查主节点是否仍健康(例如 curl 主的健康接口),避免脑裂下误 reload
- reload 使用
systemctl reload httpd而非 restart,保证连接不中断 - 配置中开启
GracefulShutdownTimeout,防止旧进程僵死










