-
一致性hash
当某台务器宕机后,hash也会重新计算,导致很多问题。可以配置一致性hash算法
理解成一个hash闭环,用户和服务器都hash后落在环上。访问通过顺时针命中最近的服务器,当某台服务器宕机,访问落在下一台上面。不会整个重新hash取模对其他区域造成影响。- server_id_ 字段,如果配置id字段,则使用id字段作为server标识,否则使用server ip和端口作为server标识,
- 使用id字段可以手动设置server的标识,比如一台机器的ip或者端口变化,id仍然可以表示这台机器。使用id字段
- 可以减低增减服务器时hash的波动。
- server weight 字段,作为server权重,对应虚拟节点数目
- 具体算法,将每个server虚拟成n个节点,均匀分布到hash环上,每次请求,根据配置的参数计算出一个hash值,在hash环
- 上查找离这个hash最近的虚拟节点,对应的server作为该次请求的后端机器。
- 该模块可以根据配置参数采取不同的方式将请求均匀映射到后端机器,比如:
consistent_hash $remote_addr
:可以根据客户端ip映射consistent_hash $request_uri
: 根据客户端请求的uri映射consistent_hash $args
:根据客户端携带的参数进行映射
安装 ngx_http_upstream_consistent_hash 第三方模块:
- 下载解压 https://github.com/replay/ngx_http_consistent_hash
- 添加模块
./configure --add-module=/{目录}/ngx_http_consistent_hash-master
- make
- make install
upstream test { consistent_hash $request_uri; server 192.168.31.96:8088 id=1001 weight=3; server 192.168.31.226:8088 id=1002 weight=10; server 192.168.31.23:8088 id=1003 weight=20; }
- server_id_ 字段,如果配置id字段,则使用id字段作为server标识,否则使用server ip和端口作为server标识,
nginx 一致性hash理解与实现
最新推荐文章于 2024-03-08 15:56:08 发布