zoukankan      html  css  js  c++  java
  • nginx第三方库安装以及连接memcache

    一.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的集群与负载均衡算法。

    待整理...

  • 相关阅读:
    004: 基本数据类型-List
    003: 基本类型-字符串类型
    002: 基本类型-数值型(int, float)
    001: Hello World
    Python中的单例模式的几种实现方式的及优化
    django之admin组件
    权限管理---设计分析以及具体细节
    基于Form组件实现的增删改和基于ModelForm实现的增删改
    Python常见问题系列
    django的render的说明
  • 原文地址:https://www.cnblogs.com/Jackie-Chen/p/10656089.html
Copyright © 2011-2022 走看看