memcached原理 、 部署memcached 、 Session共享

############################################################################################
memcache服务器:

传统Web架构的问题:
--> 许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示
--> 随着数据量的增大,访问的集中,就会出现RDBMS的负担加重,数据库响应恶化,网站显示延迟等重要问题。

数据存储位置对比:
性能
-CPU缓存>内存>磁盘>数据库
价格
-CPU缓存>内存>磁盘>数据库

从数据存储位置对比看出,考虑到性价比,我们可以将数据存放在内存中。

######################################################################################################3
memcached高性能的分布是缓存服务器:
--> 用来集中缓存数据库查询结果,减少数据库访问次数,来提高动态Web的响应速度。

memcached工作原理:
客户端首次访问,从RDBMS中取得数据保存到memcached中,当客户端第二次进行访问时,直接村memcached中获得数据显示页面。

内存管理机制:

传统内存分配机制
--> 使用完通过分配获得的内存后回收内存,这种方式容易产生内存碎片并降低操作系统对内存的管理效率

Slab Allocation机制
--> 它按照预先规定的大小,将分配的内存分割成特定长度的内存块(chunk),再把尺寸相同的内存块分成组(chunk集合),这些内存快不会释放,可以重复利用。
-f 指定增长因子来控制chunk的大小。

memcached使用名为 Least Recently Used(LRU)机制来分配空间
--> 删除“最近最少使用”的记录
--> 当memcached的内存不足时,从最近未被使用的记录中搜索,并将其分配给新的记录。
-M参数禁止LRU功能,内存用尽时memcached会返回错误,不建议使用memcached -M -m 1024

#####################################################################################################

安装memcached:

#yum -y install memcached
#rpm -qa memcached
#cat /etc/sysconfig/memcached    //memcached启动配置文件
#cat /usr/lib/systemd/system/memcached.service    
#systemctl start memcached
#netstat -lnpt | grep :11211    //memcache端口号为11211.验证服务是否开启

测试memcached:使用telnet访问memcacehd服务器

#yum -y install telnet
#telnet 192.168.4.5 11211     //192.168.4.5memcached服务器地址

add name 0 180 10    //变量不存在则添加
set name 0 180 10    //添加或替换变量
replace name 0 180 10    //替换
get name    //读取变量
append name 0 180 10    //向变量中追加数据
delete name    //删除变量
stats    //查看状态
flush_all    //清空所有
提示:0表示不压缩,180为数据缓存时间,10为需要存储的数据字节数量。

##################################################################################################

LNMP+memcached:

安装nginx:
#yum -y install gcc gcc-c++ pcre-devel openssl-devel zlib-devel  //gcc支持c源码编译,gcc-c++支持C++源码编译,pcre-devel支持正则表达式,openssl-devel支持加密。zlib-devel库文件
#useradd -s /sbin/nologin nginx
#tar xzf nginx-1.8.0.tar.gz
#cd nginx-1.8.0
#./configure --user=nginx --group=nginx prefix=/usr/local/nginx --with-http_ssl_module
#make && make install
#ln -s /usr/local/nginx/sbin/nginx /usr/sbin/

安装mariadb:
#yum -y install maraidb mariadb-server mariadb-devel

安装PHP:
#yum -y install php php-mysql php-pecl-memcached        //php-pecl-memcached,为php添加memcached扩展
#yum -y localinstall  php-fpm-5.4.16-36.el7_1.x86_64.rpm

修改nginx配置文件:
#vim /usr/local/nginx/conf/nginx.conf
location / {
            root   html;
            index  index.php  index.html   index.htm;
        }
 location  ~  \.php$  {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
           # fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi.conf;
        }

启动服务:
#nginx -t        //检查有无语法错误
#nginx
#systemctl start mariadb
#systemcrl enable mariadb
#systemctl start php-fom
#systemctl enable php-fpm
#netstat -lnpt | grep :80
#netstat -lnpt | grep :3306
#netstat -lnmp | grep :9000

创建php页面测试memcached服务:
# vim /usr/local/nginx/html/test.php
<?php
$memcache=new Memcache;                //创建memcache对象
$memcache->connect(‘localhost’,11211) or die (‘could not connect!!’);
$memcache->set(‘key’,‘test’);             //定义变量
$get_values=$memcache->get(‘key’);        //获取变量值
echo $get_values;
?>

客户端测试:

# firefox http://192.168.4.5/test.php    //显示test

###############################################################################################

Session共享:

Session
--> 存放在服务器端,保存用户名 ,密码等信息

Cookies
--> 由服务器下发给客户端,保存在客户端的一个文件里,保存的内容主要包括:sessionID,帐号名,过期时间,路径和域

###################################################################################################

tomcat+session

前端nginx服务器:192.168.4.1
tomcat1服务器:192.168.4.2
tomcat2服务器:192.168.4.3

部署前端nginx调度器:

#vim /usr/local/nginx/conf/nginx.conf
upstream tomcatgrp {
    server 192.168.4.2:8080;
    server 192.168.4.3:8080;
}
server  {
    listen 80;
    server_name=location;
  location / {
    proxy_pass http://tomcatgrp;
    root html;
    index index.html index.htm;
    }
}

#nginx

###################################################################################
部署tomcat:
#rpm -qa | grep "java"    //查询是否安装java-1.8.0-openjdk;java-1.8.0-opjdk-headless
#tar xzf apache-tomcat-8.0.30.tar.gz
#mv  apache-tomcat-8.0.30   /usr/local/tomcat
#/usr/local/tomcat/bin/startup.sh
#netstat -lnpt | grep :8080

######################################################################################
创建JSP测试页面,要求页面可以显示Session ID信息:
#vim /usr/local/tomcat/webapps/ROOT/test.jsp
<html>
        <body bgcolor="red">                                //指定网页背景颜色
            <center>
            <%String s = session.getId();%>      //获取SessionID
              <%=s%>
            <h1>tomcatA</h1>            //固定字串信息,Web2的信息应该为tomcatB
            </center>
        </body>
</html>

客户端访问:
#firefox http://192.168.4.1/test.jsp        //显示两种页面SessionID一直在变化。

######################################################################################
tomcat实现session共享:
tomcat上部署msm
1、拷贝msm相关的jar包
# cp lnmp——soft/session/*.jar /usr/local/tomcat/lib/
2、修改tomcat,使其可以连接到memcache服务器
# vim /usr/local/tomcat/conf/context.xml
<Context>  在原有的Context中加入以下说明
    <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
        memcachedNodes="mem1:192.168.4.1:11211"                    //memcacehd服务器地址
        requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
        transcoderFactoryClass="de.javakaffee.web.msm.JavaSerializationTranscoderFactory"/>
</Context>
3、重启tomcat
# /usr/local/tomcat/bin/shutdown.sh
# netstat -tlnp | grep :8080
# /usr/local/tomcat/bin/startup.sh
4、重启tomcat失败
先查看8005端口是否开放
# netstat -tlnp | grep :8005
如果没有开放
#find / -name "*java.security*"    //查询文件位置
# vim /usr/lib/jvm/jre/lib/security/java.security
securerandom.source=file:/dev/urandom

客户端:
#firefox http://192.168.4.1/test.jsp        //显示两种页面SessionID不变。

时间: 2024-10-12 16:13:40

memcached原理 、 部署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+tomcat集群 session共享完整版

nginx+memcached+tomcat集群 session共享完整版 集群环境 1.nginx版本 nginx-1.6.2.tar.gz 2.jdk 版本 jdk-7u21-linux-x64.tar.gz 3.tomcat 版本  7.0.29 4.memcached 版本 memcached-1.4.22.tar.gz 5. CentOS 6.5 系统采用一台服务做测试 一.nginx安装 安装依赖包 yum -y install gcc gcc-c++ 1.安装pcre库 tar z

Nginx+Tomcat+Memcached 实现集群部署时Session共享

一.简介 我们系统经常要保存用户登录信息,有Cookie和Session机制,Cookie客户端保存用户信息,Session在服务端保存用户信息,如果浏览器不支持Cookie或者用户把Cookie禁掉了,Cookie就用不了,还有不同的浏览器采用不用方式保存Cookie,所以我们采用Session服务端来保存,上一节我们有介绍了Tomcat集群部署,怎么样集群的Tomcat对同个用户请求的都能获取保存在Session的用户信息,采用了Memcached管理Session,Memcached 是一

Memcached做Tomcat的session共享

基于cache DB缓存的session共享 基于memcache/redis缓存的session共享.即使用cacheDB存取session信息,应用服务器接受新请求将session信息保存在cache DB中,当应用服务器发生故障时,调度器会遍历寻找可用节点,分发请求,当应用服务器发现session不在本机内存时,则去cacheDB中查找,如果找到则复制到本机,这样实现session共享和高可用. Tomcat集群session同步方式:1)使用tomcat自带的cluster方式,多个to

Nginx+Tomcat+Memcached负载均衡和session共享

1. 演示搭建 说明:本文参考网络日志http://blog.csdn.net/remote_roamer/article/details/51133790,结合实际操作,仅做个演示记录. 1.1. 工具 1.Tomcat两个 2.Memcached 3.Nginx 如图: 1.2. 结果演示 1.打开浏览器访问http://localhost:8080/index.jsp 1.3. 配置 1.3.1. 安装Nginx 1.准备nginx,解压即可 2.配置打开nginx目录下的conf/ngi

【nginx+memcached+tomcat集群 session共享完整版】

集群环境 1.nginx版本 nginx-1.6.2.tar.gz 2.jdk 版本 jdk-7u21-linux-x64.tar.gz 3.tomcat 版本  7.0.29 4.memcached 版本 memcached-1.4.22.tar.gz 5. CentOS 6.5 系统采用一台服务做测试 阅读全文 更多java,java学习,java面试题 http://techfoxbbs.com

Tomcat集群环境下session共享方案梳理(1)-通过memcached(MSM)方法实现

对于web应用集群的技术实现而言,最大的难点就是:如何能在集群中的多个节点之间保持数据的一致性,会话(Session)信息是这些数据中最重要的一块.要实现这一点, 大体上有两种方式: 一种是把所有Session数据放到一台服务器上或者数据库中,集群中的所有节点通过访问这台Session服务器来获取数据: 另一种就是在集群中的所有节点间进行Session数据的同步拷贝,任何一个节点均保存了所有的Session数据. Tomcat集群session同步方案有以下几种方式: 1)使用tomcat自带的

Session共享实现方案调研

1.背景 随着互联网的日益壮大,网站的pv和uv成线性或者指数倍的增加.单服务器单数据库早已经不能满足实际需求.目前大多数大型网站的服务器都采用了分布式服务集群的部署方式,所谓集群,就是让一组计算机服务器协同工作,解决大并发,大数据量瓶颈问题.但是在服务集群中,session共享往往是一个比较头疼的问题.因为session是在服务器端保存的,如果用户跳转到其他服务器的话,session就会丢失,一般情况下,session不可跨服务器而存在.于是就有了分布式系统的session共享问题. 2.Se

memcached-session-manager 实现 tomcat session共享

原理 MSM(memcached-session-manager) 支持tomcat6 和tomcat7 ,利用 Value(Tomcat 阀)对Request进行跟踪.Request请求到来时,从memcached加载session,Request请求结束时,将tomcat session更新至memcached,以达到session共享之目的, 支持 sticky  和 non-sticky 模式. Sticky 模式:tomcat session 为 主session, memcached