1台nginx(haproxy)+2台tomcat主机做负载均衡
步骤1:拓扑图
tomcat A 主机的配置
安装必要的软件:
yum -y install java-1.8.0-openjdk-devel tomcat-lib tomcat-admin-webapps tomcat-webapps tomcat-docs-webapp
创建tomcat存放数据目录
mkdir -pv /data/webapps/ROOT/{classes,lib,WEB-INF,META-INF}
具体目录的说明:
WEB-INF/:当前webapp的私有资源路径;通常用于存储当前webapp的web.xml和context.xml配置文件;
META-INF/:类似于WEB-INF/;
classes/:类文件,当前webapp所提供的类;
lib/:类文件,当前webapp所提供的类,被打包为jar格式;
配置tomcat的文件server.xml
配置主配置文件
vim /etc/tomcat/server.xml 中的
添加tomcatA的测试文件
vim /data/webapps/ROOT/index.jsp
<%@ page language="java" %>
TomcatA
TomcatA.magedu.com
Session ID
<% session.setAttribute("magedu.com","magedu.com"); %>
<%= session.getId() %>
Created on
<%= session.getCreationTime() %>
为了测试方便,把默认的测试目录修改下路径
cp -r /data/webapps/ROOT/ /usr/share/tomcat/webapps/test
重启tomcat服务
systemctl start tomcat
查看下端口是否开启
ss -tnl
tomcatB 主机的配置和comcatA一样,此处省略
测试主页
输入ip地址为:192.168.100.205/test
到此,两台tomcat主机已经配置完成!
使用haproxy做负载均衡
安装haproxy
yum -y install haproxy
配置haproxy.cfg
vim /etc/haproxy/haproxy.cfg 添加如下内容,即可!
frontend http-in
bind *:80
default_backend appsrvs # 定义默认后端服务
backend appsrvs
balance roundrobin #轮询
server app1 192.168.100.203:8080 check #开启健康检查
server app2 192.168.100.204:8080 check #开启健康检查
listen stats #开启状态管理接口
bind *:9009
stats enable
启动haproxy服务
systemctl start haproxy
查看端口
ss -tnl
80和9009端口启动证明服务正常。
测试,输入如下ip地址:192.168.100.205/test
查看状态页输入地址:192.168.100.205:9009/haproxy?stats 即可
使用nginx做负载均衡
安装nginx服务
yum install nginx
配置配置文件
vim /etc/nginx/conf/nginx.conf 增加一组webapps即可
upstream appsrvs {
server 192.168.100.203:8080;
server 192.168.100.204:8080;
}
启动服务
systemctl start nginx
查看端口
ss -tnl
http负载均衡实验(有两种方式:http模式和ajp模式 )
首先使用httpd做负载均衡
安装httpd服务
yum install httpd -y
配置httpd服务 ,新建一个虚拟主机
vim /etc/httpd/con.d/comcat-httpd.conf 添加如下配置
BalancerMember http://192.168.100.203:8080
BalancerMember http://192.168.100.204:8080
ProxySet lbmethod=byrequests
ServerName www.ilinux.io
ProxyRequests Off
ProxyVia On
ProxyPreserveHost On
Require all granted
ProxyPass / balancer://appsrvs/
ProxyPassReverse / balancer://appsrvs/
Require all granted
启动httpd服务
systemctl start httpd
测试:输入ip地址:192.168.100.205/test
ajp模式的负载均衡
修改配置文件
vim /etc/httpd/http.d/tomcat.ajp.conf
BalancerMember ajp://192.168.100.203:8009
BalancerMember ajp://192.168.100.204:8009
ProxySet lbmethod=byrequests
ServerName www.ilinux.io
ProxyRequests Off
ProxyVia On
ProxyPreserveHost On
Require all granted
ProxyPass / balancer://appsrvs/
ProxyPassReverse / balancer://appsrvs/
Require all granted
注意:端口一定要写出8009,否则方向代理不到后端服务器
使用cookie实现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 新增加的信息
BalancerMember ajp://192.168.100.203:8009 route=TomcatA 新增加的信息
BalancerMember ajp://192.168.100.204:8009 route=TomcatB 新增加的信息
ProxySet lbmethod=byrequests
ProxySet stickysession=ROUTEID 新增加的信息
ServerName www.ilinux.io
ProxyRequests Off
ProxyVia On
ProxyPreserveHost On
Require all granted
ProxyPass / balancer://appsrvs/
ProxyPassReverse / balancer://appsrvs/
Require all granted
如果需要启动管理接口功能,在以上配置下添加如下配置。
SetHandler balancer-manager
ProxyPass !
Require all granted
以下为:管理接口的图形界面
使用session culster 做会话绑定
在原有的tomcatA的server.xml 配置中,把配置放置在host标签中
中添加如下信息jvmRoute="tcA"
vim /etc/tomcat/server.xml
为了安全,需要把web.xml 文件放在下如下目录,
cp /etc/tomcat/web.xml /usr/share/tomcat/webapps/test/WEN-INF目录中,WEN-INF目录私有目录,在web.xml中添加如下一行配置,是为了能够两个后端的两台tomcat可以同步数据。
编辑该文件
vim web.xml
在标签外添加一行信息; 即可
在tomcatB 中配置也需要添加
在浏览器中输入:http://192.168.100.205/test 做测试,结果如下:
负载均衡两个节点都可以保持session一致。
使用memcache做session服务器
拓扑图如下:
下载如下jar文件至各tomcat节点的tomcat安装目录下的/usr/share/java/tomcat/
目录中,其中的${version}要换成你所需要的版本号,tc${6,7,8}要换成与tomcat版本相同的版本号。
这里我使用的是tomcat7.0 ,其他没有版本对应要求,需要的软件包如下
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容器,并在其中创建一个会话管理器
配置完成,启动memcached服务
systemctl start memcached
在浏览器中输入测试地址:http://192.168.100.205/test
测试结果:nginx(haproxy)调度,都可以保持session。