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高可用群集(Memcached主主复制+Keepalived)