1. 程式人生 > >企業級memcached部署(session共享)

企業級memcached部署(session共享)

ron amp 多個實例 path zend dir could not mon mkdir

服務端部署

第一個裏程碑:安裝依賴關系

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信息表示配置成功

技術分享

第四個裏程碑:編寫測試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信息

技術分享

修改之後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

解決辦法:

修改文件一:

[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的共享.解決問題.

特別感謝:元芳

企業級memcached部署(session共享)