tomcat相关实验

tomcat相关实验

1.实现LNT

同主机实现

1、安装并启动tomcat
1)OpenJDK的安装
	yum install java-1.8.0-openjdk-devel.x86_64 
	确定JDK是否安装可以使用如下命令
		java -version    ##可以看到版本,说明安装成功
2)tomcat安装
	yum install tomcat tomcat-admin-webapps tomcat-docs-webapp tomcat-webapps
	service tomcat start
	ss -ntl 
		监听的端口有三个:8080为http协议的接口,8009为ajp协议的接口,8005为管理接口

2、安装nginx并配置
	vim /etc/nginx/nginx.conf
		在server段增加如下内容
		root     /usr/local/tomcat/webapps/ROOT;   ##表示访问静态文件就访问nginx的这个目录,此目录是tomcat默认根目录。
		index index.jsp;
		location ~* \.(jsp|do)$ {                        ##访问的是jsp或者do结尾的动态文件就调度到后端主机tomcat
		        proxy_pass http://192.168.213.251:8080;
		        }
	nginx -t
	service nginx restart  
	http://192.168.213.251/    ##这里直接访问80端口就可以了看到tomcat默认主页面了

2.实现LAT

同主机(静态网页)

1、安装并启动tomcat
1)OpenJDK的安装
	yum install java-1.8.0-openjdk-devel.x86_64 
	确定JDK是否安装可以使用如下命令
		java -version    ##可以看到版本,说明安装成功
2)tomcat安装
	yum install tomcat tomcat-admin-webapps tomcat-docs-webapp tomcat-webapps
	service tomcat start
	ss -ntl 
		监听的端口有三个:8080为http协议的接口,8009为ajp协议的接口,8005为管理接口

2、安装httpd服务并确保有ajp_module和http_module
	httpd -M |grep "proxy"     ##查看模块是否已经加载,如果没有加载,要在配置文件中加载这些模块
		 proxy_module (shared)
		 proxy_ajp_module (shared)    ##表示反向代理时后端服务器是aip协议
		 proxy_balancer_module (shared)
		 proxy_connect_module (shared)
		 proxy_express_module (shared)
		 proxy_fcgi_module (shared)
		 proxy_fdpass_module (shared)
		 proxy_ftp_module (shared)
		 proxy_http_module (shared)   ##表示反向代理时后端主机时http协议
		 proxy_scgi_module (shared)
		 proxy_wstunnel_module (shared)
3、与后端tomcat使用http协议连接时配置
	vim /etc/httpd/conf.d/tomcat.conf
		<virtualhost *:80>
		        documentroot "/usr/share/tomcat/webapps/ROOT"
		        <directory "usr/local/tomcat/webapps/ROOT">
		        require all granted
		        </directory>
		        proxyrequests off     ##关闭正向代理,不加可以
		        proxyvia on           
		        proxypreservehost on    
		        proxypass "/" "http://127.0.0.1:8080/"  
		        proxypassreverse "/" "http://127.0.0.1:8080/"  
		</virtualhost>
	httpd -t
	systemctl start httpd
	测试:http://172.18.21.107/
4、与后tomcat连接时使用的ajp协议时的配置
	vim /etc/httpd/conf.d/tomcat.conf
		<virtualhost *:80>
		        documentroot "/usr/local/tomcat/webapps/ROOT"
		        <directory "usr/local/tomcat/webapps/ROOT">
		                  require all granted
		        </directory>
		        proxyrequests off
		        proxyvia on
		        proxypreservehost on
		        proxypass "/" "ajp://127.0.0.1:8009/"
		        proxypassreverse "/" "ajp://127.0.0.1:8009/"
		</virtualhost>
	httpd -t
	systemctl reload httpd
5、测试
	http://172.18.21.107/

3.实现lnmt的zrlog博客搭建

环境:
A主机:tomcat,nginx,ip地址为192.168.213.251
B主机:数据库,ip地址为192.168.213.253

1)在A上操作
	1、安装openjdk
		yum install java-1.8.0-openjdk-devel.x86_64 
		java -version   ---确认是否安装成功
	2、安装tomcat
		yum install tomcat tomcat-admin-webapps tomcat-docs-webapp tomcat-webapps
		systemctl start tomcat
		http://192.168.213.251:8080   ##可以访问tomcat的默认网站
	3、将zrlog放到tomcat的根目录下
		mv  app/zrlog-1.7.1-release.war /usr/share/tomcat/webapps
		systemctl restart tomcat
		ls   ##发现文件被自动解开
		docs      host-manager  manager  zrlog-1.7.1-release
		examples  logs          ROOT     zrlog-1.7.1-release.war
		[root@centos7 webapps]#ln -s zrlog-1.7.1-release zrlog
	4、安装nginx并修改配置
		vim /etc/nginx/nginx.conf
			在server段增加如下内容
				 root     /usr/local/tomcat/webapps;  ##表示访问静态文件就访问nginx的这个目录,此目录是tomcat默认根目录。
				 index index.jsp;
				        location / {      ##访问的是jsp或者do结尾的动态文件就调度到后端主机tomcat,此处为本地
				        proxy_pass http://192.168.213.251:8080;
				        }
		nginx -t
		service nginx restart
		http://192.168.213.251/    ##这里直接访问80端口就可以了看到tomcat默认主页面了
2)在B上的设置
	安装数据库
		yum install mariadb-server
		systemctl start mariadb
		mysql
		create database zrlog;
		grant all on zrlog.* to zrloguser@'%' identified by "centos";
3)测试:
	登录网站
	http://192.168.213.251/zrlog/

4.实现nginx和httpd反代tomcat集群

环境
A:nginx和httpd:192.168.213.253
B:tomcat:192.168.213.251
C:tomcat:192.168.213.254

1》nginx反代
	1、在B和C上的设置
		mkdir -pv /usr/share/tomcat/webapps/myapp/WEB-INF
		vim /usr/share/tomcat/webapps/myapp/index.jsp
			<%@ page language="java" %>
			<%@ page language="java" %>
			<html>
			<head><title>TomcatA</title></head>
			<body>
			<h1><font color="red">TomcatA.com</font></h1>   ##在C上将颜色改为green,Tomcat改为B
			<table align="centre" border="1">
			<tr>
			<td>Session ID</td>
			<% session.setAttribute("shen.com","shen.com"); %>
			<td><%= session.getId() %></td>
			</tr>
			<tr> 
			<td>Created on</td> 
			<td><%= session.getCreationTime() %></td> 
			</tr>   
			</table>
			</body> 
			 </html> 
		http://172.18.213.251:8080/myapp/
		http://172.18.213.254:8080/myapp/
	2、A上设置
		vim /etc/nginx/nginx.conf
			在http中配置
				upstream tomcatsrv { 
			    		server 192.168.213.251:8080 ;
					server 192.168.213.254:8080 ;
			    	}
				  server {
				        listen 80 default_server;
					listen       [::]:80 default_server;
					index index.jsp ;
					root /usr/share/tomcat/webapps/app;
					location / {
						proxy_pass http://tomcatsrv ;
					}
		service nginx restart
		http://172.18.213.253/myapp/
2》httpd反代
	1、在B和C上的设置同上
	2、在调度器上的设置
		vim /etc/httpd/conf.d/tomcat.conf
			<proxy balancer://tomcatsrvs>                  ##定义一个后端服务器组
				BalancerMember http://192.168.213.251:8080 ##如果和后端服务器连接的协议为ajp协议,把http改为ajp并且把端口改为8009即可
				BalancerMember http://192.168.213.254:8080 
				ProxySet lbmethod=byrequests        
			</proxy>
			namevirtualhost *:80
			<VirtualHost *:80>
					documentroot /app
					<Directory /app>
						Require all granted
					</Directory>
					ProxyVia On
					ProxyRequests Off
					ProxyPass / balancer://tomcatsrvs/
					ProxyPassReverse / balancer://tomcatsrvs/
			</VirtualHost>
		httpd -t
		service httpd start
		http://172.18.213.253/app/
		httpd的负载集群功能具有健康状态检查功能
		可以把后端的一个tomcat停掉
		然后访问http://172.18.213.253/app/
		会发现不往关闭的tomcat主机调度了

5.实现httpd和nginx的会话粘性绑定

环境
A:nginx和httpd:192.168.213.253
B:tomcat:192.168.213.251
C:tomcat:192.168.213.254

1)httpd会话绑定
		在B和C上设置
			vim /etc/tomcat/server.xml 
				 <Engine name="Catalina" defaultHost="localhost" jvmroute="tomcatA">   ##在B上此行增加一个jvmroute="tomcatA,在C上此行增加jvmroute="tomcatB"
			systemctl restart tomcat
		在A上设置
			vim /etc/httpd/conf.d/tomcat.conf
				Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED 
				<proxy balancer://tomcatsrvs>
					BalancerMember http://172.18.213.251:8080 route=tomcatA
					BalancerMember http://172.18.213.254:8080 route=tomcatB
					ProxySet lbmethod=byrequests
					ProxySet stickysession=ROUTEID
				</Proxy>
				namevirtualhost *:80
				<VirtualHost *:80>
					documentroot /app
					<directory /app>
						Require all granted
					</directory>
					ProxyVia On
					ProxyRequests Off
					ProxyPass / balancer://tomcatsrvs/
					ProxyPassReverse / balancer://tomcatsrvs/
				</VirtualHost>
			service httpd reload
		http://172.18.213.253/app/

2)nginx会话绑定
	在B和C上操作同上
	在A上配置
			vim /etc/nginx/nginx.conf
				upstream tomcatsrv { 
					server 192.168.213.251:8080 ;
					server 192.168.213.254:8080 ;
					hash $request_uri consistent;
				}
				server {
					listen 80 default_server;
					listen [::]:80 default_server;
					index index.jsp ;
					root /usr/share/tomcat/webapps;
					location / {
						proxy_pass http://tomcatsrv ;
					}
				 }
			service nginx restart
	http://172.18.213.253/app
		发现只能调度至第一次访问的后端服务器,实现会话绑定。

6.两个tomcat服务器保存有相同的会话

环境
A:nginx和httpd:192.168.213.253
B:tomcat:192.168.213.251
C:tomcat:192.168.213.254

1)在B和C上的设置
	访问tomcat的官方文档
			http://192.168.213.254:8080/docs/cluster-howto.html  ,Document---->Clustering
	将官方文档中的如下内容复制到tomcat配置文件的<engine>或<host>中,此实验放到Engine中
	vim /etc/tomcat/server.xml 
			<Engine name="Catalina" defaultHost="localhost">
			<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.74.74.74"  
				port="45564"
				frequency="500"        ##表示每0.5s发送一次心跳信息告诉其他成员自己还活着
				dropTime="3000"/>   ##表示3s没有发送信息就证明坏了
			<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
				address="172.18.213.251"   ##另外一台主机修改为172.18.213.254
				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>
			
	cp /etc/tomcat/web.xml /usr/share/tomcat/webapps/app/WEB-INF/   
	cd /usr/share/tomcat/webapps/app/WEB-INF/
	vim web.xml 
			在此文件内部没有注释的地方加如下内容
			<distributable/>   ##注意一定要在这个文件的内部,就在<web.app下加上就可
	systemctl restart tomcat
	注意:
		CentOS 7上的tomcat自带的文档中的配置示例有语法错误;没有加最后的/
				<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
				<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
2)在A的设置
		vim /etc/httpd/conf.d/tomcat.conf
			<proxy balancer://tomcatsrvs>
				BalancerMember http://172.18.213.251:8080 
				BalancerMember http://172.18.213.254:8080
				ProxySet lbmethod=byrequests
			</Proxy>
			namevirtualhost *:80
			<VirtualHost *:80>
				documentroot /app
				<directory /app>
					Require all granted
				</directory>
				ProxyVia On
				ProxyRequests Off
				ProxyPass / balancer://tomcatsrvs/
				ProxyPassReverse / balancer://tomcatsrvs/
			</VirtualHost>
		service httpd reload
	http://172.18.213.253/app/

6.实现session会话保持到memcache服务器

要想将会话保存至后端memcache中,并且每个memcache都保存相同的会话,需要一个管理项目memcached-session-manager,项目地址:https://github.com/magro/memcached-session-manager,找到SetupAndConfiguration wiki page.并点击进去。其中
在Add memcached-session-manager jars to tomcat处下载(根据所需进行下载)
	下载.jar文件至各tomcat的/usr/share/tomcat/lib/目录中,其中的${version}要换成你所需要的版本号,tc${6,7,8}要选与tomcat版本相同的版本号。
		memcached-session-manager-2.1.1.jar
		memcached-session-manager-tc7-2.1.1.jar   ##要根据tomcat的版本,实验时是7版本,所以这里要下载tc7
		spymemcached-2.9.1.jar
在Add custom serializers to your webapp (optional)处下载(根据所需进行下载)
	这里下载的是kryo-serializer,有如下jar文件需要下载
		msm-kryo-serializer-2.1.1.jar
		kryo-serializers-0.42.jar
		kryo-4.0.1.jar
		minlog-1.3.0.jar
		reflectasm-1.11.3-shaded.jar
		reflectasm-1.11.3.jar
		asm-5.2.jar
		objenesis-2.6.jar

实现过程如下

		1、在director上实现nginx或者httpd的反向代理至tomcat集群,本实验用的是httpd
				vim /etc/httpd/conf.d/tomcat.conf 
					<proxy balancer://tomcatsrvs>
						BalancerMember http://172.18.213.251:8080
						BalancerMember http://172.18.213.254:8080
						ProxySet lbmethod=byrequests
					</Proxy>
					namevirtualhost *:80
					<VirtualHost *:80>
						documentroot /app
						<directory /app>
							Require all granted
						</directory>
						ProxyVia On
						ProxyRequests Off
						ProxyPass / balancer://tomcatsrvs/
						ProxyPassReverse / balancer://tomcatsrvs/
					</VirtualHost>
				service httpd start
		2、在两个后端服务器上的设置
				安装tomcat和memcache并启动服务
				yum install memcached -y
				systemctl start memcached
				ls /usr/share/tomcat/lib/          ##复制.jar文件到此目录
				vim /etc/tomcat/server.xml  ##将官方文档中的此段内容复制到tomcat的配置文件中
					 <Context path="/app" docBase="/usr/share/tomcat/webapps/app" reloadable="true">
					 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
					    memcachedNodes="n1:172.18.213.254:11211,n2:172.18.213.254:11211"
					    failoverNodes="n1"
				             requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
					    transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"/>
					</Context>
				systemctl restart tomcat
		3、测试
				安装客户端工具
				yum install -y libmemcached    ##不安装此软件包无法使用memdump等客户端工具
				http://172.18.213.253/app/      ##访问发现被调度到不同的tomcat主机,但会话是一样的
				memdump --server 172.18.21.107:11211     ##此命令可以查看到memcache中缓存的值
				systemctl stop memcached     ##关闭一台memcached
				http://172.18.213.253/app/      ##继续访问发现会话仍然不变,说明会话在两台memcache中都缓存了
posted @ 2017-11-12 20:54  shenxm  阅读(375)  评论(0编辑  收藏  举报