服务端部署

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

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  -d -u root -c
[root@nfs01 ~]# lsof -i :
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
memcached root 26u IPv4 0t0 TCP *:memcache (LISTEN)
memcached root 27u IPv6 0t0 TCP *:memcache (LISTEN)
memcached root 28u IPv4 0t0 UDP *:memcache
memcached root 29u IPv6 0t0 UDP *:memcache
[root@nfs01 ~]# netstat -lntup |grep memca
tcp 0.0.0.0: 0.0.0.0:* LISTEN /memcached
tcp ::: :::* LISTEN /memcached
udp 0.0.0.0: 0.0.0.0:* /memcached
udp ::: :::* /memcached

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

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

    参数说明:

参数

参数说明

-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)

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

 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..tgz
cd memcache-2.2.
/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..tgz
[root@web01 tools]# cd memcache-2.2. [root@web01 memcache-2.2.]# /application/php/bin/phpize
Configuring for:
PHP Api Version:
Zend Module Api No:
Zend Extension Api No:
[root@web01 memcache-2.2.]# ./configure -enable-memcache --with-php-config=/application/php/bin/php-config
[root@web01 memcache-2.2.]# make && make install

查看是否安装成功

 [root@web01 memcache-2.2.]# ls -l /application/php/lib/php/extensions/no-debug-non-zts-/
total -rwxr-xr-x root root Nov : memcache.so

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

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

 [root@web01 memcache-2.2.]# cd /application/php/lib/
[root@web01 lib]# vim php.ini
……
[root@web01 lib]# tail - 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
[-Nov- ::] NOTICE: configuration file /application/php-5.5./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', ) 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
//Session保存路径
$enkey = substr(md5(substr($cfg_cookie_encode,,)),,);
//$sessSavePath = DEDEDATA."/sessions_{$enkey}";
$sessSavePath = "tcp://172.16.1.31:11211";
if ( !is_dir($sessSavePath) ) mkdir($sessSavePath);

修改文件二:

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

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

特别感谢:元芳

此文章出自惨绿少年,转载请注明 

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

  1. Tomcat通过Memcached实现session共享的完整部署记录

    对于web应用集群的技术实现而言,最大的难点就是:如何能在集群中的多个节点之间保持数据的一致性,会话(Session)信息是这些数据中最重要的一块.要实现这一点, 大体上有两种方式:一种是把所有Ses ...

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

    session共享 我们在做站点的试试,通常需要保存用户的一些基本信息,比如登录就会用到Session:当使用Nginx做负载均衡的时候,用户浏览站点的时候会被分配到不同的服务器上,此时如果登录后Se ...

  3. 分布式Session共享(二):tomcat+memcached实现session共享

    一.前言 本文主要测试memcached实现session共享的实现方式,不讨论如何让nginx参与实现负载均衡等. 二.环境配置 本测试在Window下进行 name version port To ...

  4. 【Tomcat】Tomcat + Memcached 实现session共享

    概述 web项目中,Tomcat的访问量总是有限的,这时候就需要用到Tomcat集群,多个Tomcat的时候就要考虑Session共享的问题,这里介绍一种使用Memcached做Session共享的解 ...

  5. 项目分布式部署那些事(2):基于OCS(Memcached)的Session共享方案

    在不久之前发布了一篇"项目分布式部署那些事(1):ONS消息队列.基于Redis的Session共享,开源共享",因为一些问题我们使用了阿里云的OCS,下面就来简单的介绍和分享下相 ...

  6. CAS 集群部署session共享配置

    背景 前段时间,项目计划搞独立的登录鉴权中心,由于单独开发一套稳定的登录.鉴权代码,工作量大,最终的方案是对开源鉴权中心CAS(Central Authentication Service)作适配修改 ...

  7. koajs项目之memcached实现session共享

    在做nodejs服务的负载时要考虑到session共享的问题,一般常用的就是memcached方式实现的,本文主要介绍通过npm社区的几个模块轻松实现这个功能. 做koa的session一般会想到用k ...

  8. NGINX + TOMCAT7 + MEMCACHED 实现SESSION 共享

    原文地址: http://my.oschina.net/u/1791256/blog/283064 TOMCAT7.0+ NGINX + MEMCACHED + memcached-session-m ...

  9. Nginx+Tomcat+Memcached实现session共享

    实验环境: server1:nginx tomcat memcached server2:tomcat memcached Session是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入 ...

随机推荐

  1. 第一次安装jshint,jshint新手使用记录

    刚刚出来工作的渣渣,第一次进入这样比较正规的公司,各个开发流程都比较严格,代码也是要经过jshint的检测才能上传到svn才能成功打包项目.所以我这种技术都半桶水的职场开发小白,也是第一次用jshin ...

  2. 宿命的PSS

    宿命的PSS 时间限制: 1 Sec  内存限制: 128 MB提交: 60  解决: 37[提交][状态][讨论版] 题目描述 最小生成树P.S.S在宿命的指引下找到了巫师Kismi.P.S.S希望 ...

  3. VBA /VB/VB中合成分散数据方法

    公司用于项目号的合成,怕忘记,特此放上这里.若能帮助其它道友,善莫大焉. 比如:001,004,006,007,008,009,010 结果可以输出:001,004,006-010 逻辑:1.获得数据 ...

  4. HDU1068 二分匹配 独立集

    前边和后边性别不同!!!不然NP了 Girls and Boys Problem Description the second year of the university somebody star ...

  5. JSONP、图片Ping、XMLHttpRequest2.0等跨域资源请求(CORS)

    跨域:当协议.主域名.子域名.端口号中任意一个不相同时都不算同一个域,而在不同域之间请求数据即为跨域请求.解决方法有以下几种(如有错误欢迎指出)以请求图片url为例: 1.通过XMLHttpReque ...

  6. win10 uwp 应用转后台清理内存

    我在写小说阅读器,把每个打开的文件的内容读到内存,因为小说都很小,所以放在内存不怕太大,但是我如果打开了一本小说,再打开一本,我不会把先打开的小说的内容清除掉,在内存.所以一旦我打开多小说的时候,内存 ...

  7. hibernate利用mysql的自增张id属性实现自增长id和手动赋值id并存

    我们知道在mysql中如果设置了表id为自增长属性的话,insert语句中如果对id赋值(值没有被用到过)了,则插入的数据的id会为用户设置的值,并且该表的id的最大值会重新计算,以插入后表的id最大 ...

  8. 基于HTML5的WebGL实现的2D3D迷宫小游戏

    为了实现一个基于HTML5的场景小游戏,我采用了HT for Web来实现,短短200行代码,我就能实现用"第一人称"来操作前进后退上下左右,并且实现了碰撞检测. 先来看下实现的效 ...

  9. [Python] 文科生零基础学编程系列一——对象、集合、属性、方法的基本定义

    1.编程语言: 1.1是什么: 编程语言(programming language),是用来定义计算机程序的形式语言.它是一种被标准化的交流技巧,用来向计算机发出指令. 一种计算机语言让程序员能够准确 ...

  10. css实现的交互运动

    <style type="text/css"> .filter-mix { position: absolute; top: 50%; left: 50%; trans ...