memcached原理 部署memcached Session共享

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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不变。



以上是关于memcached原理 部署memcached Session共享的主要内容,如果未能解决你的问题,请参考以下文章

Memcached原理与部署

部署Memcache服务

领会Memcached高可用群集(Memcached主主复制+Keepalived)

memcache-介绍原理

Memcached 主主复制 + Keepalived 高可用架构附上原理

怎么合理的使用memcache缓存?如果缓存数据量过大怎么部署?