1. 首页 > IT综合教程 > 正文

260. Nginx Plus负载均衡培训

一、Nginx Plus概述

Nginx Plus是Nginx的商业版本,在开源Nginx基础上增加了企业级功能,包括高级负载均衡、健康检查、动态配置、实时监控等。

1.1 Nginx Plus核心特性

  • 高级负载均衡:支持更多负载均衡算法和健康检查
  • 动态配置:通过API动态修改配置,无需重载
  • 实时监控:内置实时监控仪表盘
  • 会话持久化:多种会话保持方式

1.2 Nginx Plus与开源版对比

功能 开源版 Plus版
负载均衡算法 基础算法 高级算法
健康检查 被动检查 主动检查
动态配置 不支持 支持
监控仪表盘 不支持 内置
会话持久化 基础 高级

二、Nginx Plus安装

2.1 仓库安装

# 添加Nginx Plus仓库
# 需要购买许可证获取仓库证书
# 安装Nginx Plus
yum install -y nginx-plus
# 启动服务
systemctl start nginx
systemctl enable nginx
# 查看版本
nginx -v
# 输出示例
nginx version: nginx/1.25.3 (nginx-plus-r31)

三、高级负载均衡

3.1 负载均衡配置

# /etc/nginx/nginx.conf
upstream backend {
    zone backend 64k;
    
    # 服务器定义
    server 192.168.1.101:8080;
    server 192.168.1.102:8080;
    server 192.168.1.103:8080;
    
    # 高级负载均衡算法
    least_time header;  # 最少响应时间
    
    # 会话持久化
    sticky learn create=$upstream_cookie_examplecookie
             lookup=$cookie_examplecookie
             zone=client_sessions:1m;
}
server {
    listen 80;
    server_name fgedu.net.cn;
    
    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

3.2 负载均衡算法

# 轮询(默认)
upstream backend {
    server 192.168.1.101:8080;
    server 192.168.1.102:8080;
}
# 最少连接
upstream backend {
    least_conn;
    server 192.168.1.101:8080;
    server 192.168.1.102:8080;
}
# 最少时间(Plus专有)
upstream backend {
    least_time header;  # 基于响应头时间
    # least_time last_byte;  # 基于完整响应时间
    server 192.168.1.101:8080;
    server 192.168.1.102:8080;
}
# 一致性哈希
upstream backend {
    hash $request_uri consistent;
    server 192.168.1.101:8080;
    server 192.168.1.102:8080;
}
# 随机算法
upstream backend {
    random two least_conn;
    server 192.168.1.101:8080;
    server 192.168.1.102:8080;
}

四、主动健康检查

4.1 HTTP健康检查

upstream backend {
    zone backend 64k;
    
    server 192.168.1.101:8080;
    server 192.168.1.102:8080;
}
# 健康检查配置
match health_check {
    status 200-399;
    header Content-Type = text/html;
    body !~ "error";
}
server {
    listen 80;
    
    location / {
        proxy_pass http://backend;
        health_check interval=5s fails=3 passes=2 match=health_check;
    }
}

4.2 高级健康检查

# 多条件健康检查
match api_health {
    status 200;
    header Content-Type ~ "application/json";
    body ~ '"status":"healthy"';
}
# TCP健康检查
stream {
    upstream mysql {
        zone mysql 64k;
        server 192.168.1.101:3306;
        server 192.168.1.102:3306;
    }
    
    server {
        listen 3306;
        proxy_pass mysql;
        health_check interval=10s passes=2 fails=3;
    }
}
# 自定义健康检查
match custom_check {
    status 200;
    header X-Health = "OK";
    body ~ "ready";
}
server {
    location / {
        proxy_pass http://backend;
        health_check match=custom_check
                     interval=5s
                     jitter=1s
                     fails=3
                     passes=2
                     uri=/health;
    }
}

五、动态配置API

5.1 启用API

# 启用动态配置API
upstream backend {
    zone backend 64k;
    
    server 192.168.1.101:8080;
    server 192.168.1.102:8080;
}
server {
    listen 80;
    
    location /api {
        api write=on;
        allow 127.0.0.1;
        allow 192.168.1.0/24;
        deny all;
    }
    
    location / {
        proxy_pass http://backend;
    }
}

5.2 API操作示例

# 查看Upstream状态
curl http://fgedudb/api/6/http/upstreams/backend
# 输出示例
{
    "peers": [
        {
            "id": 0,
            "server": "192.168.1.101:8080",
            "name": "192.168.1.101:8080",
            "backup": false,
            "weight": 1,
            "state": "up",
            "active": 0,
            "requests": 1000,
            "responses": {
                "200": 1000
            }
        }
    ]
}
# 添加服务器
curl -X POST -d '{"server":"192.168.1.103:8080"}' \
    http://fgedudb/api/6/http/upstreams/backend/servers
# 修改服务器权重
curl -X PATCH -d '{"weight":5}' \
    http://fgedudb/api/6/http/upstreams/backend/servers/0
# 禁用服务器(排空连接)
curl -X PATCH -d '{"drain":true}' \
    http://fgedudb/api/6/http/upstreams/backend/servers/0
# 删除服务器
curl -X DELETE \
    http://fgedudb/api/6/http/upstreams/backend/servers/2

六、会话持久化

6.1 Cookie持久化

upstream backend {
    zone backend 64k;
    
    server 192.168.1.101:8080;
    server 192.168.1.102:8080;
    
    # Cookie方式
    sticky cookie srv_id expires=1h domain=fgedu.net.cn path=/;
}
server {
    listen 80;
    
    location / {
        proxy_pass http://backend;
    }
}

6.2 学习模式持久化

upstream backend {
    zone backend 64k;
    
    server 192.168.1.101:8080;
    server 192.168.1.102:8080;
    
    # 学习模式
    sticky learn create=$upstream_cookie_jsessionid
             lookup=$cookie_jsessionid
             zone=client_sessions:2m
             timeout=1h;
}
server {
    listen 80;
    
    location / {
        proxy_pass http://backend;
    }
}

七、实时监控

7.1 状态页面

server {
    listen 8080;
    
    location /status {
        status;
        allow 127.0.0.1;
        allow 192.168.1.0/24;
        deny all;
    }
    
    location /dashboard.html {
        root /usr/share/nginx/html;
    }
}
# 访问监控仪表盘
# http://fgedudb:8080/dashboard.html

7.2 API监控数据

# 获取统计信息
curl http://fgedudb/api/6/nginx
# 获取连接统计
curl http://fgedudb/api/6/connections
# 获取SSL统计
curl http://fgedudb/api/6/ssl
# 获取HTTP请求统计
curl http://fgedudb/api/6/http/requests
# 获取缓存统计
curl http://fgedudb/api/6/http/caches
# 输出示例
{
“version”: “1.25.3”,
“build”: “nginx-plus-r31”,
“address”: “192.168.1.100”,
“generation”: 5,
“load_timestamp”: “2024-01-15T10:30:00.000Z”,
“timestamp”: “2024-01-15T11:00:00.000Z”,
“pid”: 12345,
“ppid”: 12344,
“workers”: 4,
“connections”: {
“accepted”: 100000,
“dropped”: 0,
“active”: 500,
“idle”: 200
}
}

八、集群配置

8.1 状态共享

# 配置集群状态共享
cluster {
    name nginx_cluster;
    node 192.168.1.100;
    node 192.168.1.101;
    
    zone cluster_zone 1m;
}
# 共享Upstream状态
upstream backend {
    zone backend 64k;
    
    server 192.168.1.101:8080;
    server 192.168.1.102:8080;
    
    sticky learn create=$upstream_cookie_jsessionid
             lookup=$cookie_jsessionid
             zone=client_sessions:2m
             timeout=1h
             sync;
}

九、运维命令

9.1 常用管理命令

# 测试配置
nginx -t
# 重载配置
nginx -s reload
# 查看进程
ps -ef | grep nginx
# 查看连接
ss -tlnp | grep nginx
# 查看版本
nginx -v
nginx -V
# 使用API管理
# 查看所有upstream
curl http://fgedudb/api/6/http/upstreams
# 查看特定upstream
curl http://fgedudb/api/6/http/upstreams/backend
# 查看服务器状态
curl http://fgedudb/api/6/http/upstreams/backend/servers/0
# 查看keyval存储
curl http://fgedudb/api/6/http/keyvals

十、最佳实践

配置项 建议值 说明
健康检查间隔 5秒 及时检测故障
zone大小 64k-1m 根据服务器数量
会话超时 1小时 根据业务调整
API访问控制 限制IP 安全访问
注意事项:

  • API需要配置访问控制
  • 动态配置不持久化,需配合脚本
  • 定期备份配置文件
  • 监控资源使用情况

十一、总结

Nginx Plus是功能强大的企业级负载均衡解决方案。通过本培训文档,您应该掌握了:

from 培训视频:www.itpux.com

  • Nginx Plus与开源版的区别
  • 高级负载均衡算法配置
  • 主动健康检查配置
  • 动态配置API使用
  • 会话持久化配置
  • 实时监控和运维管理
IT运维培训文档系列 | 第260篇 | Nginx Plus负载均衡培训

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息