侧边栏壁纸
  • 累计撰写 45 篇文章
  • 累计创建 15 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

【Nginx】使用Nginx实现负载均衡

Administrator
2024-09-21 / 0 评论 / 0 点赞 / 67 阅读 / 10439 字 / 正在检测是否收录...

对于实际的业务来说,随着业务量的增大,对于服务器端的压力也会越来越大,那么通常可以通过服务器端集群的方式来减缓每台服务器的压力。

在这个过程中每台服务器都希望对外提供服务,防止某一台负载过高而其他没有负载的情况,达到资源利用的最大化。nginx的负载均衡就能很好的解决这个问题。

1. 负载均衡的定义

负载均衡(Load Balancing)是将传入的请求流量分发到多个后端服务器的技术,以达到消除单点故障、提高可用性、增加扩展性等目的。

2. nginx如何实现负载均衡

主机ip

角色

安装软件

暴露端口

11.0.1.10

负载均衡服务器

nginx

80

11.0.1.50

真实服务端

tomcat 9.0

8080

11.0.1.51

真实服务端

tomcat 8.5

8080

`11.0.1.50`和`11.0.1.51`模拟应用服务端集群,里面部署了后端程序,不对外暴露。`11.0.1.10`是反向代理和负载均衡服务器,对外暴露。为了能演示效果,tomcat安装了不同版本。

现在修改nginx配置文件

vim /usr/local/nginx/conf/nginx.conf

本机对外暴露的主机或域名,监听的依然是80端口,但却被同时代理到了`11.0.1.50`和`11.0.1.51`的8080端口。

http{
    upstream fzjh{
        server 11.0.1.50:8080;
        server 11.0.1.51:8080;
    }
    
    server {
        listen       80;
        server_name  www.jiangnan.com;
        location / {
            proxy_pass http://fzjh;
        }
    }
}

3. 再次访问

虽然访问了`11.0.1.10`,但是流量被分配到了`11.0.1.50`和`11.0.1.51`。

4. 负载均衡算法

  1. 轮询(Round Robin)

轮询算法是最简单的负载均衡算法之一,也是nginx默认算法。它按照顺序将请求依次分发给每个后端服务器。

示例:

http {
    upstream fzjh{
        server www.fzjh1.com;
        server www.fzjh2.com;
    }

    server {
        location / {
            proxy_pass http://fzjh;
        }
    }
}
  1. 最少连接数(Least Connections)

最少连接数算法将请求分配给当前活动连接数最少的后端服务器。这种算法适用于长连接的场景。

示例:

http {
    upstream fzjh{
        least_conn;
        server www.fzjh1.com;
        server www.fzjh2.com;
    }

    server {
        location / {
            proxy_pass http://fzjh;
        }
    }
}
  1. IP哈希(IP Hash)

IP哈希算法根据客户端IP地址的哈希值将请求分配给后端服务器。这样,同一个客户端的请求总是被分配到同一台后端服务器。

示例:

http {
    upstream fzjh{
        ip_hash;
        server www.fzjh1.com;
        server www.fzjh2.com;
    }

    server {
        location / {
            proxy_pass http://fzjh;
        }
    }
}
  1. URL哈希(URL Hash)

URL哈希算法根据请求URL的哈希值将请求分配给后端服务器。这样,相同URL的请求总是被分配到同一台后端服务器。

示例:

http {
    upstream fzjh{
        hash $request_uri;
        server www.fzjh1.com;
        server www.fzjh2.com;
    }

    server {
        location / {
            proxy_pass http://fzjh;
        }
    }
}
  1. 加权轮询(Weight Round Robin)

加权轮询算法在轮询的基础上,为每台后端服务器分配一个权重。权重越高,分配到的请求越多。适用于后端服务器性能差异较大的情况。

示例:

http {
    upstream fzjh{
        server www.fzjh1.com weight=3;
        server www.fzjh2.com weight=1;
    }

    server {
        location / {
            proxy_pass http://fzjh;
        }
    }
}

不同的算法适用于不同的场景,可以根据实际需求选择合适的算法。通过合理配置Nginx的负载均衡,可以提高系统的性能和可靠性,确保服务的高可用性和稳定性。

5. upstream模块参数解析

参数

说明

server

定义后端服务器的IP地址或域名,可选地指定端口号,默认为80端口。

weight

服务器权重,默认为1。权重越高,处理的请求比例越大。

max_fails

Nginx尝试连接后端服务器失败的次数,默认为1。超过此次数,Nginx将服务器标记为失败。

fail_timeout

max_fails定义的失败次数后,距离下次检查的间隔时间,默认为10秒。

backup

热备配置,仅当所有激活的服务器失败后,请求才会被转发到标记为backup的服务器。

down

标记服务器永远不可用,通常用于维护或测试。配合ip_hash使用时,服务器不能被标记为down

示例:

http{
    upstream fzjh{
        server 11.0.1.50:8080 weight=3 max_fails=3 fail_timeout=10;
        server 11.0.1.51:8080 weight=1;
    }
    
    server {
        listen       80;
        server_name  www.jiangnan.com;
        location / {
            proxy_pass http://fzjh;
        }
    }
}

0
博主关闭了所有页面的评论