NGINX upstream一致性哈希模块
需求
近期公司上线某项目,需要根据参数id进行一致性hash,实现将同一参数的请求发送到同一节点上,由于我们使用nginx来做代理,所以这个任务到运维这里,首先就要思考用nginx怎么实现,最后调研了一下,nginx需要安装一个第三方模块ngx_http_consistent_hash 来实现根据请求参数实现一致性hash。
一致性hash用于对hash算法的改进,后端服务器在配置的server的数量发生变化后,同一个upstream server接收到的请求会的数量和server数量变化之间会有变化。尤其是在负载均衡配置的upstream server数量发生增长后,造成产生的请求可能会在后端的upstream server中并不均匀,有的upstream server负载很低,有的upstream server负载较高,这样的负载均衡的效果比较差,可能对upstream server造成不良的影响。由此,产生了一致性hash算法来均衡。
安装方式
github 下载地址:https://github.com/replay/ngx_http_consistent_hash
下载zip 包即可 ,编译到nginx
在nginx 编译参数中添加 –add-module=ngx_http_consistent_hash-master 的解压目录即可
配置方式
该模块可以根据配置参数采取不同的方式将请求均匀映射到后端机器,比如:
consistent_hash $remote_addr 可以根据客户端ip映射
consistent_hash $request_uri 根据客户端请求的url映射
consistent_hash $根据客户端携带的参数进行映射
配置示例:根据客户端携带的参数进行hash
如我需要根据传入的documentId进行一致性hash,将documentId相同的值始终转发到同一台服务器,配置方式如下:
upstream http-co-web {
consistent_hash $arg_documentId;
server 后端服务器地址;
server 后端服务器地址;
}
NGINX Session 共享问题与
https://www.cnblogs.com/qianjinyan/p/8921413.html
https://blog.csdn.net/tuesdayma/article/details/81387862
分布式集群时钟同步问题
https://blog.csdn.net/ChenjCarryOn/article/details/104735473
分布式调度问题
https://blog.csdn.net/shadow_zed/article/details/99170221
LVS+Keepalived+Nginx实现高可用
https://blog.csdn.net/lupengfei1009/article/details/86514445