当前位置: 首页 > news >正文

通过Nginx负载均衡+Keepalived实现业务高可用

通过Nginx负载均衡和Keepalived可以实现业务的高可用,以下是详细的实现步骤:

环境准备

假设我们有3台服务器,IP地址分别为:

  • 服务器1(Nginx + Keepalived 主节点):192.168.1.100
  • 服务器2(Nginx + Keepalived 备节点):192.168.1.101
  • 后端应用服务器:192.168.1.102、192.168.1.103

步骤一:安装Nginx和Keepalived

在服务器1和服务器2上分别安装Nginx和Keepalived:

安装Nginx
# 更新系统包列表
sudo apt update
# 安装Nginx
sudo apt install nginx -y
安装Keepalived
sudo apt install keepalived -y

步骤二:配置Nginx负载均衡

在服务器1和服务器2上进行相同的Nginx配置。编辑Nginx的配置文件 /etc/nginx/sites-available/default

http {
    upstream backend {
        server 192.168.1.102;
        server 192.168.1.103;
    }

    server {
        listen 80;
        server_name _;

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

上述配置中,upstream 块定义了后端应用服务器列表,server 块将所有请求代理到后端服务器。

配置完成后,重启Nginx服务:

sudo systemctl restart nginx

步骤三:配置Keepalived

主节点(服务器1)配置

编辑 /etc/keepalived/keepalived.conf 文件:

! Configuration File for keepalived

global_defs {
    router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.110
    }
}

virtual_server 192.168.1.110 80 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 192.168.1.100 80 {
        weight 1
        SSL_GET {
            url {
              path /
              digest ff20ad2481f8d0385d96a347da6cdb0c
            }
            url {
              path /mrtg/
              digest 9b3a0c85a8872a256d6939da88aabd8cd
            }
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}
  • state MASTER:表示该节点为主节点。
  • interface eth0:指定使用的网络接口。
  • virtual_router_id 51:虚拟路由ID,主备节点需保持一致。
  • priority 100:优先级,主节点优先级要高于备节点。
  • virtual_ipaddress:指定虚拟IP地址(VIP)。
备节点(服务器2)配置

编辑 /etc/keepalived/keepalived.conf 文件:

! Configuration File for keepalived

global_defs {
    router_id LVS_BACKUP
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.110
    }
}

virtual_server 192.168.1.110 80 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 192.168.1.101 80 {
        weight 1
        SSL_GET {
            url {
              path /
              digest ff20ad2481f8d0385d96a347da6cdb0c
            }
            url {
              path /mrtg/
              digest 9b3a0c85a8872a256d6939da88aabd8cd
            }
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}

与主节点配置的主要区别在于 stateBACKUPpriority 较低。

配置完成后,分别在服务器1和服务器2上启动Keepalived服务:

sudo systemctl start keepalived
sudo systemctl enable keepalived

步骤四:验证高可用性

  • 访问业务:在客户端浏览器中输入虚拟IP地址 192.168.1.110,应该可以正常访问后端应用服务。
  • 模拟主节点故障:在服务器1上停止Keepalived服务:
sudo systemctl stop keepalived

此时,虚拟IP地址会自动漂移到服务器2上,再次在客户端浏览器中输入虚拟IP地址,仍然可以正常访问后端应用服务。

  • 恢复主节点:在服务器1上启动Keepalived服务:
sudo systemctl start keepalived

由于主节点优先级较高,虚拟IP地址会再次漂移回服务器1。

注意事项

  • 确保服务器之间网络连通,并且防火墙允许相关端口(如80、VRRP协议)的通信。
  • 可以根据实际需求调整Nginx的负载均衡算法和Keepalived的优先级等参数。

相关文章:

  • Unity:使用DoTween实现按钮的缩放
  • Ubuntu 22.04 安装Nvidia驱动加速deepseek
  • 大模型RAG中的retrieve策略
  • AE 安装包 绿色版(Win,Mac)(2018-2025)合集
  • conda env remove与conda remove
  • RuoYi使用$.modal.closeTab方法关闭当前tab标签页刷新另外一个tab标签页
  • Python毕业设计选题:基于Python的社区爱心养老管理系统设计与实现_django
  • 国漫工业化革命:AI如何让“一人团队”产出影视级动画?
  • Bend Labs弯曲传感器:柔性设计,多轴测量,高精度传感
  • 时间无关和时间相关的N-S方程
  • 凸函数和凹函数的定义怎么来的?
  • openssl的aes128_ECB加密解密运算实例
  • 【精】使用 Apktool 反编译 APK 并重新签名的详细教程
  • 工具MyBatis Generator(MBG)
  • 网页聊天室测试报告
  • ubuntu下r8125网卡重启丢失修复案例一则
  • 使用 Java 更新 Word 文档中的图表数据-超详细
  • Qt 对象树详解:从原理到运用
  • 多线程之旅:锁策略
  • C++中map容器常见用法(AI)