nginx

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > nginx > nginx+tomcat负载均衡群集

nginx+tomcat负载均衡群集部署步骤

作者:UFIT

这篇文章主要介绍了nginx+tomcat负载均衡群集部署步骤的相关资料,文中通过代码讲解了如何配置Nginx反向代理与Tomcat集群,详解轮询、权重等负载均衡算法,需要的朋友可以参考下

核心原理:

  1. Nginx: 作为反向代理服务器和负载均衡器。它接收所有来自客户端的 HTTP/HTTPS 请求。

  2. Tomcat 集群: 部署多个相同的 Tomcat 实例(称为节点或服务器),运行同一个Web应用。

  3. 负载分发: Nginx 根据配置的负载均衡算法(如轮询、权重、最少连接、IP哈希等)将请求转发到后端的某一个 Tomcat 实例上。

  4. 高可用: 如果某个 Tomcat 实例宕机,Nginx 能检测到并将其从可用服务器列表中剔除,将后续请求只发送给健康的实例,保证服务不中断。

部署步骤:

1. 准备环境

2. 配置 Tomcat 服务器

3. 配置 Nginx 负载均衡

编辑 Nginx 配置文件: 通常是 /etc/nginx/nginx.conf 或 /etc/nginx/conf.d/default.conf 或创建一个新的文件如 /etc/nginx/conf.d/load-balancer.conf。

配置 upstream 块: 定义一个后端 Tomcat 服务器池。

http {
    upstream tomcat_cluster {
        # 负载均衡算法 (可选: 默认是轮询 round-robin)
        # least_conn;   # 最少连接数
        # ip_hash;      # 基于客户端IP的Session粘滞
        # hash $cookie_<jsessionid_cookie_name> consistent; # 基于Session Cookie的粘滞
        # 定义后端Tomcat服务器列表
        # 格式: server <tomcat_server_ip>:<tomcat_port> [weight=数值] [max_fails=数值] [fail_timeout=时间];
        server 192.168.1.101:8080 weight=2 max_fails=3 fail_timeout=30s; # Tomcat 节点1, 权重2
        server 192.168.1.102:8080 weight=1 max_fails=3 fail_timeout=30s; # Tomcat 节点2, 权重1
        server 192.168.1.103:8080 backup; # 备用节点,只有当主节点都不可用时才启用
    }
    ...
}

配置 server 块: 设置 Nginx 监听端口,并将请求代理到 upstream 池。

server {
    listen 80;       # Nginx监听的端口 (通常是80或443)
    server_name yourdomain.com www.yourdomain.com; # 你的域名或服务器IP

    location / {
        # 将请求代理到上面定义的upstream池 'tomcat_cluster'
        proxy_pass http://tomcat_cluster;

        # 重要的代理设置 (通常需要添加)
        proxy_set_header Host $host;       # 传递原始请求的主机头
        proxy_set_header X-Real-IP $remote_addr; # 传递客户端真实IP
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 传递代理链IP
        proxy_set_header X-Forwarded-Proto $scheme; # 传递原始协议 (http/https)

        # 连接超时设置 (根据需要调整)
        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;

        # 如果使用基于Cookie的Session粘滞,确保传递Session Cookie
        proxy_cookie_path / /;
        # 或者更精确地处理JSESSIONID路径 (根据你的应用配置)
        # proxy_cookie_path ~*^/.* /;
    }

    # 可选: 配置静态文件由Nginx直接处理,减轻Tomcat压力
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|html|txt|woff|woff2|ttf|svg)$ {
        root /path/to/your/static/files; # 静态文件存放的本地路径
        expires 30d;                    # 设置浏览器缓存过期时间
        access_log off;                 # 可选:关闭静态文件访问日志
    }

    # 可选: 错误页面重定向
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }
}

4. 测试与验证

  1. 检查配置: 运行 sudo nginx -t 检查 Nginx 配置语法是否正确。

  2. 重载 Nginx: 运行 sudo systemctl reload nginx 或 sudo nginx -s reload 应用新配置。

  3. 访问测试: 使用浏览器或 curl 访问 Nginx 的 IP 地址或域名 (http://nginx_server_ip_or_domain)。应该能看到你的应用。

  4. 负载均衡验证:

    • 反复刷新浏览器或使用工具(如 ab, siege, wrk)发送大量请求。

    • 检查各个 Tomcat 实例的访问日志 (logs/localhost_access_log.<date>.txt) 或应用日志,观察请求是否被均匀(或按权重)分发到不同的节点。

  5. Session 测试:

    • 登录应用(触发 Session 创建)。

    • 检查 Session Cookie(通常是 JSESSIONID)。

    • 如果使用 ip_hash,尝试从不同客户端 IP 访问,观察 Session 是否跟随 IP 走。

    • 如果使用 Session 复制或 Redis,尝试停掉一个正在活跃服务的 Tomcat 节点(模拟故障),然后继续操作应用,检查 Session 是否还在(没有要求重新登录或丢失数据)。

  6. 故障转移测试:

    • 手动停止一个 Tomcat 实例 (./bin/shutdown.sh)。

    • 继续访问应用。Nginx 应该很快(在 fail_timeout 内)检测到该节点失败,并将后续请求只发送给健康的节点。

    • 观察 Nginx 错误日志 (/var/log/nginx/error.log) 是否有连接后端失败的信息。

    • 重新启动停掉的 Tomcat 实例。Nginx 应该能自动将其重新加入可用服务器池(根据健康检查机制)。

5. 监控与维护

关键优势:

常见问题与注意事项:

总结 

到此这篇关于nginx+tomcat负载均衡群集部署步骤的文章就介绍到这了,更多相关nginx+tomcat负载均衡群集内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文