由于blog各种垃圾评论太多,而且本人审核评论周期较长,所以懒得管理评论了,就把评论功能关闭,有问题可以直接qq骚扰我

nginx 根据请求参数进行一致性hash

web 西门飞冰 65℃

需求

近期公司上线某项目,需要根据参数id进行一致性hash,实现将同一参数的请求发送到同一节点上,由于我们使用nginx来做代理,所以这个任务到运维这里,首先就要思考用nginx怎么实现,最后调研了一下,nginx需要安装一个第三方模块ngx_http_consistent_hash 来实现根据请求参数实现一致性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需要编译添加ngx_http_consistent_hash-master,tengine和openresty 已经默认支持一致性hash不需要额外编译(tengine编译时可以选择启用还是禁用)

转载请注明:西门飞冰的博客-专注于Linux运维 » nginx 根据请求参数进行一致性hash

喜欢 (0)or分享 (0)