服务端部署

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

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. ARKit 增强现实平台 尝试(Xcode9 iOS11 A9处理器)

    一, Xcode 将加​​载其主页面并显示模板选择页面.模板简化了入门过程.然后选择增强现实应用程序图标,单击"下一步"按钮. 二, 运行程序会看到一个飞机 三,尝试更换模型 在这 ...

  2. 变量的声明和定义以及extern的用法

    变量的声明和定义以及extern的用法                                          变量的声明不同于变量的定义,这一点往往容易让人混淆. l         变量 ...

  3. [Sdoi2010]星际竞速

    个人对山东省选已经十分无语了,做了三道题,都TM是费用流,这山东省选是要干什么,2009--2011连续三年,只要会费用流,然后建个边,跑一跑就过了. 10 年一度的银河系赛车大赛又要开始了.作为全银 ...

  4. 在CentOS6上配置MHA过程全记录

    在CentOS6上配置MHA过程全记录 MHA(Master High Availability)是一款开源的MariaDB or MySQL高可用程序,为MariaDB or MySQL主从复制架构 ...

  5. python --- json模块和pickle模块详解

    json:JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式(用于数据序列化和反序列化).(适用于多种编程语言,可以与其他编程语言做数据交换 ...

  6. webpack2使用ch5-多页面设置 内部js和引入js

    1 当前目录 2 webpack.config.js 配置 const webpack = require('webpack'), htmlWebpackPlugin = require('html- ...

  7. ORALCE PL/SQL学习笔记

    ORALCE  PL/SQL学习笔记 详情见自己电脑的备份数据资料

  8. Sql语句构造类,多字段新增或修改时,拼装sql语句比较方便

    using System; using System.Collections.Generic; using System.Text; namespace MSCL { #region 使用示例 /* ...

  9. Echarts数据可视化全解注释

    全栈工程师开发手册 (作者:栾鹏) Echarts数据可视化开发代码注释全解 Echarts数据可视化开发参数配置全解 6大公共组件详解(点击进入): title详解. tooltip详解.toolb ...

  10. 我的three.js学习记录(二)

    通过上一篇文章我的three.js学习记录(一)基本上是入门了three.js,但是这不够3D,这次我希望能把之前做的demo弄出来,然后通过例子来分析操作步骤. 1. 示例 上图是之前做的一个dem ...