服务端部署

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

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. Gaussian and Truncated Gaussian

    Everybody knows about Gaussian distribution, and Gaussian is very popular in Bayesian world and even ...

  2. spring框架总结(04)----介绍的是Spring中的JDBC模板

    1.1  Jdbc模板概述 它是spring框架中提供的一个对象,是对原始Jdbc API对象的简单封装.spring框架为我们提供了很多的操作模板类,入下图所示: 我们今天的主角在spring-jd ...

  3. 关于Java里面File类创建txt文件重复???

    private JButton getOpenButton() { if (openButton == null) { openButton = new JButton(); openButton.s ...

  4. Map 基础用法

    import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Set; p ...

  5. jquery各种事件使用方法总结(from:天宇之游)

    ps:本博客转自博主  天宇之游 ,地址:http://www.cnblogs.com/cwp-bg/  ,再次感谢天宇之游.jquery事件使用方法总结 一.鼠标事件1. click():鼠标单击事 ...

  6. Django中添加富文本编辑器

    使用的是CKeditor这个模块 1.安装: pip install django-ckeditor 2.将ckeditor注册到settings.py文件中, 并添加ckeditor的url到你项目 ...

  7. android6.0 SerialPort 服务

    上一篇博客描述了一个简单的串口应用程序和驱动程序,了解了应用程序访问串口的基本操作,如打开串口,设置串口,写串口,读串口,关闭串口等.和Linux串口驱动的基本框架.这里将了解Android下的串口系 ...

  8. 学习flex布局(弹性布局)

    Flex是Flexible Box的缩写,意为弹性布局.是W3C早期提出的一个新的布局方案.可以便捷的实现页面布局,目前较高版本的主流浏览器都能兼容,兼容情况如下: Flex在移动端开发上已是主流,比 ...

  9. win10 uwp 获得元素绝对坐标

    有时候需要获得一个元素,相对窗口的坐标,在修改他的位置可以使用. 那么 UWP 如何获得元素坐标? 我提供了一个方法,可以获得元素的坐标. 首先需要获得元素,如果没有获得元素,那么如何得到他的坐标? ...

  10. win10 uwp 改变鼠标

    经常在应用需要修改光标,显示点击.显示输入,但是有些元素不是系统的,那么如何设置鼠标? 本文主要:UWP 设置光标,UWP 移动鼠标 设置光标 需要写一点代码来让程序比较容易看到,什么光标对于什么. ...