tomcat2 memarche

会话集群复制

 会话管理器:Session manager

Tomcat Session Replication Cluster:
(1) 配置启用集群,将下列配置放置于<engine>或<host>中;

如何配置会话集群(在负载均衡实验的基础上做的)

在第一台tomcat主机上

vim /etc/tomcat/server.xml   (tomcat服务器下的配置文件)

将下面的内容放到一个host主机设定的内部。(这种设置只符合后台有三五台tomcat,过多的后台服务器不合适使用此方法,会造成对带宽资源的消耗,速度慢)

<Cluster className=”org.apache.catalina.ha.tcp.SimpleTcpCluster”
channelSendOptions=”8″>

<Manager className=”org.apache.catalina.ha.session.DeltaManager”
expireSessionsOnShutdown=”false”
notifyListenersOnReplication=”true”/>

<Channel className=”org.apache.catalina.tribes.group.GroupChannel”>
<Membership className=”org.apache.catalina.tribes.membership.McastService”
address=”228.0.0.119″
port=”45564″
frequency=”500″
dropTime=”3000″/>
<Receiver className=”org.apache.catalina.tribes.transport.nio.NioReceiver”
address=”192.168.60.21″   (输入各自主机的地址)
port=”4000″
autoBind=”100″
selectorTimeout=”5000″
maxThreads=”6″/>

<Sender className=”org.apache.catalina.tribes.transport.ReplicationTransmitter”>
<Transport className=”org.apache.catalina.tribes.transport.nio.PooledParallelSender”/>
</Sender>
<Interceptor className=”org.apache.catalina.tribes.group.interceptors.TcpFailureDetector”/>
<Interceptor className=”org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor”/>
</Channel>

<Valve className=”org.apache.catalina.ha.tcp.ReplicationValve”
filter=””/>
<Valve className=”org.apache.catalina.ha.session.JvmRouteBinderValve”/>

<Deployer className=”org.apache.catalina.ha.deploy.FarmWarDeployer”
tempDir=”/tmp/war-temp/”
deployDir=”/tmp/war-deploy/”
watchDir=”/tmp/war-listen/”
watchEnabled=”false”/>

<ClusterListener className=”org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener”/>
<ClusterListener className=”org.apache.catalina.ha.session.ClusterSessionListener”/>
</Cluster>

还需要添加此行的内容:

<Engine name=”Catalina” defaultHost=”localhost” jvmRoute=”TcB”>

cd /data/test/ROOT/进入自定义的主页路径下(或者系统默认的主页面下);

mkdir WEB-INF (创建此文件夹)

cp /etc/tomcat/web.xml WEB-INF/   (复制系统的模板文件到刚才创建的文件夹下面)

vim WEB-INF/web.xml  (系统默认有的给删除重新复制一份到这里来)

QQ截图20180718211638

 

在tomcat2上做上面相同的操作就可以了

在浏览器上访问:就可以实现会话绑定了。http://192.168.60.4 (此IP为调度器的IP地址)

 

 Memcached(服务端缓存)

在Web服务开发中,服务端缓存是服务实现中所常常采用的一种提高服务性能的方法。其通过记录某部分计算结果来尝试避免再次执行得到该结果所需要的复杂计算,从而提高了服务的运行效率。
除了能够提高服务的运行效率之外,服务端缓存还常常用来提高服务的扩展性。因此一些大规模的Web应用,如Facebook,常常构建一个庞大的服务端缓存。而它们所最常使用的就是Memcached。

缓存的系统分为两类:

递归式:客户端发起请求到缓存服务器,如果命中,缓存服务器则返回数据,没命中则代替客户端向后端服务器去查询数据,然后将数据传送到客户端。

旁挂式:客户端发起请求到缓存服务器,如果命中,缓存服务器则返回数据,没命中则返回告诉客户端自己这里没有数据,然后客户端在去自行向后端服务器去索取数据信息,客户端还要决定此数据是否需要缓存到缓存服务器上去。

memcache的作用和工作原理:

memcache和提供web服务的程序配合使用,每台memcache之间是相互不通信的,且每台memcache上缓存的web服务都是相同的,当客户端通过调度器来访问一个web服务时memcache会将两者之间的会话记录缓存下来,如果后台提供web服务的一台服务器宕机了,调度器将会话调度到另一台web服务器上,此时memcache里的缓存数据会记录你以前的会话数据,即使调度到另一台web服务器上时,也会有以前的会话数据。

memcache的缓存大小设定好的,一旦数据到达其设定的值时,会将最老的数据覆盖掉,以此循环类推。

 

 

可流式化的数据:

Memcached的特征:

1 .协议简单:

2 . 基于libevent的事件处理:

3 . 内置内存的处理方式:(数据存储在内存当中,不支持存到磁盘上,重启memcached数据就会丢失)

4 . memcached不互相通信的分布式集群:(分布式:各个服务器之间的数据各不相同的)

且不互相通信,通过和数组取模的算法,去到指定的memcached服务器上去去数据,如果没有,也不会去其他节点上的memcached服务器上去取,而是直接到后台realserver上去取数据。

 

memcached对缓存项的管理:

memcached对自己内存的管理:如果分给memcached4G的存储空间,他会把空间分为一个个的小的数据块,比如50K大小的空间块10个,60k大小的空间块20个等,如果有一个数据是55k大小,他将直接被存入到60K大小的空间块里去。其中有5K大小的空间就浪费了。没有办法只能这样,以防止数据的碎片化。

到最后可能会发现,4G的空间存放真实数据大小只有3.5G的大小而已。

如果要减少空间的浪费,将步进数调小,如50k到55K再到60K ,但与此同时CPU要管理的缓存项就会增加,加大CPU的资源消耗。所以要综合考虑来处理。

Memcached使用了一种叫Slab的结构。在该分配算法中,内存将按照1MB的大小划分为页,而该页内存则会继续被分割为一系列具有相同大小的内存块:QQ截图20180719112857

分配好的块大小,就已经固定了,不可以再重新分配了,只能重复利用。块里所缓存的内容不会被memcached去清除掉,即使数据已经过期了了,如果数据的时间自己定义的过期时常,到了的话,memcached会将其标记为可使用的空间,不会清除数据,只会将新的数据覆盖掉旧的数据。

 

yum install memcached   (安装memcached)

主程序:/usr/bin/memcached

memcached没有配置文件,仅靠命令行选项来定制就够了。

memcached -h  (查看选项)

memcached程序的常用选项:
-m <num>:Use <num> MB memory max to use for object storage; the default is 64 megabytes.
-c <num>:Use <num> max simultaneous connections; the default is 1024.
-u <username>:以指定的用户身份来运行进程;
-l <ip_addr>:监听的IP地址,默认为本机所有地址;
-p <num>:监听的TCP端口, the default is port 11211.
-U <num>:Listen on UDP port <num>, the default is port 11211, 0 is off.
-M:内存耗尽时,不执行LRU清理缓存,而是拒绝存入新的缓存项,直到有多余的空间可用时为止;
-f <factor>:增长因子;默认是1.25;
-t <threads>:启动的用于响应用户请求的线程数;(线程数<=CPU的核数)

-f 设定块增长的步进的大小。默认是1.25倍来增长的,可以自己设定

端口号:11211

/etc/sysconfig/memcached(将选项及对应要设定的值放在此配置文件中即可)

PORT=”11211″
USER=”memcached”
MAXCONN=”1024″
CACHESIZE=”128″
OPTIONS=”-f 1.2″(添加的步进选项)

systemctl start memcache   (启动服务)

ss -nult (查看端口号)

11211.既监听在tcp协议上又监听在udp协议上。

telnet 127.0.0.1 11211  (进入到本机的memcached缓存中去)

进入之后输入:stats   (显示memcached的缓存内容)

命令:
统计类:stats, stats items, stats slabs, stats sizes
存储类:set, add, replace, append, prepend

检索类:get, delete, incr/decr
清空:flush_all

memcached默认没有认证机制,可借用于SASL进行认证;
SASL:Simple Authentication Secure Layer

API:
php-pecl-memcache
php-pecl-memcached
python-memcached
libmemcached
libmemcached-devel

 

实验:使用memcached将tomcat会话缓存到memcached缓存里去。

结构原理图:

新建位图图像 (2)

memcached-session-manager项目地址,

http://code.google.com/p/memcached-session-manager/,

https://github.com/magro/memcached-session-manager

1 . 在tomcat1上:

yum install tomcat tomcat-admin-webapps -y

yum install java-1.8.0-openjdk-devel

cd  /usr/share/tomcat/webapps/

mkdir ROOT   (创建文件夹来存放tomcat的主页面)

cd ROOT

vim index.jsp   (创建测试界面)

<%@ page language=”java” %>
<html>
<head><title>TomcatB</title></head>
<body>
<h1><font color=”green”>TomcatA.magedu.com</font></h1>
<table align=”centre” border=”1″>
<tr>
<td>Session ID</td>
<% session.setAttribute(“magedu.com”,”magedu.com”); %>
<td><%= session.getId() %></td>
</tr>
<tr>
<td>Created on</td>
<td><%= session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>

systemctl start tomcat   (启动服务)

ss -nul   (查看端口号是否打开)

在tomcat2上如tomcat1的操作重复一遍。

2 .在nginx调度器上的配置

yum install nginx

yum install nginx (安装服务包)
vim /etc/nginx/nginx.conf
upstream www {
server 192.168.60.20:8080;
server 192.168.60.21:8080;
} (添加后端tomcat服务器的IP地址)
vim /etc/nginx/conf.d/test.conf  (创建新的配置文件)
server {
listen 80 default_server;
server_name www.aa.com;
root /usr/share/nginx/html;
location / {
proxy_pass http://www;
}
} (这里没有指定调度算法。默认的是轮询的调度算法)重新加载服务
nginx -s reload (重新加载配置文件)
nginx 开启服务

下载如下jar文件至各tomcat节点的tomcat安装目录下的lib目录中/usr/share/tomcat/lib/

此文件在 \PUB\Sources\7.x86_64/msm/下不包含old文件夹的都下载下来。

在tomcat1和tomcat2 上安装yum install memcached (服务)

systemctl start memcached  (启动服务)

ss -nult  (查看端口号是否开启了)

然后:

vim /etc/tomcat/server.xml   (两个tomcat节点都做如下操作)

在定义的host主机下添加如下内容:

<Context path=”/” docBase=”ROOT” reloadable=””/> <Manager className=”de.javakaffee.web.msm.MemcachedBackupSessionManager”
memcachedNodes=“n1:192.168.60.21:11211,n2:192.168.60.22:11211” (两个memcached节点的地址)
failoverNodes=”n1″ (故障转移节点;n2节点宕机后转移到n1节点上)
requestUriIgnorePattern=”.*\.(ico|png|gif|jpg|css|js)$” (忽略要缓存的数据类型;图片类的)
transcoderFactoryClass=”de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory”
/> (使用的转码)
</Context>

QQ截图20180719165423

systemctl restart tomcat  (重新启动tomcat服务)

tail /var/log/tomcat/catalina.2018-07-19.log  (如果服务起不来可以查看日志来排错)

 

 

Tomcat的常用优化配置
(1) 内存空间:
/etc/sysconfig/tomcat, /etc/tomcat/tomcat.conf, /usr/local/tomcat/bin/catalina.sh
JAVA_OPTS=”-server -Xms32g -Xmx32g -XX:NewSize= -XX:MaxNewSize= -XX:PermSize= -XX:MaxPermSize=”
-server:服务器模型
-Xms:堆内存初始化大小;
-Xmx:堆内存空间上限;
-XX:NewSize=:新生代空间初始化大小;
-XX:MaxNewSize=:新生代空间最大值;
-XX:PermSize=:持久代空间初始化大小;
-XX:MaxPermSize=:持久代空间最大值;

(2) 线程池设置:
<Connector port=”8080″ protocol=”HTTP/1.1″ connectionTimeout=”20000″ redirectPort=”8443″ />

常用属性:
maxThreads:最大线程数;最大并发连接数;
minSpareThreads:最小空闲线程数;
maxSpareThreads:最大空闲线程数;
acceptCount:等待队列的最大长度;
URIEncoding:URI地址编码格式,建议使用UTF-8;
enableLookups:是否启用dns解析,建议禁用;
compression:是否启用传输压缩机制,建议“on”;
compressionMinSize:启用压缩传输的数据流最小值,单位是字节;
compressableMimeType:定义启用压缩功能的MIME类型;
text/html, text/xml, text/css, text/javascript

(3) 禁用8005端口;
<Server port=”-1″ shutdown=”SHUTDOWN”>

(4) 隐藏版本信息:
<Connector port=”8080″ protocol=”HTTP/1.1″ connectionTimeout=”20000″ redirectPort=”8443″ />

Server=”SOME STRING”

 

 

 

 

 

 

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/103153

(0)
无所谓无所谓
上一篇 2018-07-18
下一篇 2018-07-19

相关推荐

  • 第一周作业之:计算机的组成及其功能 | Linux发行版 | Linux哲学思想

    计算机组成 Linux发行版 Linux哲学思想

    2018-04-14
  • route命令

    1.   使用背景         需要接入两个网络,一个是部署环境所在内网环境,这个环境是上不了外网, 外网环境很可能是一个无线网络。如果两者都连接上,很可能导致有一方不能起作用,即外网或内网上不了,常常需要使用繁琐的“禁用网络连接”、“启用网络连接”的操作来进行内外网的切换,甚是麻烦。         为了解决这个问题,可以使用route命令来使得同时内…

    Linux笔记 2018-05-01
  • 网络管理基础

    1.PDU: Protocol Data Unit,协议数据单元是指对等层次之间传递的数据单位 物理层的 PDU是数据位 bit 数据链路层的 PDU是数据帧 frame 网络层的PDU是数据包 packet 传输层的 PDU是数据段 segment 其他更高层次的PDU是消息 message 2.TCP特性工作在传输层 面向连接协议 全双工协…

    Linux笔记 2018-05-02
  • Linux系统计划任务

    在生活、生产环境中,我们可能遇到这样的场景,想在某个时刻,或者固定某个时间周期的在Linux系统中执行某项任务,例如,定时关机,定期自动清理垃圾文件等,at,crontab等命令就是帮你实现这样功能的。

    2018-05-06
  • shell打印选择菜单shell

    每天一练小脚本

    Linux笔记 2018-05-19