负载均衡算法用于在多个服务器或资源之间分配工作负载,以优化资源利用率、降低延迟、提高吞吐量并确保系统的容错性。
这里介绍并实验4种负载均衡算法(随机的方法理论上也算,但一般不会这么搞),在NGINX上。
目录
轮询 (Round Robin)
加权轮询(Weighted Round Robin)
最少连接(Least Connections)
源地址哈希(Source IP Hash)
轮询
轮询算法将请求按顺序分配给服务器列表中的每个服务器。当分配到最后一个服务器后,算法重新开始从第一个服务器分配。轮询算法简单且易于实现,但它可能无法充分考虑服务器之间的性能差异。
示例:
http {
upstream backend {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
location / {
proxy_pass http://backend;
}
}
}
加权轮询
加权轮询算法为每个服务器分配一个权重值,以表示其处理能力。具有较高权重的服务器将处理更多的请求。加权轮询算法可以更好地处理服务器性能差异,但权重分配可能需手动调整。
http {
upstream backend {
server backend1.example.com weight=1;
server backend2.example.com weight=2;
server backend3.example.com weight=3;
}
server {
location / {
proxy_pass http://backend;
}
}
}
最少连接
最少连接算法将请求分配给当前连接数最少的服务器。这种算法可以更好地处理不同请求处理时间的情况,但可能需实时监控服务器的连接数。
例:假设有3个服务器A、B和C,当前连接数分别为3、1和2。最少连接算法会将下一个请求分配给服务器B,因为它的连接数最少。
http {
upstream backend {
least_conn;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
location / {
proxy_pass http://backend;
}
}
}
在backend
的upstream
块中添加了ip_hash
指令。Nginx会根据客户端IP地址的哈希值将请求分配给这些服务器。
源地址哈希
源地址哈希算法根据客户端的IP地址计算哈希值,然后将请求分配给相应的服务器。这种算法可以确保来自同一客户端的请求始终分配给同一个服务器,从而实现会话保持。
http {
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
location / {
proxy_pass http://backend;
}
}
}
在backend
的upstream
块中添加了ip_hash
指令。Nginx会根据客户端IP地址的哈希值将请求分配给这些服务器。