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

    待整理...

  • 相关阅读:
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'getDataSource' defined in class path resource nested exception is org.springframework.beans.factory.BeanCreat异常
    Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating Caused by: tk.mybatis.mapper.MapperException: 无法获取 cn.itcast.mapper.UserMapper.existsWithPrimaryKey 方法的泛型信息!
    fibnacci数列递归实现
    XOR加密
    Pep8课下作业
    求最大公约数伪代码
    《信息安全专业导论》第五周学习总结
    20191306《信息安全专业导论》第四周学习总结
    用或非门实现其他逻辑门
    寻找黑客偶像
  • 原文地址:https://www.cnblogs.com/Jackie-Chen/p/10656089.html
Copyright © 2020-2023  润新知