普通算法
轮询算法:第一个请求给server1,第二个请求给server2,第3个请求给server3,一直轮询下去。
权重比算法:比如说,给第1台分配1的权重,给第2台分配2的权重,给第3台分配1的权重,有4个请求到来,其中2个请求分配给第2台,其他两台各分配1个请求。
最少连接算法:负载均衡器要记录跟每一台服务器建立的连接,每次发请求的时候,跟哪台请求创建的连接最少就分发给哪台机器,哪台服务器连接少,说明其压力小,新来的请求就给到压力最小的服务器。
fair算法(第三方):按后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身不支持fair,如果需要这种调度算法,则必须安装upstream_fair模块。
上述方式存在一个问题:在负载均衡系统中,假如用户在某台服务器上登录了,那么该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样显然是不妥的。
哈希算法
除留余数法。假如有3台服务器,将哈希结果模上3,得到0,1,2的下标,对应哪个服务器的下标,就去哪台服务器上。
ip_hash:每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器。
url_hash(第三方):按访问的URL的哈希结果来分配请求,使每个URL定向到一台后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身不支持url_hash,如果需要这种调度算法,则必须安装Nginx的hash软件包。
会话共享:我们给客户端取名zhangsan,lisi。zhangsan的IP地址和端口号作为md5哈希函数的输入参数,处理完永远是22,