zoukankan      html  css  js  c++  java
  • 企业级memcached部署(session共享)

    服务端部署

       第一个里程碑:安装依赖关系

          Memcache用到了libevent这个库用于Socket的处理。

    1 [root@nfs01 ~]# yum install libevent libevent-devel nc -y

       第二个里程碑:安装memcache

    1 [root@nfs01 ~]# yum install memcached -y
    2 [root@nfs01 ~]# which memcached
    3 /usr/bin/memcached

       第三个里程碑:启动memcached服务

     1 [root@nfs01 ~]# memcached -m 16m -p 11211 -d -u root -c 8192
     2 [root@nfs01 ~]# lsof -i :11211
     3 COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
     4 memcached 10796 root   26u  IPv4  85717      0t0  TCP *:memcache (LISTEN)
     5 memcached 10796 root   27u  IPv6  85718      0t0  TCP *:memcache (LISTEN)
     6 memcached 10796 root   28u  IPv4  85721      0t0  UDP *:memcache
     7 memcached 10796 root   29u  IPv6  85722      0t0  UDP *:memcache
     8 [root@nfs01 ~]# netstat -lntup |grep memca
     9 tcp        0      0 0.0.0.0:11211        0.0.0.0:*      LISTEN      10796/memcached    
    10 tcp        0      0 :::11211               :::*           LISTEN      10796/memcached    
    11 udp        0      0 0.0.0.0:11211      0.0.0.0:*                      10796/memcached    
    12 udp        0      0 :::11211                    :::*                    10796/memcached  

    注:memcached可以同时启动多个实例,端口不一致即可。

    [root@nfs01 ~]# memcached -m 16m -p 11212 -d -u root -c 8192

        参数说明:

    参数

    参数说明

    -m

    max memory to use for items in megabytes (default: 64 MB)

    -p

    TCP port number to listen on (default: 11211)

    -d

    run as a daemon

    -u

    assume identity of <username> (only when run as root)

    -c

    max simultaneous connections (default: 1024)

       第四个里程碑:写入开机自启动

    1 echo 'memcached -m 16m -p 11211 -d -u root -c 8192' >>/etc/rc.local

    客户端部署(web服务器)

       第一个里程碑:安装PHP memcache 扩展插件

    命令集如下:

    1 cd /server/tools
    2 wget http://pecl.php.net/get/memcache-2.2.7.tgz
    3 tar xf memcache-2.2.7.tgz
    4 cd memcache-2.2.7
    5 /application/php/bin/phpize
    6 ./configure -enable-memcache --with-php-config=/application/php/bin/php-config
    7 make && make install

    完整操作过程:

     1 [root@web01 ~]# cd /server/tools/
     2 [root@web01 tools]# wget http://pecl.php.net/get/memcache-2.2.7.tgz
     3 [root@web01 tools]# tar xf memcache-2.2.7.tgz
     4 [root@web01 tools]# cd memcache-2.2.7
     5 
     6 [root@web01 memcache-2.2.7]# /application/php/bin/phpize
     7 Configuring for:
     8 PHP Api Version:         20121113
     9 Zend Module Api No:      20121212
    10 Zend Extension Api No:   220121212
    11 [root@web01 memcache-2.2.7]# ./configure -enable-memcache --with-php-config=/application/php/bin/php-config
    12 [root@web01 memcache-2.2.7]# make && make install

    查看是否安装成功

    1 [root@web01 memcache-2.2.7]# ls -l /application/php/lib/php/extensions/no-debug-non-zts-20121212/
    2 total 252
    3 
    4 -rwxr-xr-x 1 root root 258048 Nov  7 10:03 memcache.so

       memcache.so表示插件安装成功。

       第二个里程碑:配置memcache客户端使其生效

    1 [root@web01 memcache-2.2.7]# cd /application/php/lib/
    2 [root@web01 lib]# vim php.ini
    3 ……
    4 [root@web01 lib]# tail -2 php.ini
    5 extension_dir = "/application/php/lib/php/extensions/no-debug-non-zts-20121212/"
    6 extension = memcache.so

       第三个里程碑:检测语法,重启服务

    1 [root@web01 lib]# /application/php/sbin/php-fpm  -t
    2 [07-Nov-2017 10:20:44] NOTICE: configuration file /application/php-5.5.32/etc/php-fpm.conf test is successful

    #重启服务 

    1 killall php-fpm
    2 killall php-fpm
    3 /application/php/sbin/php-fpm

       浏览器访问phpinfo页面出现memcache信息表示配置成功

     

       第四个里程碑:编写测试memcache文件

    1 [root@web01 blog]# cat  test_memcache.php
    2 <?php
    3      $memcache = new Memcache;
    4      $memcache->connect('172.16.1.31', 11211) or die ("Could not connect NFS server");
    5      $memcache->set('key', 'Memcache connect OK');
    6      $get = $memcache->get('key');
    7      echo $get;
    8 ?>

       测试出现Memcache connect OK 表示连接成功

    1 [root@web01 blog]# /application/php/bin/php   test_memcache.php 
    2 Memcache connect OK

       第五个里程碑:修改php配置(设置session共享)

    1 [root@web01 ~]# vim /application/php/lib/php.ini

    原配置

    1 session.save_handler = files
    2 session.save_path = "/tmp"

    修改为:

    1 session.save_handler = memcache
    2 session.save_path = "tcp://172.16.1.31:11211"

    ⚠修改完成之后要重启php服务

    1 killall php-fpm
    2 killall php-fpm
    3 /application/php/sbin/php-fpm

    修改之前phpinfo信息

    修改之后phpinfo信息

     

    到此企业级memcache(session共享)部署完毕

    1.1.1 Memcached在集群中session共享存储的优缺点

    优点:

        1)读写速度上会比普通文件files速度快很多。

         2)可以解决多个服务器共用session的难题。

    缺点:

         1)session数据都保存在memory中,持久化方面有所欠缺,但对session数据来说不是问题。

         2)一般是单台,如果部署多台,多台之间数据无法同步。通过hash算法分配依然有session丢失的问题。

    替代方案:

         1)可以用其他的持久化系统存储session,例如redis,ttserver来替代memcached.

         2)高性能并发场景,cookies效率比session要好很多,因此,大网站都会用cookies解决会话共享的问题.

         3)一些不好的方法:lvs-p,nginx  ip_hash,不推荐使用.

     DedeCMS使用memcache问题

    问题:
        上述文件进行修改后,DedeCMS发现无法访问后台 http://www.etiantia.org/dede

    解决办法:

       修改文件一:

    1 [root@web01 include]# pwd
    2 /application/nginx/html/www/include
    3 
    4 [root@web01 include]# vim common.inc.php
    5 135 //Session保存路径
    6 136 $enkey = substr(md5(substr($cfg_cookie_encode,0,5)),0,10);
    7 137 //$sessSavePath = DEDEDATA."/sessions_{$enkey}";
    8 138 $sessSavePath = "tcp://172.16.1.31:11211";
    9 139 if ( !is_dir($sessSavePath) ) mkdir($sessSavePath);

       修改文件二:

    1 [root@web01 include]# vim vdimgck.php
    2 24 $enkey = substr(md5(substr($cfg_cookie_encode,0,5)),0,10);
    3 25 //$sessSavePath = DEDEDATA."/sessions_{$enkey}";
    4 26 $sessSavePath = "tcp://172.16.1.31:11211";
    5 27 if ( !is_dir($sessSavePath) ) mkdir($sessSavePath);

       让DedeCMS直接使用memcache的共享.解决问题.

    特别感谢:元芳

    此文章出自惨绿少年,转载请注明 
  • 相关阅读:
    C# 调用Java Webservice 加入SoapHeader 验证信息
    SqlServer查找表中多余的重复记录
    INI文件的读写
    Sql触发器脚本
    Sql遍历更新脚本
    CAS 单点登录,通过ticket 获取登录用户
    模块 | 验证格式
    aja如何解决跨域请求?
    说说各个浏览器box模型
    Vue 双向数据绑定原理分析
  • 原文地址:https://www.cnblogs.com/clsn/p/7799600.html
Copyright © 2011-2022 走看看