阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

企业级Memcached部署(session共享)

198次阅读
没有评论

共计 4278 个字符,预计需要花费 11 分钟才能阅读完成。

服务端部署

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

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

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

  第二个里程碑:安装 memcache

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

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

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

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

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

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

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

客户端部署(web 服务器)

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

命令集如下:

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

完整操作过程:

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

查看是否安装成功

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

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

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

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

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

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

#重启服务 

killall php-fpm
killall php-fpm
/application/php/sbin/php-fpm

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

企业级 Memcached 部署(session 共享) 

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

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

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

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

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

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

原配置

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

修改为:

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

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

killall php-fpm
killall php-fpm
/application/php/sbin/php-fpm

修改之前 phpinfo信息

企业级 Memcached 部署(session 共享)

修改之后 phpinfo信息

 企业级 Memcached 部署(session 共享)

到此企业级 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.linuxidc.com/dede

解决办法:

  修改文件一:

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

  修改文件二:

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

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

本博文中所使用的系统版本为: CentOS release 6.9 (Final),内核版本为:2.6.32-696.10.1.el6.x86_64

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-11/148422.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计4278字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中