Nginx的负载均衡
算法介绍 ip_hash算法的原理很简单,根据请求所属的客户端IP计算得到一个数值,然后把请求发往该数值对应的后端。 所以同一个客户端的请求,都会发往同一台后端,除非该后端不可用了。ip_hash能够达到保持会话的效果。 ip_hash是基于round robin的,判断后端是否可用的方法是一样的。 第一步,根据客户端IP计算得到一个数值。 hash1 = (hash0 * 113 + addr[0]) % 6271; hash2 = (hash1 * 113 + addr[1]) % 6271; hash3 = (hash2 * 113 + addr[2]) % 6271; hash3就是计算所得的数值,它只和初始数值hash0以及客户端的IP有关。 第二步,根据计算所得数值,找到对应的后端。 w = hash3 % total_weight; while (w >= peer->weight) { w -= peer->weight; peer = peer->next; p++; } total_weight为所有后端权重之和。遍历后端链表时,依次减去每个后端的权重,直到w小于某个后端的权重。 选定的后端在链表中的序号为p。因为total_weight和每个后端的weight都是固定的,所以如果hash3值相同, 则找到的后端相同。 指令的解析函数