一、环境介绍
二、安装配置后端服务器
三、安装配置前端服务器
四、配置Tomcat服务器实现session共享
五、构建网上商城系统
一、环境介绍
系统版本:CentOS 6.4_x86_64
Mysql版本:mysql-5.1.66-2.el6_3.x86_64
Apache版本:httpd-2.2.15-26.el6
Tomcat版本:apache-tomcat-7.0.33 点此下载
Jdk版本: jdk-7u40-linux-x64 点此下载
Tomcat-commectors版本:tomcat-connectors-1.2.37 点此下载
网上商城系统:shopxx-3.0Beta 点此下载
环境介绍:
注释:后端服务器网卡使用"Host-only";前端Apache服务器"eth1"网卡为"Host-only","eth0"网卡为"Bridged";而后端服务器的网关指向Apache的服务器的"eth1"网卡地址
当用户通过 "www.allen.com" 域名访问时,首先由前端Apache服务器响应并把动态页面根据某种调度算法将请求转发以后端Tomcat服务器上,由Tomcat服务器响应Apache服务器,再由Apache服务器响应客户端;而后端Tomcat服务器是基于Tomcat自带的基于内存复制的session共享集群
注:Tomcat的详细配置及介绍请看前两篇写的博客,这里主要介绍tomcat如何实现的session共享
二、安装配置后端服务器
1、安装Tomcat服务器,安装方法相同,这里只介绍一次
------安装JDK # rpm -ivh jdk-7u40-linux-x64.rpm # vim /etc/profile.d/java.sh export JAVA_HOME=/usr/java/latest export PATH=$JAVA_HOME/bin:$PATH # . /etc/profile.d/java.sh # java -version #查看JDK是否安装成功 java version "1.7.0_40" Java(TM) SE Runtime Environment (build 1.7.0_40-b43) Java HotSpot(TM) 64-Bit Server VM (build 24.0-b56, mixed mode) ------------------------------------------------------------------------ ------安装Tomcat # tar xf apache-tomcat-7.0.42.tar.gz -C /usr/local/ # cd /usr/local/ # ln -s apache-tomcat-7.0.42 tomcat # vim /etc/profile.d/tomcat.sh export CATALINA_HOME=/usr/local/tomcat export PATH=$CATALINA_HOME/bin:/$PATH # catalina.sh version #查看Tomcat是否安装成功 Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/java/latest Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Server version: Apache Tomcat/7.0.42 Server built: Jul 2 2013 08:57:41 Server number: 7.0.42.0 OS Name: Linux OS Version: 2.6.32-358.el6.x86_64 Architecture: amd64 JVM Version: 1.7.0_40-b43 JVM Vendor: Oracle Corporation ---------------------------------------------------------------------- # catalina.sh start #启动Tomcat进程 # jps #查看启动的JVM虚拟机与Tomcat 2925 Bootstrap 2943 Jps # ss -tanlp|grep 80 #查看监听的端口 LISTEN 0 100 :::8080 :::* users:(("java",2925,40)) LISTEN 0 1 ::ffff:127.0.0.1:8005 :::* users:(("java",2925,46)) LISTEN 0 100 :::8009 :::* users:(("java",2925,41))
2、安装Mysql服务器,并授权一个用户便于后面安装网上商城系统使用
[root@mysql ~]# yum -y install mysql-server [root@mysql ~]# service mysqld start [root@mysql ~]# mysql mysql> grant all on *.* to 'shopuser'@'192.168.1.%' identified by 'shoppass'; mysql> flush privileges; 注释:授权一个用户,用于商城系统连接数据库使用,这里授权了所有权限方便做实验,但在生产环境中千万不要授权所有权限;然后刷新使其生效
三、安装配置前端服务器
1、安装Apache服务
[root@apache ~]# yum -y install httpd [root@apache ~]# service httpd start [root@apache ~]# ss -tanl | grep 80 LISTEN 0 128 :::80 :::*
2、访问测试服务是否正常
3、配置基于"mod_proxy"模块的Apache代理(使用rpm包安装默认已经开启了此模块)
[root@apache ~]# vim /etc/httpd/conf.d/mod_proxy.conf ProxyVia On ProxyRequests Off ProxyPreserveHost Off <Proxy balancer://allen> BalancerMember http://192.168.1.1:8080 loadfactor=1 BalancerMember http://192.168.1.2:8080 loadfactor=1 ProxySet lbmethod=bytraffic </Proxy> <Proxy *> Order allow,deny Allow from all </Proxy> ProxyPass / balancer://allen/ ProxyPassReverse / balancer://allen/ <Location /> Order allow,deny Allow from all </Location> ---------------------------------------------------------------------- 注释:BalancerMember 指定后端服务器IP及连接协议、权重等
4、开启Tomcat的管理功能并访问测试;两台Tomcat服务器配置相同
------添加如下内容 # vim /usr/local/tomcat/conf/tomcat-users.xml <role rolename="manager-gui"/> <role rolename="admin-gui"/> <user username="tomcat" password="tomcat" roles="admin-gui.manager-gui"/> ------------------------------------------------------------------------ # catalina.sh stop #重新启动使其生效 # catalina.sh start
5、使用"www.allen.com" 域名访问测试是否能登录到Tomcat后端管理页面
######Windows客户端在hosts文件中添加如下记录 C:\Windows\System32\drivers\etc\hosts 172.16.14.1 www.allen.com
四、配置Tomcat服务器实现session共享
1、修改Tomcat1服务器的配置文件
[root@Tomcat1 ~]# cd /usr/local/tomcat/conf/ [root@Tomcat1 conf]# cp server.xml server.xml.bak ---------------------------------------------------------------------- [root@Tomcat1 conf]# vim server.xml <Engine name="Catalina" defaultHost="www.allen.com"> #修改默认访问主机 <Host name="www.allen.com" appBase="/web/allen" #在Engine标签中添加一个虚拟主机 unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="allen_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> <Context path="" docBase="/web/allen" /> </Host> ---------------------------------------------------------------------- [root@Tomcat1 ~]# mkdir -p /web/allen #创建网站存放目录 [root@Tomcat1 conf]# vim /web/allen/index.jsp #创建测试页面 <%@ page language="java" %> <html> <head><title>TomcatA</title></head> <body> <h1><font color="red">TomcatA </font></h1> <table align="centre" border="1"> <tr> <td>Session ID</td> <% session.setAttribute("abc","abc"); %> <td><%= session.getId() %></td> </tr> <tr> <td>Created on</td> <td><%= session.getCreationTime() %></td> </tr> </table> </body> </html> ---------------------------------------------------------------------- [root@Tomcat1 ~]# catalina.sh stop #重启使配置生效 [root@Tomcat1 ~]# catalina.sh start
2、修改Tomcat2服务器的配置文件
[root@Tomcat2 ~]# cd /usr/local/tomcat/conf/ [root@Tomcat2 conf]# cp server.xml server.xml.bak ---------------------------------------------------------------------- [root@Tomcat2 conf]# vim server.xml <Engine name="Catalina" defaultHost="www.allen.com"> #修改默认访问主机 <Host name="www.allen.com" appBase="/web/allen" #在Engine标签中添加一个虚拟主机 unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="allen_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> <Context path="" docBase="/web/allen" /> </Host> ---------------------------------------------------------------------- [root@Tomcat2 ~]# mkdir -p /web/allen #创建网站存放目录 [root@Tomcat2 conf]# vim /web/allen/index.jsp #创建测试页面 <%@ page language="java" %> <html> <head><title>TomcatB</title></head> <body> <h1><font color="blue">TomcatB </font></h1> <table align="centre" border="1"> <tr> <td>Session ID</td> <% session.setAttribute("abc","abc"); %> <td><%= session.getId() %></td> </tr> <tr> <td>Created on</td> <td><%= session.getCreationTime() %></td> </tr> </table> </body> </html> ---------------------------------------------------------------------- [root@Tomcat2 ~]# catalina.sh stop #重启使配置生效 [root@Tomcat2 ~]# catalina.sh start
3、访问前端代理服务器测试是否实现负载均衡效果
4、配置Tomcat服务器实现session共享
######编辑Tomcat1服务器 [root@Tomcat1 ~]# nano /usr/local/tomcat/conf/server.xml #使用"nano"文本编辑工具打开主配置文件 <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.4" #组播地址要保持一致 port="45564" frequency="500" dropTime="3000"/> <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="192.168.1.1" #主机IP地址,也可以使用auto 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>”标签中添加,对所有主机生效;也可以添加在“<Host>”标签中,对当前主机生效;用"nano"编辑工具的原因是:复制这些集群配置粘贴至文本文件时有格式,如果使用"vim"打开,粘贴到文本中比较乱,修改完成后,按<Crtl+o>组合键然后再按<Crtl+x>组合键保存,再使用"vim"编辑器编辑其内容就没有问题了 ---------------------------------------------------------------------- [root@Tomcat1 ~]# mkdir /web/allen/WEB-INF #创建"WEB-INF"目录 [root@Tomcat1 ~]# cp /usr/local/tomcat/conf/web.xml /web/allen/WEB-INF/ #为此网站提供一个"web.xml"文件 [root@Tomcat1 ~]# vim /web/allen/WEB-INF/web.xml <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <distributable/> #添加此行内容 </web-app> ---------------------------------------------------------------------- [root@Tomcat1 ~]# catalina.sh stop #重启使用配置生效 [root@Tomcat1 ~]# catalina.sh start
======================================================================== ######修改Tomcat2服务器 [root@Tomcat1 ~]# scp /usr/local/tomcat/conf/server.xml 192.168.1.2:/usr/local/tomcat/conf/ [root@Tomcat1 ~]# scp -r /web/allen/WEB-INF 192.168.1.2:/web/allen/ 注释:将Tomcat1服务器的主配置文件与网站目录下的"WEB-INF"目录及目录下的文件复制到Tomcat2服务器;然后只需要修改主配置中集群配置代码中的IP地址为当前主机的IP地址即可:如下 <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="192.168.1.2" port="4000" autoBind="100" selectorTimeout="5000" maxThreads="6"/> ---------------------------------------------------------------------- [root@Tomcat2 ~]# catalina.sh stop #重启服务使配置生效 [root@Tomcat2 ~]# catalina.sh start
5、验证是否实现session共享
由上图可见,访问到不同的后台主机而"session_id"是相同的,已经成功实现"session"共享
6、可以查看Tomcat日志验证集群节点是否正常
# tail /usr/local/tomcat/logs/catalina.2013-09-24.log INFO: Received member disappeared:org.apache.catalina.tribes.membership.MemberImpl[tcp://{192, 168, 1, 2}:4000,{192, 168, 1, 2},4000, alive=377686, securePort=-1, UDP Port=-1, id={73 -112 -108 -8 97 9 66 63 -110 -63 -81 115 61 -92 90 78 }, payload={}, command={66 65 66 89 45 65 76 69 88 ...(9)}, domain={}, ] 注释:由上可知,有一个地址"192.168.1.2"已加入到集群中
五、构建网上商城系统
1、需调整java虚拟机运行的内存大小,否则安装网上商城系统时会提示内存较小
# vim /usr/local/tomcat/bin/catalina.sh #JAVA_OPTS="$JAVA_OPTS -Dorg.apache.catalina.security.SecurityListener.UMASK=`umask`" #找到此行在下面添加如下内容 JAVA_OPTS="$JAVA_OPTS -Xmx300M" 注释:修改java虚拟机的内存需要在启动脚本里修改; -Xmx:java虚拟机使用最大内存 -Xms:java虚拟机初始值的内存大小 -Xmn:java虚拟机的最小使用内存;M:指的是MB,不指定则为KB
2、在Tomcat1服务器上安装网上商城系统
[root@Tomcat1 ~]# unzip shopxx-3.0Beta.zip #解压缩商城系统 [root@Tomcat1 ~]# rm -rf /web/allen/* #删除原来网站目录文件或新添加一个虚拟主机; [root@Tomcat1 ~]# cp -rp shopxx-v3.0-Beta/shopxx-3.0Beta /web/allen/shop #将商城系统复制到网站目录下 [root@Tomcat1 ~]# vim /web/allen/shop/WEB-INF/web.xml <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <distributable/> #添加此内容 注释:修改网站目录下"web.xml"文件,在"<web-app>"标签下添加内容 ------------------------------------------------------------------------ <distributable/> [root@Tomcat1 ~]# catalina.sh stop #重启Tomcat服务 [root@Tomcat1 ~]# catalina.sh start
3、在前端Apache服务器上安装浏览器软件
[root@apache ~]# yum -y install firefox 注释:如果后端服务器直接可以跟本地通信,这一步可以省略,安装的时候不能经过代理来安装
4、安装网上商城系统
[root@apache ~]# firefox & #在前端服务器执行此命令会打开一个图形化浏览器窗口
勾选同意使用协议,点击下一步
点击下一步,会有一个警告提示信息,可以点OK继续安装;然后填写数据库信息
点立即安装,会自动创建数据库安装并初始化数据
5、然后点击完成安装,会提示让重启WEB服务,上图中还提示安装完成后删除install目录
[root@Tomcat1 ~]# mv /web/allen/shop/install /web/allen/shop/install.bak [root@Tomcat1 ~]# catalina.sh stop [root@Tomcat1 ~]# catalina.sh start 注释:这里没有删除Install目录只是做了重命名,然后重启服务
6、将Tomcat1服务器的的WEB程序与修改过的"catalina.sh"脚本复制到Tomcat2服务器相对应的路径下
[root@Tomcat2 ~]# rm -rf /web/allen/* #删除Tomcat2服务器上网站目录的测试文件 [root@Tomcat1 ~]# scp -rp /web/allen/shop 192.168.1.2:/web/allen/ [root@Tomcat1 ~]# scp /usr/local/tomcat/bin/catalina.sh 192.168.1.2:/usr/local/tomcat/bin/ ------------------------------------------------------------------------ [root@Tomcat2 ~]# catalina.sh stop #重启Tomcat2服务器上的Tomcat服务 [root@Tomcat2 ~]# catalina.sh start
7、使用本地浏览器访问 "www.allen.com" 域名验证网上商城系统
8、可以在商城系统注册一个帐号,并登录到系统,比如购买一些衣服等,查看购物车中是否保存已加入到购物车中的衣服;如果有说明"session"信息已经成功同步到各节点并能够追踪用户的状态信息
到此,Tomcat基于内存复制的session共享集群已完成,也可以成功实现一个网上商城系统的正常运行,这里就不做太多介绍了,当然如果博友们有兴趣可以登录到后台管理界面看看,注意:使用此商城系统时只能用于演示,不能用于商业,使用时请认识阅读授权协议...
本文出自 “ALLEN” 博客,谢绝转载!