nginx upstream 一致性哈希模块

nginx upstream 一致性哈希模块

今天应开发的需求需要做一个URL地址一致性hash的问题

方法一:

ngx_http_upstream_consistent_hash 模块是一个负载均衡器,使用一个内部一致性hash算法来选择合适的后端节点。与PHP的memcache模块memcache.hash_strategy兼容,这意味着可以使用php-memcache模块将内容存储到memcached集群中,而后通过nginx在集群中找到值。

该模块通过使用客户端信息(如:$ip, $uri, $args等变量)作为参数,使用一致性hash算法将客户端映射到后端节点

该模块可以配置参数采取不同的方式将请求均匀映射到后端机器,比如:

consistent_hash $remote_addr :可以根据客户端ip映射

consistent_hash $request_uri :根据客户端请求的uri映射

consistent_hash $args :根据客户端携带的参数进行映射


指令

语法:consistent_hash    variable_name

默认值:none

上下文:upstream

配置upstream采用一致性hash作为负载均衡算法,并使用配置的变量名作为hash输入。

安装

1
2
3
4
5
# wget https://github.com/replay/ngx_http_consistent_hash/archive/master.zip
# unzip master.zip 
# ./configure  --add-module=./3thparty/ngx_http_consistent_hash-master
# make
# make install

例子


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
  upstream somestream {
       consistent_hash $request_uri;
       server 10.50.1.3:11211;
       server 10.50.1.4:11211;
       server 10.50.1.5:11211;
     }
  
...
  
server {
         listen       80;
         server_name  localhost;
  
         location / {
           default_type text/html;
           set  $memcached_key $request_uri;
           memcached_pass somestream;
           error_page      500 404 405 = @fallback;
         }
  
         location @fallback {
           root /srv/www/whatever;
           fastcgi_intercept_errors on;
           error_page 404 = @404;
  
           set  $script  $uri ;
           set  $path_info  "" ;
  
           include /usr/local/nginx/conf/fastcgi_params;
           fastcgi_param SCRIPT_FILENAME /srv/www/whatever/test.php;
           fastcgi_param SCRIPT_NAME  $script ;
           fastcgi_param REQUEST_URI  $uri ;
           fastcgi_pass   127.0.0.1:9000;
         }
     }

你可能感兴趣的:(Linux运维之道)