轮询(Round Robin):
是最简单的一种负载均衡算法,其工作原理基于“公平”的理念。基本上,它把接入的请求按顺序分配给后端的服务器。
假设我们有三台服务器,分别是A、B和C。那么,轮询算法的工作流程是这样的:
-
第一个请求来临,负载均衡器把这个请求分配到服务器A上。
-
第二个请求到达,负载均衡器把这个请求分配到服务器B上。
-
第三个请求来了,负载均衡器把这个请求分配到服务器C上。
-
第四个请求来了,这时,轮询算法就会回到服务器A,把请求分配给A。
以此类推,每当一个请求到来,负载均衡器就会按照轮询顺序把请求分配到下一个服务器。这种方式能够保证每一台服务器都能得到平均的请求负载。
要注意的是,虽然轮询算法很公平,但并不能保证每台服务器的负载都保持一致,因为不同的请求处理的时间可能不同,有的请求可能会占用服务器上更大的资源。这就引出了另一种负载均衡算法,也就是最小连接数(Least Connections)算法,它能够更好地处理服务器之间负载不平等的问题。
示例:
假设你有两台Web服务器,IP分别为192.168.1.2和192.168.1.3,你希望使用Nginx来实现轮询负载均衡,那么配置文件可能如下:
http {
upstream backend {
server 192.168.1.2;
server 192.168.1.3;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
在这个配置中,upstream
里定义了两台服务器,Nginx默认的负载均衡算法就是轮询。当客户端请求到来时,Nginx会将请求代理到 backend
这个upstream中定义的服务器上。
这只是一个简单的使用示例。真实情况下有许多配置可以进行优化和调整,比如可以为每个 server
指定权重,或者定义按照IP Hash方式进行负载均衡,还可以开启会话保持等功能。
以权重轮询为例,如果你希望服务器192.168.1.2处理更多的请求,可以赋予它更大的权重:
http {
upstream backend {
server 192.168.1.2 weight=3;
server 192.168.1.3;
}
...
}