DukeDuke
主页
文档转换
关于我们
主页
文档转换
关于我们
  • Linux 系统

    • Linux 系统管理
    • Linux 网络管理
    • Linux 文件管理
    • Linux 命令大全
  • Nginx Web 服务器

    • Nginx 安装 与 配置
    • Nginx 负载均衡
    • Nginx SSL证书配置
    • Nginx Keepalived 高可用
  • Docker 容器

    • Docker 简介
    • Docker 安装与配置
    • Docker 命令
    • Docker 部署 Nginx
    • Docker 部署 MySQL
    • Docker 部署 Redis
  • 服务器

    • 塔式服务器
    • 机架式服务器
    • 刀片服务器
  • Git 版本控制
  • Jenkins 持续集成
  • Jmeter 性能测试
  • Let's Encrypt 免费SSL证书

搭建 Keepalived + Nginx 高可用

Keepalived 简介

Keepalived 是一个基于 VRRP 协议的高可用解决方案,主要用于实现服务器的高可用性。它能够检测服务器的状态,当主服务器出现故障时,自动将虚拟 IP 切换到备用服务器,确保服务的连续性。

主要特点

  • 基于 VRRP 协议实现高可用
  • 支持多种检测方式(TCP、HTTP、脚本等)
  • 配置简单,易于维护
  • 支持多组虚拟路由
  • 支持邮件通知

架构图

实际案例:Web 服务高可用部署

环境准备

  • 主服务器:192.168.1.101
  • 备服务器:192.168.1.102
  • 虚拟 IP:192.168.1.100
  • 后端 Web 服务器:192.168.1.201, 192.168.1.202

1. 安装必要软件

在两台服务器上执行:

# CentOS/RHEL
yum install -y nginx keepalived

# Ubuntu/Debian
apt-get install -y nginx keepalived

2. 配置 Nginx

主备服务器上的 Nginx 配置(/etc/nginx/nginx.conf):

http {
    upstream backend {
        server 192.168.1.201:80;
        server 192.168.1.202:80;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
}

3. 配置 Keepalived

主服务器配置(/etc/keepalived/keepalived.conf):

vrrp_script check_nginx {
    script "pidof nginx"
    interval 2
    weight 2
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.100
    }
    track_script {
        check_nginx
    }
}

备服务器配置:

vrrp_script check_nginx {
    script "pidof nginx"
    interval 2
    weight 2
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 90
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.100
    }
    track_script {
        check_nginx
    }
}

4. 启动服务

在两台服务器上执行:

systemctl start nginx
systemctl start keepalived
systemctl enable nginx
systemctl enable keepalived

5. 验证配置

  1. 检查虚拟 IP 是否在主服务器上:
ip addr show eth0
  1. 测试高可用性:
# 在主服务器上停止 Nginx
systemctl stop nginx
# 观察虚拟 IP 是否自动切换到备服务器

故障排查

常见问题及解决方案

  1. 虚拟 IP 无法切换

    • 检查防火墙设置
    • 确认 VRRP 协议端口(112)是否开放
    • 验证网络连接性
  2. Nginx 无法启动

    • 检查配置文件语法
    • 查看错误日志:tail -f /var/log/nginx/error.log
  3. Keepalived 状态异常

    • 检查日志:journalctl -u keepalived
    • 确认配置文件权限

最佳实践

  1. 监控建议

    • 使用 Prometheus + Grafana 监控服务器状态
    • 配置邮件告警通知
    • 定期检查日志文件
  2. 安全建议

    • 修改默认的认证密码
    • 限制 VRRP 协议的访问范围
    • 定期更新系统和软件包
  3. 性能优化

    • 根据实际负载调整 Nginx 工作进程数
    • 配置适当的连接超时时间
    • 启用 Nginx 缓存

总结

通过 Keepalived + Nginx 的配置,我们实现了一个高可用的负载均衡系统。该系统具有以下优势:

  • 自动故障转移
  • 负载均衡
  • 易于维护
  • 高可用性

在实际生产环境中,建议定期进行故障转移测试,确保系统在真实故障发生时能够正常工作。

最近更新:: 2026/4/17 13:21
Contributors: Duke
Prev
Nginx SSL证书配置