Tomcat
Tomcat是Apache下的一个核心子项目,是使用量较大的免费的JAVA服务器。主要处理的是JSP页面和Servlet文件。Tomcat常常与Apache整合起来使用,Apache处理静态页面,比如Html页面,而Tomcat负责编译处理JSP页面与Servlet。在静态页面处理能力上,Tomcat不如Apache。由于Tomcat是开源免费、功能强大易用的,很多JAVA的初学者都喜欢用它。当然,也有不少中小企业用其与Apache整合做Web服务器。熟练掌握Tomcat的使用是非常必要的。可以这么说,熟练安装配置Tomcat是软件测试工程师的必备技能。
1. Tomcat的部署安装
server2:
wget http://172.25.28.250/pub/docs/lamp/apache-tomcat-7.0.37.tar.gz
wget http://172.25.28.250/pub/docs/lamp/jdk-8u121-linux-x64.rpm
wget http://172.25.28.250/pub/docs/lamp/test.jsp
tar zxf apache-tomcat-7.0.37.tar.gz
rpm -ivh jdk-8u121-linux-x64.rpm
mv apache-tomcat-7.0.37 /usr/local/
ln -s /usr/local/apache-tomcat-7.0.37/ /usr/local/tomcat
mv test.jsp /usr/local/tomcat/webapps/ROOT/
ln -s /usr/local/tomcat/bin/startup.sh /usr/local/sbin/ 开启全局命令
ln -s /usr/local/tomcat/bin/shutdown.sh /usr/local/sbin/ 开启全局命令
startup.sh
netstat -anltp 查看8080端口是否开启
http://172.25.28.2:8080 宿主机浏览器测试是否开启成功
二、负载均衡与反向代理
在server1中设定反向代理,则可以通过server1访问到server2主机的tomcat。
vim /usr/local/nginx/conf/nginx.conflocation ~ \.jsp$ {proxy_pass http://172.25.28.2:8080;}
nginx -s reload
测试:
当在真机浏览器进行访问时,只能访问到静态的tomcat页面。
静态数据由nginx支持,所以通过server1访问tomcat打不开图形在浏览器中进行测试,添加用户和密码。可以在日志中查看到tomcat的记录。
如果将server2主机中的tomcat服务停掉,则不能通过server1访问。
server2:
shutdown.sh
此时可以在server2主机日志中看到新建的用户和密码。
cat /usr/local/tomcat/logs/catalina.out
将tomcat复制到server3主机中,并解压,开启服务。
server2:
scp -r /usr/local/tomcat/ server3:/usr/local/
scp jdk-8u121-linux-x64.rpm server3:
server3:
rpm -ivh jdk-8u121-linux-x64.rpm
/usr/local/tomcat/bin/startup.sh
http://172.25.28.3:8080 宿主机浏览器测试是否开启t成功
在server1主机nginx配置文件中设定负载均衡与反向代理,重启服务。
http {upstream tom {#ip_hash;#sticky;server 172.25.28.2:80 weight=2;server 172.25.28.3:80;server 172.25.28.1 backup;}upstream tomcat {sticky;server 172.25.28.2:8080;server 172.25.28.3:8080;}location ~ \.jsp$ {proxy_pass http://tomcat;}
nginx -s reload
测试:
关闭server2的服务
server2:
shutdown.sh
此时用户并不知道server2关闭,nginx将自动调度server3主机进行信息存储。此时服务器为server3,因为server2与server3信息不共享,因此信息消失。
三、tomcat结合memcache交互存储
tomcat本身存储所有的信息,memcache只是为了session共享,是tomcat的额外存储。
nginx调用其中一台主机的tomcat,并将信息交叉存储在另一台主机的memcache中,即就是,tomcat1将信息存在memcache2中。
如果tomcat1不能使用,nginx则自动调度tomcat2,此时将信息存储在本机memcache2中,信息此时是完整的。如果tomcat1恢复,则重新调度tomcat1,将信息继续存储在memcache2中,信息依旧完整。
如果memcache2不能使用,tomcat1将把信息存放在memcache1中,此时信息仍然完整,因为,tomcat1本身将所有的信息存储在本机memory中,memcache只是为了额外存储。
这样,无论什么情况,都最大限度的保证了数据的完整性,且信息同步共享。
分别在server2和server3中安装并启用memcache。
server2:
yum install -y memcached
systemctl start memcached
server3:
yum install -y memcached
systemctl start memcached
在server2主机中对tomcat的配置文件进行编辑,设定交叉存储,将自身memcache设为n1,server3主机的memcache设为n2,正常运行时将信息存放在n2,不能正常运行时,将信息存储在n1,即自身memcache。
server2:
vim /usr/local/tomcat/conf/context.xml <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"memcachedNodes="n1:172.25.28.2:11211,n2:172.25.28.3:11211"failoverNodes="n1"requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"/>
cd /usr/local/tomcat/lib/
scp 172.25.28.250:/var/www/html/pub/docs/lamp/jar/* .
rm -rf memcached-session-manager-tc6-1.6.3.jar ##版本需对应,这个不对应
startup.sh
此时先配置server3的tomcat服务,编辑配置文件,设定交叉存储,正常运行时将信息存放在n1,不能正常运行时,将信息存储在n2,即自身memcache。
在真机浏览器里进行测试,此时tomcat2将信息存放在memcache3,即n2。
server3:
vim /usr/local/tomcat/conf/context.xml <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"memcachedNodes="n1:172.25.28.2:11211,n2:172.25.28.3:11211"failoverNodes="n2"requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"/>
cd /usr/local/tomcat/lib/
scp 172.25.28.250:/var/www/html/pub/docs/lamp/jar/* .
rm -rf memcached-session-manager-tc6-1.6.3.jar ##版本需对应,这个不对应
startup.sh
此时在server3可以看到记录,但server2不能看到。
server3:
yum install -y telnet
telnet localhost 11211
get 885BFF511B3427287137D95229FAFECD-n2 可以看到用户建立记录
01{����{����#885BFF511B3427287137D95229FAFECD-n2user1123
server2
yum install -y telnet
telnet localhost 11211
get 885BFF511B3427287137D95229FAFECD-n2
为空
关闭server2服务,tomcat2挂掉,由tomcat3接管,新建用户后,将信息存放在memcache2,即n1,因此可以在server2中看到新建的用户。
server2:
shutdown.sh
server2:
telnet localhost 11211
get 87FC0FF0BCC78842DC9DA23957FC33CB-n1
W{��]�{�01{��FF0BC9DA23957FC33CB-n1ssss1111zzz333
开启server2服务,关闭server3服务,tomcat2重新接管服务,在浏览器新建新用户,信息存放在memcache2,在server2就可以看到用户记录。
server2:
telnet localhost 11211–>get xxx-n1 ##可以看到用户建立记录user5,user6
实验完成,重新开启所有服务。