Nginx补全计划2

前言

今天我们来看看更多的负载均衡技巧和多服务nginx应该怎么配置。

高级负载均衡算法

在之前,我们已经演示了怎么去配置一个负载均衡算法了。一般的,默认使用的负载均衡算法就是轮询负载均衡,而加权负载均衡需要我们指定好权重,即weight参数。现在我们来看看其它的负载均衡算法。

最少连接

最少连接算法是一种高级的负载均衡算法,它的思想是把下一次请求分配给连接数最少的机器

这个想法其实是显而易见的,因为连接数越少的机器服务压力应该小于连接数大的机器,开启这个配置也很简单,需要在upstream中指定好参数即可。

1
2
3
4
5
6
upstream testServer {
    	least_conn;
        server localhost:5000;
        server localhost:5001;
        server localhost:5002;
    }

同样的,也有加权最少连接算法。这种算法也是最少连接,不过考虑了权重。这种加权算法还是考虑了不同服务器之间的性能差异,性能好的,虽然连接数多,但是处理能力也强,所以权限就大。

例如,请考虑下面这种情形

服务器 连接数
A,高性能 20
B,性能较差 10

按照我们的思路,此时,虽然B服务器的连接数小于A服务器,但是出于权重的考虑,我们应该把下一次请求分配给A服务器,在nginx中,我们只需要在server后面加入weight参数即可。

1
2
3
4
5
6
upstream testServer {
    	least_conn;
        server localhost:5000 weight=3;
        server localhost:5001 weight=2;
        server localhost:5002;
    }

hash算法

我们之前提到,常用的hash算法有两种,包括ipurl哈希,配置也很简单。

  • ip哈希

    1
    2
    3
    4
    5
    6
    
    upstream testServer {
        	ip_hash;
            server localhost:5000;
            server localhost:5001;
            server localhost:5002;
        }
    
  • url哈希

    1
    2
    3
    4
    5
    6
    
    upstream testServer {
        	hash $request_url;
            server localhost:5000;
            server localhost:5001;
            server localhost:5002;
        }
    

下面我们再来说说url路径的问题。

location路径

url,不同服务之间一般是有着不同的子路径,比如,下面有三个服务

1
2
3
/root/sayhello
/root/sayname
/root/saybyebye

注意到刚开始的location参数

1
2
3
4
5
		location / {
			proxy_pass http://testServer;
			proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
		}

有没有感觉location后面的这个 /有些奇怪呢?刚开始我以为是某种固定的语法参数,后来仔细一想,应该是url的参数路径才对,我们可以改写一下此时的后端服务。

  • 当访问端口5000时,会说一句Hello
  • 当访问端口5001时,会说一句你好
  • 当访问端口5002时,会说一句老铁们,说实话没吃饱

现在我们来看一看是否可以做到!

  • 访问5000端口
image-20250716145700611
  • 访问5001端口

    image-20250716145803186
  • 访问5002端口

    image-20250716145848968

    可以看到,正确显示了“老铁们,说实话没吃饱”!这个标题!

总结

这次我们主要关注了一些其它的负载均衡算法和子url

Licensed under CC BY-NC-SA 4.0
花有重开日,人无再少年
使用 Hugo 构建
主题 StackJimmy 设计