博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
企业级memcached部署(session共享)
阅读量:5787 次
发布时间:2019-06-18

本文共 4998 字,大约阅读时间需要 16 分钟。

服务端部署

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

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

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

   第二个里程碑:安装memcache

1 [root@nfs01 ~]# yum install memcached -y2 [root@nfs01 ~]# which memcached3 /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/tools2 wget http://pecl.php.net/get/memcache-2.2.7.tgz3 tar xf memcache-2.2.7.tgz4 cd memcache-2.2.75 /application/php/bin/phpize6 ./configure -enable-memcache --with-php-config=/application/php/bin/php-config7 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:      2012121210 Zend Extension Api No:   22012121211 [root@web01 memcache-2.2.7]# ./configure -enable-memcache --with-php-config=/application/php/bin/php-config12 [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 2523 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.ini3 ……4 [root@web01 lib]# tail -2 php.ini5 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  -t2 [07-Nov-2017 10:20:44] NOTICE: configuration file /application/php-5.5.32/etc/php-fpm.conf test is successful

#重启服务 

1 killall php-fpm2 killall php-fpm3 /application/php/sbin/php-fpm

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

 

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

1 [root@web01 blog]# cat  test_memcache.php2 
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 = files2 session.save_path = "/tmp"

 

修改为:

 

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

 

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

1 killall php-fpm2 killall php-fpm3 /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]# pwd2 /application/nginx/html/www/include3 4 [root@web01 include]# vim common.inc.php5 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.php2 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的共享.解决问题.

特别感谢:元芳

此文章出自惨绿少年,转载请注明 
你可能感兴趣的文章
技术人生:不要忘记过去,也不要想着过去,向前看
查看>>
移动应用
查看>>
android unity3d开发学习第一步
查看>>
用python写一个hello world程序
查看>>
JavaScript 命名空间
查看>>
JS的parent对象
查看>>
Ext JS isField为空或不是对象问题的解决
查看>>
Android下的HttpClient的使用(9.11)
查看>>
图片处理软件初体验
查看>>
Log4j日志级别
查看>>
HDU 4422 The Little Girl who Picks Mushrooms(简单题)
查看>>
HDUOJ---------(1045)Fire Net
查看>>
TextView 超链接点击跳转到下一个Activity
查看>>
Java技术专题之JVM逻辑内存回收机制研究图解版
查看>>
jQuery选择器遇上一些特殊字符
查看>>
《FilthyRichClients》读书笔记(一)-SwingのEDT
查看>>
使用 JAVA 中的动态代理实现数据库连接池
查看>>
让你明白response.sendRedirect()与request.getRequestDispatcher().forward()区别
查看>>
回溯法的一般方法
查看>>
关于前端学习和笔试面试的总结
查看>>