1臺nginx(haproxy)+2臺tomcat主機做負(fù)載均衡
步驟1:拓?fù)鋱D
tomcat A 主機的配置
安裝必要的軟件:
yum -y install java-1.8.0-openjdk-devel tomcat-lib tomcat-admin-webapps tomcat-webapps tomcat-docs-webapp
創(chuàng)建tomcat存放數(shù)據(jù)目錄
mkdir -pv /data/webapps/ROOT/{classes,lib,WEB-INF,META-INF}
具體目錄的說明:
WEB-INF/:當(dāng)前webapp的私有資源路徑;通常用于存儲當(dāng)前webapp的web.xml和context.xml配置文件粟矿;
META-INF/:類似于WEB-INF/商蕴;
classes/:類文件第岖,當(dāng)前webapp所提供的類焰情;
lib/:類文件渐夸,當(dāng)前webapp所提供的類撕彤,被打包為jar格式贤姆;
配置tomcat的文件server.xml
配置主配置文件
vim /etc/tomcat/server.xml 中的<host>標(biāo)簽中添加如下配置榆苞,該配置主要是配置tomcat主機的路徑、主機名以及日志格式
<Host name="www.ilinux.io" appBase="/data/webapps" unpackWARs="true" autoDeploy="true" >
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="ilinux_access_log." suffix=".log"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
添加tomcatA的測試文件
vim /data/webapps/ROOT/index.jsp
<%@ page language="java" %>
<html>
<head><title>TomcatA</title></head>
<body>
<h1><font color="red">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>
為了測試方便庐氮,把默認(rèn)的測試目錄修改下路徑
cp -r /data/webapps/ROOT/ /usr/share/tomcat/webapps/test
重啟tomcat服務(wù)
systemctl start tomcat
查看下端口是否開啟
ss -tnl
tomcatB 主機的配置和comcatA一樣语稠,此處省略
測試主頁
輸入ip地址為:192.168.100.205/test
到此,兩臺tomcat主機已經(jīng)配置完成弄砍!
使用haproxy做負(fù)載均衡
安裝haproxy
yum -y install haproxy
配置haproxy.cfg
vim /etc/haproxy/haproxy.cfg 添加如下內(nèi)容仙畦,即可!
frontend http-in
bind *:80
default_backend appsrvs # 定義默認(rèn)后端服務(wù)
backend appsrvs
balance roundrobin #輪詢
server app1 192.168.100.203:8080 check #開啟健康檢查
server app2 192.168.100.204:8080 check #開啟健康檢查
listen stats #開啟狀態(tài)管理接口
bind *:9009
stats enable
啟動haproxy服務(wù)
systemctl start haproxy
查看端口
ss -tnl
80和9009端口啟動證明服務(wù)正常音婶。
測試慨畸,輸入如下ip地址:192.168.100.205/test
查看狀態(tài)頁輸入地址:192.168.100.205:9009/haproxy?stats 即可
使用nginx做負(fù)載均衡
安裝nginx服務(wù)
yum install nginx
配置配置文件
vim /etc/nginx/conf/nginx.conf 增加一組webapps即可
upstream appsrvs {
server 192.168.100.203:8080;
server 192.168.100.204:8080;
}
啟動服務(wù)
systemctl start nginx
查看端口
ss -tnl
http負(fù)載均衡實驗(有兩種方式:http模式和ajp模式 )
首先使用httpd做負(fù)載均衡
安裝httpd服務(wù)
yum install httpd -y
配置httpd服務(wù) ,新建一個虛擬主機
vim /etc/httpd/con.d/comcat-httpd.conf 添加如下配置
<proxy balancer://appsrvs>
BalancerMember http://192.168.100.203:8080
BalancerMember http://192.168.100.204:8080
ProxySet lbmethod=byrequests
</Proxy>
<VirtualHost *:80>
ServerName www.ilinux.io
ProxyRequests Off
ProxyVia On
ProxyPreserveHost On
<Proxy *>
Require all granted
</Proxy>
ProxyPass / balancer://appsrvs/
ProxyPassReverse / balancer://appsrvs/
<Location />
Require all granted
</Location>
</VirtualHost>
啟動httpd服務(wù)
systemctl start httpd
測試:輸入ip地址:192.168.100.205/test
ajp模式的負(fù)載均衡
修改配置文件
vim /etc/httpd/http.d/tomcat.ajp.conf
<proxy balancer://appsrvs>
BalancerMember ajp://192.168.100.203:8009
BalancerMember ajp://192.168.100.204:8009
ProxySet lbmethod=byrequests
</Proxy>
<VirtualHost *:80>
ServerName www.ilinux.io
ProxyRequests Off
ProxyVia On
ProxyPreserveHost On
<Proxy *>
Require all granted
</Proxy>
ProxyPass / balancer://appsrvs/
ProxyPassReverse / balancer://appsrvs/
<Location />
Require all granted
</Location>
</VirtualHost>
注意:端口一定要寫出8009,否則方向代理不到后端服務(wù)器
使用cookie實現(xiàn)sessions綁定
在tomcat-apj-conf 中添加一些配置即可
vim /etc/httpd/conf.d/tomcat-ajp.conf
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED 新增加的信息
<proxy balancer://appsrvs>
BalancerMember ajp://192.168.100.203:8009 route=TomcatA 新增加的信息
BalancerMember ajp://192.168.100.204:8009 route=TomcatB 新增加的信息
ProxySet lbmethod=byrequests
ProxySet stickysession=ROUTEID 新增加的信息
</Proxy>
<VirtualHost *:80>
ServerName www.ilinux.io
ProxyRequests Off
ProxyVia On
ProxyPreserveHost On
<Proxy *>
Require all granted
</Proxy>
ProxyPass / balancer://appsrvs/
ProxyPassReverse / balancer://appsrvs/
<Location />
Require all granted
</Location>
</VirtualHost>
如果需要啟動管理接口功能衣式,在以上配置下添加如下配置寸士。
<Location /balancer-manager>
SetHandler balancer-manager
ProxyPass !
Require all granted
</Location>
以下為:管理接口的圖形界面
使用session culster 做會話綁定
在原有的tomcatA的server.xml 配置中,把配置放置在host標(biāo)簽中
<Engine name="Catalina" defaultHost="localhost" "> 中添加如下信息jvmRoute="tcA"
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tcA">
vim /etc/tomcat/server.xml
<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.100.203" atuo改成本地對外的通訊地址
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>
為了安全弱卡,需要把web.xml 文件放在下如下目錄,
cp /etc/tomcat/web.xml /usr/share/tomcat/webapps/test/WEN-INF目錄中住册,WEN-INF目錄私有目錄婶博,在web.xml中添加如下一行配置,是為了能夠兩個后端的兩臺tomcat可以同步數(shù)據(jù)荧飞。
編輯該文件
vim web.xml
在<server>標(biāo)簽外添加一行信息凡人; <distributable/>即可
在tomcatB 中配置也需要添加<distributable/>信息名党。
在瀏覽器中輸入:http://192.168.100.205/test 做測試,結(jié)果如下:
負(fù)載均衡兩個節(jié)點都可以保持session一致挠轴。
使用memcache做session服務(wù)器
拓?fù)鋱D如下:
下載如下jar文件至各tomcat節(jié)點的tomcat安裝目錄下的/usr/share/java/tomcat/
目錄中传睹,其中的${version}要換成你所需要的版本號,tc${6,7,8}要換成與tomcat版本相同的版本號岸晦。
這里我使用的是tomcat7.0 欧啤,其他沒有版本對應(yīng)要求,需要的軟件包如下
memcached-session-manager-${version}.jar
memcached-session-manager-tc7-${version}.jar
spymemcached-${version}.jar
msm-javolution-serializer-${version}.jar
javolution-${version}.jar
分別在兩個tomcat上的某host上定義一個用于測試的context容器委煤,并在其中創(chuàng)建一個會話管理器
<Context path="/test" docBase="test" reloadable="true">
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.100.203:11211,n2:192.168.100.204:11211"
failoverNodes="n1"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
/>
</Context>
配置完成堂油,啟動memcached服務(wù)
systemctl start memcached
在瀏覽器中輸入測試地址:http://192.168.100.205/test
測試結(jié)果:nginx(haproxy)調(diào)度,都可以保持session碧绞。