0. 相关算法

hash算法

hash(ip/url) % node_counts = index
将ip进行hash函数后 与 服务器节点数量求模, 得到服务器下标

一致性hash算法

形成 0 — (2^32) -1 的一个闭合数值环,
将计算机节点经过hash后对应到某个数值上,
将用户经过 hash 后对应到某个数值上,
用户以顺时针的方向访问最近的计算机节点。

1. ip_hash

根据 访问nginx 的客户端ip 进行hash 得到结果值, 根据结果值分配处理请求的服务器。
ip_hash 可以保证用户访问可以请求到上游服务中的固定的服务器,前提是用户ip没有发生更改。

  1. upstream backend {
  2. ip_hash;
  3. server backend1.example.com;
  4. server backend2.example.com;
  5. #如果需要临时移除某台服务器,应在其后加down,而不是直接删除,否则将导致hash结果的改变。
  6. server backend3.example.com down;
  7. server backend4.example.com;
  8. }

2. url_hash

根据每次请求的url地址,hash后访问到固定的服务器节点。

$request_uri : nginx 内置参数,请求的url
least_conn : 指定组应使用负载平衡方法,其中将连接传递到活动连接数最少的服务器,同时考虑服务器的权重。如果有多个这样的服务器,则依次使用加权循环平衡方法进行尝试。

  1. upstream tomcats {
  2. # 配置url hash
  3. hash $request_uri;
  4. # 优先选择当前最少连接数的服务器
  5. # least_conn
  6. server 192.168.1.173:8080;
  7. server 192.168.1.174:8080;
  8. server 192.168.1.175:8080;
  9. }