企业级memcached部署(session共享)

服务端部署

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

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

[[email protected] ~]# yum install libevent  libevent-devel nc -y

   第二个里程碑:安装memcache

[[email protected] ~]# yum install memcached -y
[[email protected] ~]# which memcached
/usr/bin/memcached

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

[[email protected] ~]# memcached -m 16m -p 11211 -d -u root -c 8192
[[email protected] ~]# 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
[[email protected] ~]# 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可以同时启动多个实例,端口不一致即可。

[[email protected] ~]# 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

完整操作过程:

[[email protected] ~]# cd /server/tools/
[[email protected] tools]# wget http://pecl.php.net/get/memcache-2.2.7.tgz
[[email protected] tools]# tar xf memcache-2.2.7.tgz
[[email protected] tools]# cd memcache-2.2.7

[[email protected] memcache-2.2.7]# /application/php/bin/phpize
Configuring for:
PHP Api Version:         20121113
Zend Module Api No:      20121212
Zend Extension Api No:   220121212
[[email protected] memcache-2.2.7]# ./configure -enable-memcache --with-php-config=/application/php/bin/php-config
[[email protected] memcache-2.2.7]# make && make install

查看是否安装成功

[[email protected] 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客户端使其生效

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

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

[[email protected] 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文件

[[email protected] 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 表示连接成功

[[email protected] blog]# /application/php/bin/php   test_memcache.php
Memcache connect OK

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

[[email protected] ~]# 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

解决办法:

修改文件一:

[[email protected] include]# pwd
/application/nginx/html/www/include

[[email protected] 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);

修改文件二:

[[email protected] 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的共享.解决问题.

特别感谢:元芳

时间: 2024-10-11 03:28:13

企业级memcached部署(session共享)的相关文章

memcached原理 部署memcached 、 Session共享

案例1:构建memcached服务案例2:LNMP+memcached案例3:PHP的本地Session信息案例4:PHP实现session共享1 案例1:构建memcached服务1.1 问题 本案例要求先快速搭建好一台memcached服务器,并对memcached进行简单的增.删.改.查操作:安装memcached软件,并启动服务使用telnet测试memcached服务对memcached进行增.删.改.查等操作1.2 方案 使用1台RHEL7虚拟机作为memcached服务器(192.

Nginx + Memcached 实现Session共享的负载均衡

session共享 我们在做站点的试试,通常需要保存用户的一些基本信息,比如登录就会用到Session:当使用Nginx做负载均衡的时候,用户浏览站点的时候会被分配到不同的服务器上,此时如果登录后Session就在不同发服务器上,A记住了用户的登录状态,可是下一次用户请求被分配到B去了怎么办?不可能让用户再登陆一次.所以要实现session共享. 方法 1.ip_hash,这是Nginx的轮询方法,用户登录站点时,就会一直在这台服务器上就不存在Session的问题 优点:不需要采用任何处理: 缺

nginx+tomcat8+memcached实现session共享具体操作

本次试验用到的软件包的版本如下: 一.针对10.43.2.134的操作 1.安装jdk环境 tar zxf jdk-8u5-linux-x64.tar.gz mkdir /usr/java mv jdk1.8.0_05/ /usr/java/ 编辑/etc/profile 在文档的末尾追加如下5行内容: JAVA_HOME=/usr/java/jdk1.8.0_05 JRE_HOME=/usr/java/jdk1.8.0_05/jre PATH=$PATH:$JAVA_HOME/bin:$JRE

Memcached实现Session共享

一.memcached安装 1. memcached安装和启动.查看进程 安装扩展源 yum install -y epel-release 安装软件.组件.工具包 yum install -y libevent memcached libmemcached 启动 /etc/init.d/memcached start 进程 ps aux |grep memcached 解释: -d  启动一个守护进程 -p  监听的端口,默认11211 -u  运行memcached用户 -m 内存大小,单位

Tomcat基于MSM+Memcached实现Session共享

前言 在Tomcat集群中,当一个节点出现故障,其他节点该如何接管故障节点的Session信息呢?本文带来的解决方案是基于MSM+Memcached实现Session共享. 相关介绍 MSM MSM--Memcached Session Manager是一个高可用的Tomcat Session共享解决方案,除了可以从本机内存快速读取Session信息(仅针对黏性Session)外,同时可使用Memcached存取Session,以实现高可用. 工作原理 Sticky Session(黏性) 模式

【Tomcat】Tomcat + Memcached 实现session共享

概述 web项目中,Tomcat的访问量总是有限的,这时候就需要用到Tomcat集群,多个Tomcat的时候就要考虑Session共享的问题,这里介绍一种使用Memcached做Session共享的解决方案 环境 操作系统:Linux( centOS 6..5 版) 软件:Tomcat7    Memcached 实现原理 Tomcat + Memcached 实现session共享流程图 配置 安装Tomcat 2个和Memcached 1个,参考[Linux]Tomcat安装及一个服务器配置

nginx+tomcat8+memcached实现session 共享

操作环境: iP地址 角色 安装软件 10.43.2.135 nginx方向代理 memcached服务器 nginx   memcached 10.43.2.134 tomcat服务器 2个tomcat(端口分别为8080 8081) 实验中使用的软件如下: 实现思路: 第一步:针对10.43.2.134的操作 1.在10.43.2.134上安装2个tomcat 2.在$CATALINA/webapps/ROOT/下建立测试页面t.jsp 3.分别启动2个tomcat服务 4.打开http:/

memcached原理 、 部署memcached 、 Session共享

############################################################################################memcache服务器: 传统Web架构的问题:--> 许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示--> 随着数据量的增大,访问的集中,就会出现RDBMS的负担加重,数据库响应恶化,网站显示延迟等重要问题. 数据存储位置对比:性能-CPU缓存>内存>磁盘>数

【电商】nginx+tomcat+memcached实现session共享集群

在分布式多tomcat web集群环境下,首先要解决的是session的共享问题,一般的实现思路有: (1) session复制:多tomcat之间进行session的同步,集群中的tomcat存储相同的session信息 (2) 共享session存储:将session集中存储在同一个地方,如redis/memcached,甚至DB.tomcat本身的内存中并不存储session (3) session粘性:其实session粘性并不是session共享的方案,而是多tomcat的集群方案,配