一. Nginx负载均衡Tomcat
Real server(2个):
//创建虚拟主机
mkdir –pv /data/webapps/ROOT
cd /usr/local/tomcat/conf
vim server.xml
<Engine name="Catalina" defaultHost="node4.magedu.com" jvmRoute="TomcatA">
<Host name="node4.magedu.com" appBase="/data/webapps/" unpackWARs="true" autoDeploy="true">
<context path="" docBase="ROOT" reloadable="true">
</context>
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="/data/logs"
prefix="web1_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
Mkdir /data/logs
Mkdir -pv /data/webapps/ROOT/{lib,classes,META-INF,WEB-INF}
//创建测试页面
Vim /data/webapps/ROOT/index.jsp
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<html>
<head>
<title>jsp test page on web1</title>
</head>
<body>
<% out.println("hello,web1."); %>
</body>
</html>
//启动
Catalina.sh start
Director:
1001 cd /etc/nginx/
1005 cd conf.d/
1006 ls
//配置后端主机,并条件式代理
1007 vim default.conf
upstream tcsrvs {
server node4.magedu.com:8080;
server node5.magedu.com:8080;
}
server {
location ~*\.(jsp|do)$ {
proxy_pass http://tcsrvs;}
1009 service nginx start
//主机得互相解析
1012 vim /etc/hosts
192.168.184.10 node1.magedu.com
192.168.184.20 node4.magedu.com
192.168.184.21 node5.magedu.com
//验证
1013 curl http://192.168.184.10/index.jsp
1016 curl http://192.168.184.10/index.jsp
//会话绑定
1007 vim default.conf
upstream tcsrvs {
ip_hash;}
二. Httpd负载均衡tomacat
Director:
//查看模块
1023 httpd –M
//关闭DocumentRoot
1024 cd /etc/httpd/conf
1025 ls
1026 vim httpd.conf
#DocumentRoot "/var/www/html"
//创建虚拟机并对后端主机负载均衡
1027 cd ../conf.d
1028 ls
1029 vim vhosts.conf
<proxy balancer://lbcluster1>
BalancerMember http://192.168.184.20:8080 loadfactor=10 route=TomcatA
BalancerMember http://192.168.184.21:8080 loadfactor=10 route=TomcatB
</proxy>
<VirtualHost *:80>
ServerName web1.magedu.com
ProxyVia on
ProxyRequests off
ProxyPreserveHost on
<proxy *>
Require all granted //若httpd的版本小于2.4则会报错,注释掉
</proxy>
ProxyPass / balancer://lbcluster1/
ProxyPassReverse / balancer://lbcluster1/
<location />
Require all granted
</location>
</VirtualHost>
1031 httpd -t
1032 service httpd start
1033 curl http://192.168.184.10/index.jsp
1034 curl http://192.168.184.10/index.jsp
//会话绑定
1029 vim vhosts.conf
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
<proxy balancer://lbcluster1>
Proxyset stickysession=ROUTEID
</proxy>或者有时候是
<VirtualHost *:80>
ProxyPass / balancer://lbcluster1/ stickysession=routid
</VirtualHost>
//改变real server index.jsp测试会话绑定
Real server:
Vim /data/webapps/ROOT/index.jsp
<%@ page language="java"%>
<html>
<head><title>ToncatA</title></head>
<body>
<h1><font color="red"> TomcatA.magedu.com </font></h1>
<table aligne = “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>
//基于ajp协议实现
1029 vim vhosts.conf
<proxy balancer://lbcluster1>
BalancerMember ajp://192.168.184.20:8080 loadfactor=10 route=TomcatA
BalancerMember ajp://192.168.184.21:8080 loadfactor=10 route=TomcatB
<VirtualHost *:80>
ServerName web1.magedu.com
ProxyVia on
ProxyRequests off
ProxyPreserveHost on
<proxy *>
Require all granted
ProxyPass / balancer://lbcluster1/
ProxyPassReverse / balancer://lbcluster1/
Require all granted
三. Jk_module 实现负载均衡
Director:
//安装jk模块
1001 tar xf tomcat-connectors-1.2.32-src.tar.gz
1002 cd tomcat-connectors-1.2.32-src
1003 ls
1004 cd native/
1005 ls
1006 ./configure --help
1007 which apxs
1008 yum install httpd-devel gcc glibc-devel -y
1009 which apxs
1010 ./configure --with-apxs=/usr/sbin/apxs
1011 make && make install
//装载并查看jk模块
1012 cd /etc/httpd/
1013 ls
1014 cd conf.d/
1015 ls
1016 cp vhosts.conf vhosts.ajp.conf.bak
1017 mv vhosts.conf vhosts.http.conf.bak
1018 ls
1025 httpd -M | grep jk
1026 vim mod_jk.conf
LoadModule jk_module modules/mod_jk.so
JKWorkersFile /etc/httpd/conf.d/worker.properties
JKLogFile logs/mode_jk.log
JKlogLevel debug
JKMount /* TomcatA
JKMount /status/ stat1
1027 httpd -M | grep jk
//配置jk模块实现反向代理
1031 vim /etc/httpd/conf.d/worker.properties
worker.list=TomcatA,stat1
worker.TomcatA.port=8009
worker.TomcatA.host=192.168.184.20
worker.TomcatA.type=ajp13
worker.TomcatA.lbfactor=1
worker.stat1.type=status
1032 httpd -t
1033 service httpd start
1034 ss -tnl
1035 curl http://192.168.184.10
//jk模块实现tomcat负载均衡
1026 vim mod_jk.conf
LoadModule jk_module modules/mod_jk.so
JKWorkersFile /etc/httpd/conf.d/worker.properties
JKLogFile logs/mode_jk.log
JKlogLevel debug
JKMount /* lbcluster1
JKMount /status/ stat1
1031 vim /etc/httpd/conf.d/worker.properties
worker.list=TomcatA,stat1
worker.TomcatA.port=8009
worker.TomcatA.host=192.168.184.20
worker.TomcatA.type=ajp13
worker.TomcatA.lbfactor=1
worker.TomcatB.port=8009
worker.TomcatB.host=192.168.184.20
worker.TomcatB.type=ajp13
worker.TomcatB.lbfactor=1
worker.lbcluster1.type=lb
worker.lbcluster.stickysession=0
worker.lbcluster.balanceworkers=TomcatA,TomcatB
worker.stat1.type=status
1032 httpd -t
1033 service httpd start
1034 ss -tnl
1035 curl http://192.168.184.10
四. Session cluster
Real server(2):
//在两个tomcat上基于deltamanager配置session cluster
Vim /usr/local/tomcat/conf/server.xml
< Host name="node4.magedu.com" appBase="/data/webapps/" unpackWARs="true" autoDeploy="true">
<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.1.7"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="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.MessageDispatchInterceptor"/>
</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.ClusterSessionListener"/>
</Cluster>
</Host>
//需要在web.xml上开启
Cp /usr/local/tomcat/conf/web.xml /data/webapps/ROOT/WEB-INF/
Vim /data/webapps/ROOT/WEB-INF/ web.xml
<web-app>
<distributable>
</web-app>
问题:The server is temporarily unable to service your request due to maintenance downtime or capacity problems.
Please try again later. Additionally, a 503 Service Unavailable error was encountered while trying to use an ErrorDocument to handle the request.
原因:
一、网站超过了服务器限制造成的
二、数据库连接池是否已满,内存是否溢出
解决:
本次记录造成的原因是,服务器配置低,Tomcat logs目录下 catalina.out文件过大(24M) 造成服务器 暂停服务
- 解决办法:
cd logs
echo > catalina.out #来清空内容
../bin/shutdown.sh #停止服务
../bin/startup.sh #启动服务
注意:这只能暂时解决,可能文件很快又会满了,当然升级服务器可能是最靠谱的解决办法
2. catalina.out日志level调整
既然日志文件catalina.out太大,那就调整它的日志记录等级,tomcat日志等级如下:
SEVERE (highest value) > WARNING > INFO > CONFIG > FINE(默认) > FINER > FINEST (lowest value)
# vim conf/logging.properties
###################
# Handler specific properties.
# Describes specific configuration info for Handlers.
###################
1catalina.org.apache.juli.AsyncFileHandler.level = OFF
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
这里我就直接把它关闭了:1catalina.org.apache.juli.AsyncFileHandler.level = OFF,推荐使用WARNING
然后如第三步的shutdown再startup重启tomcat使之生效。
3. 调整tomcat jvm内存大小
# 查看linux系统的内存大小:
free -m # 数据以兆为单位返回。
df -h # 硬盘
找到linux安装路径,我的是在 /usr/local/tomcat7/bin
找到catalina.sh文件
vi catalina.sh # 打开catalina.sh文件
# 下边的命令是在vi中执行。
:set nu #显示行号,已经显示的则不需要
#查找命令:目的是查找到cygwin=false这句话所在的行,记住所在行的行号我的是107
# 在“cygwin=false”上面加入以下行:
JAVA_OPTS="$JAVA_OPTS -server -XX:PermSize=128m -XX:MaxPermSize=256m"
:wq #保存退出