温馨提示×

Linux Apache2如何实现高可用性

小樊
40
2026-01-01 12:13:15
栏目: 智能运维

Linux Apache2 高可用架构与落地步骤

一、总体架构与方案选型

  • 主备高可用(Active/Standby):两台或多台 Apache 节点共享一个虚拟 IP(VIP),通过 Keepalived + VRRP 实现故障自动切换,客户端始终访问同一个 VIP。适合无状态或会话可重建的场景。
  • 横向扩展(Active/Active):使用 Apache 的 mod_proxy_balancer 做反向代理与负载均衡,将请求分发到多个后端 Apache 节点;可叠加 Keepalived 为负载均衡器本身提供高可用。适合有状态或无状态服务,结合会话粘滞或会话共享使用。

二、方案一 主备高可用 Keepalived + VIP

  • 适用目标:消除单点故障,保障同一 IP 持续对外服务。
  • 核心思路:两台服务器运行 Apache,安装并配置 Keepalived;主节点持有 VIP,健康检查失败(如 httpd 不可用)时自动释放 VIP,备节点接管。
  • 实施要点(两台机器,示例网卡 ens160,VIP 192.168.10.252/24):
    1. 安装与启用服务
      • Ubuntu/Debian: sudo apt update && sudo apt install keepalived apache2
      • RHEL/CentOS: sudo yum install keepalived httpd && sudo systemctl enable --now httpd
    2. 编写健康检查脚本(/etc/keepalived/check_httpd.sh)
      • #!/usr/bin/env bash if systemctl is-active --quiet apache2; then exit 0; else exit 1; fi
      • chmod +x /etc/keepalived/check_httpd.sh
    3. 主节点 Keepalived 配置(/etc/keepalived/keepalived.conf)
      • global_defs { router_id web1 } vrrp_script check_httpd { script “/etc/keepalived/check_httpd.sh” interval 3 weight -50 fall 2 rise 1 } vrrp_instance VI_1 { state MASTER interface ens160 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS; auth_pass 1111 } virtual_ipaddress { 192.168.10.252/24 } track_script { check_httpd } }
    4. 备节点配置:将 state 改为 BACKUP,priority 略低(如 90),其余一致。
    5. 启动与验证
      • systemctl enable --now keepalived
      • ip addr show ens160 应能看到 VIP 在主节点;停止主节点 httpd 或 keepalived,观察 VIP 漂移到备节点。
  • 提示:生产环境建议将 VIP 绑定到同一二层网段;跨机房/跨网段需考虑 VRRP 兼容性与路由策略。

三、方案二 横向扩展 基于 Apache 的负载均衡集群

  • 适用目标:提升吞吐与容量,多台 Apache 共同承载流量。
  • 核心思路:选一台或多台作为负载均衡器(也可双机 Keepalived 保障 LB 高可用),后端部署多台 Apache 应用节点;使用 mod_proxy、mod_proxy_http、mod_proxy_balancer 实现反向代理与负载均衡。
  • 实施要点(以 Ubuntu/Debian 为例):
    1. 在所有 Apache 节点安装并启用模块
      • sudo a2enmod proxy proxy_http proxy_balancer lbmethod_byrequests headers
      • sudo systemctl restart apache2
    2. 负载均衡器配置(/etc/apache2/sites-available/loadbalancer.conf)
      • <VirtualHost *:80> ServerName yourdomain.com <Proxy balancer://mycluster> BalancerMember http://10.0.0.11:80 route=web1 BalancerMember http://10.0.0.12:80 route=web2 ProxySet lbmethod=byrequests ProxySet stickysession=JSESSIONID|ROUTEID # 可选:会话粘滞 ProxySet retry=30 ProxyPass / balancer://mycluster/ ProxyPassReverse / balancer://mycluster/

        可选:管理界面(仅内网开放)

        <Location /balancer-manager>

        SetHandler balancer-manager

        Require local

      • sudo a2ensite loadbalancer.conf && sudo systemctl reload apache2
    3. 后端节点:确保应用可独立访问(健康检查 URL 建议返回 200),静态资源与动态内容分离可进一步提升效率。
    4. 验证:访问域名观察多后端轮询;查看 /balancer-manager 页面检查成员状态与健康;会话粘滞对需要登录态的应用有效。
  • 提示:如需 HTTPS,可在 LB 终止 TLS(启用 mod_ssl、http2),后端仍用 HTTP,减少加解密开销。

四、关键优化与稳定性加固

  • 连接与会话
    • 启用 KeepAlive:KeepAlive On,MaxKeepAliveRequests 100,KeepAliveTimeout 2(繁忙站点建议 1–5 秒),降低握手开销同时避免连接占用过久。
    • 会话策略:无状态优先;有状态使用 stickysession(如 JSESSIONID/ROUTEID),或引入集中式会话存储(如 Redis)实现会话共享。
  • 并发与资源
    • 选择 MPM Event(或 Worker)替代 Prefork(高并发更友好):sudo a2dismod mpm_prefork && sudo a2enmod mpm_event && sudo systemctl restart apache2。
    • 参考 MPM Event 参数(按内存与压测调优):StartServers 4;MinSpareThreads 25;MaxSpareThreads 75;ThreadsPerChild 25;MaxRequestWorkers 150;MaxConnectionsPerChild 1000
  • 内容交付
    • 启用压缩:sudo a2enmod deflate;启用缓存:sudo a2enmod cache cache_disk;启用过期头:sudo a2enmod expires,减少重复生成与带宽占用。
  • 可靠性增强
    • 进程守护:配置 systemd 的 Restart=on-failure,使 Apache 异常退出后自动拉起;避免用定时重启替代故障治理。
    • 监控与告警:对 HTTP 5xx、后端不可用、VIP 漂移、连接数阈值设置告警;必要时引入 Prometheus + Grafana 做可视化监控。

五、快速选型与部署建议

  • 小规模、简单容灾:优先采用主备 + VIP(Keepalived),部署快、切换明确,适合大多数网站与内部系统。
  • 中大规模、高并发:采用Apache 负载均衡集群,前端可双 LB + Keepalived 保障入口高可用;后端无状态化并通过会话共享消除粘滞依赖。
  • 安全与合规:对外启用 TLS 1.2+ 与强加密套件,限制管理接口访问;对外域名与证书统一管理,证书到期自动续期(如 ACME)。
  • 发布与回滚:蓝绿发布或金丝雀发布配合负载均衡器摘除/恢复节点,降低变更风险;变更前在测试环境验证参数与容量。

0