写点什么

基于 Nginx 的大型互联网集群架构与实战方案

作者:EquatorCoco
  • 2024-10-11
    福建
  • 本文字数:2746 字

    阅读完需:约 9 分钟

1. Nginx 负载均衡基础配置


首先,搭建一个基础的 Nginx 负载均衡器,用于将流量分发到多个后端服务器上。


步骤 1.1:安装 Nginx


在每台要作为负载均衡器的服务器上,安装 Nginx。可以使用包管理工具进行安装,例如在 Ubuntu 上执行以下命令:


sudo apt updatesudo apt install nginx
复制代码


步骤 1.2:配置 Nginx 负载均衡


Nginx 的核心是配置文件 nginx.conf,我们可以在其中定义后端服务器池以及负载均衡策略。以下是一个简单的 Nginx 负载均衡配置:


# 定义一个名为 backend 的后端服务器池upstream backend {    server backend1.example.com weight=5;  # 设置权重    server backend2.example.com weight=3;    server backend3.example.com weight=2;        # 启用健康检查(需要 Nginx Plus 支持开箱配置,开源版本需要第三方模块)    # Nginx Plus 示例:    health_check interval=10s fails=3 passes=2;}# 配置 HTTP 服务器server {    listen 80;    server_name loadbalancer.example.com;    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;        proxy_set_header X-Forwarded-Proto $scheme;    }}
复制代码


配置详解:


  • upstream 指令:定义了后端服务器池(backend),并为各服务器分配了不同的权重,Nginx 根据权重将流量按照比例分发到后端服务器。

  • 健康检查:此配置会定期检查后端服务器是否可用,确保当某个服务器宕机时,不会继续向其发送请求。

  • proxy_pass:将客户端请求代理到后端服务器池。


步骤 1.3:启动和测试 Nginx


确保配置无误后,启动或重启 Nginx 服务:


sudo nginx -t  # 测试配置文件是否正确sudo systemctl restart nginx  # 重启 Nginx
复制代码


测试:通过访问 http://loadbalancer.example.com,验证请求是否被均匀分发到后端服务器。


2. 高可用性配置(Keepalived + Nginx)


单独使用 Nginx 进行负载均衡仍然会面临单点故障问题。如果前端的 Nginx 宕机,整个服务将不可用。因此,我们需要通过 Keepalived 实现高可用的 Nginx 集群。


步骤 2.1:安装 Keepalived


在每台 Nginx 服务器上安装 Keepalived。以 Ubuntu 为例:


sudo apt install keepalived
复制代码


步骤 2.2:配置 Keepalived


Keepalived 通过虚拟 IP 地址(VIP)实现故障转移。当主服务器宕机时,VIP 自动切换到备用服务器,确保服务的高可用性。


在主 Nginx 服务器上,编辑 Keepalived 的配置文件 /etc/keepalived/keepalived.conf


vrrp_instance VI_1 {    state MASTER  # 主服务器    interface eth0  # 网络接口    virtual_router_id 51    priority 100  # 主服务器优先级较高    advert_int 1  # 广播间隔    authentication {        auth_type PASS        auth_pass 123456  # 密码    }    virtual_ipaddress {        192.168.0.100  # 虚拟IP地址    }    track_script {        chk_nginx  # 监控 Nginx 状态的脚本    }}
复制代码


在备用 Nginx 服务器上,将 state 设置为 BACKUP,并将 priority 设置为较低的值,例如 90。


步骤 2.3:监控 Nginx 状态


Keepalived 可以通过监控 Nginx 的运行状态来决定是否切换 VIP。创建一个监控脚本 /etc/keepalived/check_nginx.sh


#!/bin/bashif ! pidof nginx > /dev/nullthen    systemctl stop keepalived  # 如果 Nginx 停止,关闭 Keepalived 以触发 VIP 切换fi
复制代码


将此脚本添加为可执行:


sudo chmod +x /etc/keepalived/check_nginx.sh
复制代码


在 Keepalived 的配置文件中添加监控脚本:


vrrp_script chk_nginx {    script "/etc/keepalived/check_nginx.sh"    interval 2}
复制代码


步骤 2.4:启动 Keepalived


完成配置后,启动或重启 Keepalived 服务:


sudo systemctl restart keepalived
复制代码


测试:关闭主服务器的 Nginx,VIP 应该自动切换到备用服务器,确保服务不中断。


3. Nginx 健康检查和动态扩展


Nginx 可以结合健康检查功能,确保只有状态正常的服务器参与负载均衡。另外,动态扩展是应对突发流量的关键。以下是相关配置和实战方案。


步骤 3.1:配置健康检查(开源版本)


Nginx 开源版本不自带健康检查模块,可以通过第三方模块(如 ngx_http_healthcheck_module)实现健康检查。假设已安装此模块,配置如下:


upstream backend {    server backend1.example.com;    server backend2.example.com;    server backend3.example.com;
# 使用第三方模块实现健康检查 check interval=5000 rise=2 fall=5 timeout=2000;}
复制代码


步骤 3.2:动态扩展后端服务器


结合容器化技术(如 Docker 或 Kubernetes),可以根据流量自动扩展后端服务器。例如,在 Kubernetes 集群中可以使用 Horizontal Pod Autoscaler (HPA) 自动扩展应用服务的副本数。


以下是在 Kubernetes 中配置自动扩展的示例:


apiVersion: autoscaling/v1kind: HorizontalPodAutoscalermetadata:  name: backend-hpaspec:  scaleTargetRef:    apiVersion: apps/v1    kind: Deployment    name: backend  minReplicas: 3  maxReplicas: 10  targetCPUUtilizationPercentage: 70  # 当 CPU 利用率超过 70% 时扩容
复制代码


通过这种方式,后端服务可以根据负载动态扩展,Nginx 通过配置服务发现机制可以自动识别新的后端服务器。


4. Nginx SSL/TLS 配置


在生产环境中,启用 HTTPS 是必不可少的。以下是启用 SSL/TLS 的配置:


步骤 4.1:生成或获取 SSL 证书


使用 Let's Encrypt 生成免费的 SSL 证书:


sudo apt install certbot python3-certbot-nginxsudo certbot --nginx -d yourdomain.com
复制代码


步骤 4.2:配置 Nginx 使用 SSL


server {    listen 443 ssl;    server_name yourdomain.com;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
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; proxy_set_header X-Forwarded-Proto $scheme; }}
# 自动将 HTTP 请求重定向到 HTTPSserver { listen 80; server_name yourdomain.com; return 301 https://$host$request_uri;}
复制代码


总结


通过 Nginx 的负载均衡、Keepalived 实现高可用、动态扩展后端服务器以及健康检查,构建了一个高效、可扩展且高可用的互联网集群架构。


文章转载自:风轻雪棉

原文链接:https://www.cnblogs.com/fqxm/p/18457121

体验地址:http://www.jnpfsoft.com/?from=infoq

用户头像

EquatorCoco

关注

还未添加个人签名 2023-06-19 加入

还未添加个人简介

评论

发布
暂无评论
基于 Nginx 的大型互联网集群架构与实战方案_nginx_EquatorCoco_InfoQ写作社区