一.nginx第三方模块的安装
第三方模块查询地址:https://www.nginx.com/resources/wiki/modules/
后来新出来一个nginx memcache增强版,有空可以研究一下,下载地址:https://github.com/bpaquet/ngx_http_enhanced_memcached_module/archive/master.zip
这里以php_memcache为例,下载地址:https://github.com/replay/ngx_http_php_memcache_standard_balancer/archive/master.zip
1.建议在nginx主目录下创建一个ngx_module目录,来存放第三方模块,将下载好的文件解压到该目录下:
cd /usr/local/nginx/ mkdir ngx_module mv /data/tools/ngx_http_php_memcache_standard_balancer-master.zip /usr/local/nginx/ngx_module/ cd /usr/local/nginx/ngx_module/ unzip ngx_http_php_memcache_standard_balancer-master.zip
2.然后对nginx进行重新配置、编译、安装
cd /usr/local/nginx/sbin ./nginx -V #查看一下nginx原来的配置 cd /data/tools/nginx #进入到nginx解压目录 ./configure 这里将原来的配置拷贝过来 --add_module=/usr/local/nginx/ngx_module/ngx_http_php_memcache_standard_balancer-master#注:--add_module 这些内容是新添加模块用的
make && make install
二.nginx连接memcache
以配置memcache集群为例:
upstream memserver { 把用到的memcached节点,声明在一个memserver组里 hash_key $request_uri; // hash计算时的依据,以uri做依据来hash server 127.0.0.1:11211; server 127.0.0.1:11212; } location / { # root html; set $memcached_key $uri; memcached_pass memserver; // memserver为上面的memcache节点的名称 error_page 404 /writemem.php;
注:1.server在指定本地memcache的时候,要用IP地址,不要用localhost,会出现各种问题;
2.如果要配置一个memcache的话,不需要定义upstream,直接在location中指定 memcached_pass ip:端口。
三.请求流程说明
当用户向nginx发起一个请求,ngxin在响应请求的时候,会直接请求memcahce,先在memcache找请求中的uri,看memcache中有没有对应的键,如果匹配上了键,那么直接将key对应的values返回给用户;如果在memcache中没找到对应的key,那么,会将请求交给后端去调相应的页面,去查询数据库,如果可以查到,那么将结果写入memcache。
注:memcache分析,memcache是以k/v的形式进行存储的,那么nginx请求memcache时,用什么做Key呢?一般用uri和arg来做key,如:/abc.php?name=zhangsan。?前面是uri(访问地址),后面是arg(参数)
四.memcache集群问题
如果在nginx上对memcache做了负载均衡了,那么,当用户请求一个uri的时候,如果memcache没有,用户先查不到,但是后端会将查询结果随机存入到memcache中,如果用户下次继续请求该uri,有可能被分配的memcache并不是存有后端响应了结果的memcache,这会导致用户有可能还是请求不到,这个时候,就需要通过第三方模块,来进行已执行hash算法处理这个问题,让nginx请求的memcache和后端存储响应的memcache保持一致。
一致性哈希下载地址:https://github.com/replay/ngx_http_consistent_hash/archive/master.zip
这是个第三方模块,安装方式参考本编博客的一
nginx中的配置如下:
upstream memserver { consistent_hash $request_uri; #通过请求中的uri做一致性哈希 server localhost:11211; server localhost:11212; }
php的配置文件php.ini的配置:
memcache.hash_strategy = consistent
这样,nginx与PHP即可完成对memcached的集群与负载均衡算法。
待整理...