基于CentOS 7配置Nginx负载均衡

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介:

Nginx负载均衡是Nginx的核心功能之一,工作在第七层。它是除了lvs,haproxy之外市面上较为流行的一种负载均衡软件。可以将客户端请求分流到跨多个计算资源(如计算机,计算机集群,网络链接,中央处理单元或磁盘驱动器)的工作负载分布。负载均衡旨在优化资源使用,最大化吞吐量,最小化响应时间,并避免任何单一资源的过载。使用具有负载平衡的多个组件而不是单个组件可以通过冗余来提高可靠性和可用性。本文简要描述Nginx负载均衡的配置,供大家参考。

一、负载均衡upstream模块介绍

upstream模块可定义一个新的上下文,它包含了一组后端upstream服务器,这些服务器可能被赋予了不同的权重、不同的类型甚至可以基于维护等原因被标记为down。
upstream语法及示例
  语法:upstream name { ... }
  声明一组可以被proxy_pass和fastcgi_pass引用的服务器;这些服务器可以使用不同的端口,并且也可以使用Unix Socket;也可以为服务器指定不同的权重;
例如:

  upstream backend {
        server backend1.example.com weight=5 down backup;
        server 127.0.0.1:8080    max_fails=3  fail_timeout=30s;
        server unix:/tmp/backend2;
  }

upstream模块常用的指令有:
ip_hash
  基于客户端IP地址完成请求的分发,它可以保证来自于同一个客户端的请求始终被转发至同一个upstream服务器;
keepalive
  每个worker进程为发送到upstream服务器的连接所缓存的个数;
least_conn
  最少连接调度算法;
server
  定义一个upstream服务器的地址,还可包括一系列可选参数,如:
    weight:权重;
    max_fails:最大失败连接次数,失败连接的超时时长由fail_timeout指定;
    fail_timeout:等待请求的目标服务器发送响应的时长;
    backup:用于fallback的目的,所有服务均故障时才启动此服务器;
    down:手动标记其不再处理任何请求;

upstream模块的负载均衡轮询算法

轮询(round-robin 默认)
  每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
权重(weight)
  指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
IP哈希(ip_hash)
  每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
第三方(fair)
  按后端服务器的响应时间来分配请求,响应时间短的优先分配。
第三方(url_hash)

二、后端服务器1配置

说明,当前的演示环境中,前后端全部使用Nginx。
查看主机名及IP
# hostname
centos7-web.example.com
# ip addr|grep inet|grep global
inet 172.24.8.128/24 brd 172.24.8.255 scope global eno16777728

Nginx版本
# nginx -v
nginx version: nginx/1.9.0

添加测试文件
# mv /etc/nginx/html/index.html /etc/nginx/html/index.html.bk
# echo "This a test home page from 172.24.8.128">/etc/nginx/html/index.html

# ss -nltp|grep nginx
LISTEN 0 128 *:90 *:* users:(("nginx",pid=2399,fd=6),("nginx",pid=2398,fd=6))

# curl http://localhost:90
This a test home page from 172.24.8.128

三、后端服务器2配置

查看主机名及IP
# hostname
node132
# ip addr|grep inet|grep global
inet 192.168.1.132/24 brd 192.168.1.255 scope global eth0

Nginx版本
# nginx -v
nginx version: nginx/1.10.2

添加测试文件
# cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.bk
# echo "This a test home page from 192.168.1.132">/usr/share/nginx/html/index.html

# ss -nltp|grep nginx
LISTEN 0 128 :::80 :::* users:(("nginx",2808,7),("nginx",6992,7))
#
# curl http://localhost
This a test home page from 192.168.1.132

四、Nginx负载均衡配置及验证

负载均衡主机名及IP
# hostname
centos7-router
# ip addr|grep inet|grep global
inet 172.24.8.254/24 brd 172.24.8.255 scope global eno16777728
inet 192.168.1.175/24 brd 192.168.1.255 scope global dynamic eno33554960

Nginx版本
# nginx -v
nginx version: nginx/1.12.2

负载均衡配置
# vim /etc/nginx/conf.d/slb.conf
upstream www {
    server 172.24.8.128:90 max_fails=3 fail_timeout=30s;
    server 192.168.1.132:80 max_fails=3 fail_timeout=30s;
    keepalive 32;
}

server {

    listen 9090;
    server_name localhost;

    location / {
        proxy_set_header Host $host;
        proxy_set_header x-for $remote_addr;
        proxy_set_header x-server $host;
        proxy_set_header x-agent $http_user_agent;
        proxy_pass http://www;
}
}

验证负载均衡效果
# systemctl reload nginx
# curl http://localhost:9090
This a test home page from 172.24.8.128
# curl http://localhost:9090
This a test home page from 192.168.1.132
# curl http://localhost:9090
This a test home page from 172.24.8.128
# curl http://localhost:9090
This a test home page from 192.168.1.132

配置IP hash轮询策略,修改后的部分内容如下
# head -n6 /etc/nginx/conf.d/slb.conf
upstream www {
    ip_hash;
    server 172.24.8.128:90 max_fails=3 fail_timeout=30s;
    server 192.168.1.132:80 max_fails=3 fail_timeout=30s;
    keepalive 32;
    ....
}

# systemctl reload nginx
# curl http://localhost:9090
This a test home page from 172.24.8.128
# curl http://localhost:9090
This a test home page from 172.24.8.128
# curl http://localhost:9090
This a test home page from 172.24.8.128

经测试ip_hash轮询还是存在一定的问题,就是不论在那台机器访问,始终请求到第一台机器。
之前也做过一次测试没有成功。生产环境后来换成了Tengine。 version: Tengine/2.1.2 (nginx/1.6.2)
在Tengine中使用session_sticky指令实现session粘滞。
关于这个ip_hash,有网友描述了这个原因:不论A类B类C类等网络地址,Nginx的ip_hash算法都将一个ip地址的前三段作为hash的关键字。
Nginx的ip_hash指令 http://blog.csdn.net/fygkchina/article/details/41841915

五、基于Nginx代理到tomcat的配置(演示略)

# more tomcat.conf 
upstream app {
                ip_hash;
                server 192.168.81.146:8080;
                server 192.168.81.147:8080;
                keepalive 32;
}

server {
    listen 80;
    server_name localhost;
    location / {
        proxy_pass http://app;
    
        proxy_set_header Host $http_host;   #Auhtor : Leshami
        proxy_set_header X-Real-IP $remote_addr;  #Blog : http://blog.csdn.net/leshami
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-scheme $scheme;
        proxy_set_header x-agent $http_user_agent;
    }
    
server {
    listen      443 ssl;
    server_name  localhost;
    server_name node132.ydq.com;
    ssl_certificate      /etc/nginx/conf.d/node132.ydq.com.crt;
    ssl_certificate_key  /etc/nginx/conf.d/node132.ydq.com.key;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    location / {
        proxy_pass http://app;
      
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-Port $remote_port;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-scheme $scheme;
        proxy_set_header x-agent $http_user_agent;
        add_header backendIP $upstream_addr;
        proxy_set_header Proxy_Port $proxy_port;
    }
} 
相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
1月前
|
负载均衡 Ubuntu 应用服务中间件
nginx修改网站默认根目录及发布(linux、centos、ubuntu)openEuler软件源repo站点
通过合理配置 Nginx,我们可以高效地管理和发布软件源,为用户提供稳定可靠的服务。
117 13
|
1月前
|
弹性计算 负载均衡 网络协议
ECS中实现nginx4层7层负载均衡和ALB/NLB原SLB负载均衡
通过本文的介绍,希望您能深入理解并掌握如何在ECS中实现Nginx四层和七层负载均衡,以及如何使用ALB和NLB进行高效的负载均衡配置,以提高系统的性能和可靠性。
144 9
|
1月前
|
存储 应用服务中间件 nginx
nginx反向代理bucket目录配置
该配置实现通过Nginx代理访问阿里云OSS存储桶中的图片资源。当用户访问代理域名下的图片URL(如 `http://代理域名/123.png`)时,Nginx会将请求转发到指定的OSS存储桶地址,并重写路径为 `/prod/files/2024/12/12/123.png`。
77 5
|
1月前
|
负载均衡 算法 应用服务中间件
Nginx的负载均衡
Nginx 是一款高性能的Web服务器与反向代理服务器,支持负载均衡功能,能有效提升系统性能与可靠性。其负载均衡策略包括基于轮询和权重的分配方法,以及IP哈希、最小连接数等算法,可根据实际需求灵活选择。
147 5
|
1月前
|
负载均衡 前端开发 应用服务中间件
负载均衡指南:Nginx与HAProxy的配置与优化
负载均衡指南:Nginx与HAProxy的配置与优化
108 3
|
2月前
|
安全 应用服务中间件 网络安全
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
127 3
|
2月前
|
安全 应用服务中间件 网络安全
配置Nginx反向代理实现SSL加密访问的步骤是什么?
我们可以成功地配置 Nginx 反向代理实现 SSL 加密访问,为用户提供更安全、可靠的网络服务。同时,在实际应用中,还需要根据具体情况进行进一步的优化和调整,以满足不同的需求。SSL 加密是网络安全的重要保障,合理配置和维护是确保系统安全稳定运行的关键。
196 3
|
3月前
|
缓存 监控 负载均衡
nginx相关配置及高并发优化
Nginx的高并发优化是一个综合性的过程,需要根据具体的业务场景和硬件资源量身定制。以上配置只是基础,实际应用中还需根据服务器监控数据进行持续调整和优化。例如,利用工具如ab(Apache Benchmarks)进行压力测试,监控CPU、内存、网络和磁盘I/O等资源使用情况,确保配置的有效性和服务的稳定性。
184 0
|
5月前
|
缓存 前端开发 Java
"揭秘!SpringBoot携手Nginx,性能飙升秘籍大公开:轻松掌握配置优化,让你的应用快如闪电!"
【8月更文挑战第11天】随着微服务架构的发展,SpringBoot成为构建RESTful API的首选,Nginx则作为高性能的反向代理服务器提升应用性能。本文将探讨两者如何协同工作,包括Nginx的负载均衡策略、静态资源缓存及数据压缩配置;同时讨论SpringBoot的线程池优化、缓存策略及性能监控。通过这些方法,帮助开发者显著提高系统的整体性能和可用性。
248 1
|
8月前
|
数据可视化 应用服务中间件 Linux
Nginx 可视化管理工具与 cpolar 配置:实现远程访问本地服务的优化
Nginx 可视化管理工具与 cpolar 配置:实现远程访问本地服务的优化
Nginx 可视化管理工具与 cpolar 配置:实现远程访问本地服务的优化