Accept cookies for analytics, social media, and advertising, or learn more and adjust your preferences. These cookies are on by default for visitors outside the UK and EEA. Privacy Notice.
ngx_http_upstream_consistent_hash - 正しいバックエンドノードを選択するために内部的なconsistentハッシュリングを使用するロードバランサ。memcache.hash_strategy = php-memcacheモジュールのconsistentと互換性がある
ように設計されています。つまり、php-memcache モジュールを使ってmemcachedクラスタに値を保持することができ、後でNGINXがクラスタ内で値を見つけそこから読み込むことができることを意味します。
構文: | consistent_hash hash-key |
---|---|
デフォルト: | none |
コンテキスト: | upstream |
このパラメータはupstream定義の中になければなりません。consistentハッシュupstreamモジュールを有効にし、ハッシュリング上で正しいバックエンドを見つけるためにハッシュされるべき文字列を定義もします。例として以下のことができるでしょう:
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;
}
}
この例は3つのバックエンドサーバを使います。初期化時に、NGINX は hash_strategy = consistent
の php-memcache モジュールと同じ方法で、各サーバ (160 * weight) を含むハッシュリングを作成します。$request_uri
のハッシュに基づいて、どのバックエンドサーバが使われるべきかを決定するでしょう。これで、上の例のtest.php
スクリプトが以下のように見えます:
$memcache = new Memcache;
$memcache->addServer('10.50.1.3', 11211);
$memcache->addServer('10.50.1.4', 11211);
$memcache->addServer('10.50.1.4', 11211);
$memcache->set($_SERVER["REQUEST_URI"], $_SERVER["REQUEST_URI"] . "from memcache");
何かバグを見つけた場合は、私にメールをしてください。手助けをするつもりでいます。
どのような種類のフィードバックあるいは問題の報告も歓迎します。
Mail: mauro.stettler(A.T)gmail.com
githubで"master"と"dns"の2つのブランチがあります。これは、もしPHP側でIPの代わりにDNSエントリを使いたい場合、これをするためにNGINXにパッチを適用する必要があるだろうからです。もしPHPがmemcacheに接続するためにDNS名を使わない場合は、"master"ブランチはクリーンなモジュールですので、これをダウンロードするほうが良いでしょう。もしPHPがDNS名を使うのであれば、NGINXのためのパッチを含んでいる"dns"ブランチをダウンロードしなければなりません。