您的位置:首页 > 数据库 > Memcache

nginx与PHP使用一致性哈希算法对memcached的集群与负载均衡

2015-12-08 21:36 671 查看


一.需要先给nginx编译第三方模块(ngx_http_consistent_hash)

1.下载ngx_http_consistent_hash-master,解压

2.查看已安装的nginx编译参数:/usr/local/nginx/sbin/nginx -v

3.再nginx解压目录下面执行:./configure --prefix=/usr/local/nginx --add_module=/usr/local/src/ngx_http_consistent_hash-master/

(/usr/local/nginx:原nginx编译好的路径,usr/local/src/ngx_http_consistent_hash-master/:第三方模块目录路径)

4.因为已编译的nginx可能在运行中:pkill -9 nginx

5. make && make install

二、配置memcache集群

1.把用到的memcached节点,声明在一个组里

upstream memserver {

hash_key $request_uri; #hash计算时的依据,以uri做依据来hash

server localhost:11211;

server localhost:11212;

server localhost:11213;

}

2.location里

location / {

set $memcached_key $uri;

memcached_pass memserver; #memserver为上面的memcache节点的名称

error_page 404 /writemem.php;

}

3.重启nginx:./sbin/nginx -s reload

4.开启那3台memcache服务器:

/usr/local/memcached/bin/memcached -u nobody -vv -p 11211

/usr/local/memcached/bin/memcached -u nobody -vv -p 11212

/usr/local/memcached/bin/memcached -u nobody -vv -p 11213

5.

上面是默认的负载均衡的算法:是设置计数器,轮流请求N台服务器。

我们要用安装的第三方模块:(最上面安装的)

如http://wiki.nginx.org/NginxHttpUpstreamConsistentHash

这个模块就是用一致性hash来请求后端结节,并且其算法,与PHP中的memcache模块的一致性hash算法,兼容.

安装该模块后,nginx.conf中:

upstream memserver {

consistent_hash $request_uri;

server 127.0.0.1:11211;

server 127.0.0.1:11212;

server 127.0.0.1:11213;

}

6.在php.ini中,如下配置:memcache.hash_strategy = consistent

这样: nginx与PHP即可完成对memcached的集群与负载均衡算法.

杀死php进程:pkill -9 php-fpm

启动php:/usr/local/php/sbin/php-fpm

7.writemem.php里做写入memcache的操作:

<?php

$uri = $_SERVER['REQUEST_URI']; //接收用户查询的key

//php也要添加和nginx一样多的服务器

$mem = new memcache();

$mem->addServer('127.0.0.1',11211);

$mem->addServer('127.0.0.1',11212);

$mem->addServer('127.0.0.1',11213);

//查询数据库

//todo...

//写入memcached

$mem->add($url,'value',0,300);

$mem->close();

?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: