负载均衡策略
加权Round-Robin
以加权轮询的方式访问server指令指定的上游服务,集成在Nginx的upstream框架中。
服务访问的权重 weight
服务的最大并发数 max_conns
最大失败次数 max_fails
失败超时时间 fail_timeout
Round-Robin是其他负载均衡算法的基础,当其他负载均衡算法失效的时候,都会退化成Round-Robin算法。
哈希算法
Round-Robin的缺点:只能进行水平扩展,处理无差别的服务。
基于客户端IP的哈希算法 upstream_ip_hash模块 , 以客户端的IP地址作为hash算法的关键字,映射到特定的上游服务器。
- 对IPV4地址使用前3个字节作为关键字,对于IPV6使用完整地址
基于任意关键字实现的Hash算法
通过指定关键字作为hash key,基于hash算法映射到特定服务器
- 关键字可以含有变量、字符串,如用户名
一致性哈希算法
哈希算法的缺点:宕机或者扩容时,hash算法引发大量路由变更,可能导致缓存大范围失效。
- 首先求出memcached服务器(节点)的哈希值,并将其配置到0~2^32的圆(continuum)上。
- 然后采用同样的方法求出存储数据的键的哈希值,并映射到相同的圆上。
- 然后从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务器上。如果超过232仍然找不到服务器,就会保存到第一台memcached服务器上。
从上图的状态中添加一台memcached服务器。余数分布式算法由于保存键的服务器会发生巨大变化而影响缓存的命中率,但Consistent Hashing中,只有在圆(continuum)上增加服务器的地点逆时针方向的第一台服务器上的键会受到影响
优先选择连接最少的上游服务器
从所有上游服务器中,找出当前并发连接数最少的一个,将请求转发到它。upstrem_lleast_conn模块
- 如果出现多个最少连接服务器的连接数都一样,使用round-robin算法
使用共享内存使得负载均衡策略能够跨进程生效,对所有worker进程起作用
分配出共享内存,将其它upstream模块定义的负载均衡策略数据、运行时每个上游服务器的状态数据存放在共享内存上,以对所有nginx work进程生效
upstream_zone模块