nginx做负载均衡的几种策略及实现方法。

本文介绍了在CentOS7环境下,如何利用nginx的upstream模块实现负载均衡,包括轮询、加权轮询和ip_hash策略。轮询策略均匀分配请求;加权轮询考虑服务器性能差异,按权重分配;ip_hash策略则根据访问者IP保持会话持久化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安装环境:centos7

测试机器:调度机ip:192.168.10.99

server1ip:192.168.11.13          server2ip:192.168.11.179

1.通过nginx自带的upstream模块实现轮询转发访问请求

轮询模式会将调度机收到的请求轮询发送给两个server,比如第一个请求发送给server1,第二个发送给server2,然后第三个请求再发给server1,第四个server2。。。。。。。来实现两个服务器的负载均衡。

实现方法:

三台机器全部安装nginx:

yum install epel-release -y && yum install nginx -y

然后在调度器上的nginx配置文件中的http中的server中的location中加入

proxy_pass  http://backend

可以加在nginx目录下的nginx.conf文件下,也可以加在nginx目录下conf.d目录下的文件中。

如下所示:

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 4096;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80;
        listen       [::]:80;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        location / {
                root   /usr/share/nginx/html;
                index  index.html index.htm;
                proxy_pass http://backend;
         }

        include /etc/nginx/default.d/*.conf;

        error_page 404 /404.html;
        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }
}

接着在conf.d目录下写入文件upstream.conf

cat <<EOF >/etc/nginx/conf.d/upstream.conf
upstream backend {
server 192.168.11.13:80;
server 192.168.11.179:80;
}
EOF

然后重启nginx,关闭防火墙和selinux。访问调度机ip:80即可实现。

systemctl enable nginx && systemctl start nginx

systemctl stop firewalld && setenforce 0

2.加权轮询

此方法和第一种类似,但考虑到了可能后台服务器性能不同,比如我server1的性能比server2要高,所以我给server1一个biserver2要高的比重,让调度器将更多的请求发送给server1去处理。

实现方法与方法一唯一的不用就是在写upstream.conf时,在后面加入了权重:

cat <<EOF >/etc/nginx/conf.d/upstream.conf
upstream backend {
server 192.168.11.13:80 weight=2;
server 192.168.11.179:80 weight=1;
}
EOF

这样的话,在访问请求次数有一定数量之后,server1处理的请求数量与server2处理的请求数量比列大致为2:1。

3.ip_hash

此负载均衡方法,是基于对访问者的ip进行hash解析然后在放松给相应的server,这样相对与前两种方法,多了会话保持的功能

实现方法相对于第一种就是在upstream种加入ip_hash

cat <<EOF >/etc/nginx/conf.d/upstream.conf
upstream backend {
ip_hash;
server 192.168.11.13:80;
server 192.168.11.179:80;
}
EOF

nginx是一种高性能的web服务器,它提供了多种方式实现负载均衡,以满足大量用户访问的需求,提升服务器的稳定性和性能。 一、基于IP Hash算法负载均衡 IP Hash算法是一种基于客户端IP地址的负载均衡策略nginx会根据请求的客户端IP地址,将请求分配给后端的服务器。当第一次请求来自一个客户端时,nginx会取得请求中的客户端IP地址,并通过哈希算法计算得出该请求应该分配到的服务器。 二、Round Robin负载均衡 Round Robin负载均衡算法是一种按照预设的规则顺序轮流选择服务器的方法nginx会将请求平均分配给多个服务器,在遍历完所有服务器以后从头开始重新选择。 三、Least Connections负载均衡 Least Connections算法是一种根据实时服务器的连接数动态分配请求的方法nginx会根据服务器的连接数来判断请求应该向哪台服务器分配。该算法通常适用于后端服务器性能不一的情况下,以保证业务的稳定性和可靠性。 四、ip_hash + weight负载均衡 ip_hash+weight算法是一种将IP Hash算法和Round Robin算法结合起来的方法nginx会首先使用IP Hash算法将请求分配到特定的服务器,然后根据预先设置的权重轮流分配请求。 总之,nginx实现负载均衡有以上几种方式,不同的负载均衡策略适用于不同的应用场景,企业可以根据自身的业务特点和性能要求来选择适合的负载均衡算法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值