LB tomcat(负载均衡tomcat)
lnmt模式:
client ---> nginx ---> tomcat1
---> tomcat2
客户端发起请求首先由nginx服务器进行响应。之后nginx通过负载均衡将请求分发到后端tomcat服务器上
一:关闭防火墙(最后如果需要防火墙再进行端口放行即可):
systemctl stop iptables
systemctl stop ebtables
systemctl stop firewalld
setenforce 0
二:配置nginx做反向代理
nginx服务器: IP地址:192.168.1.100(实际环境中只有应该有两块网卡,一个公网用于响应客户端请求,一个内网用于与tomcat服务器通信)
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream tomcat { 通过upstream关键 和自定义名字 定义要转发的服务器
#ip_hath 负载算法,原地址hath,当然可以不写,也可以换成其他算法如下:
一、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
二、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
upstream bakend {
server 192.168.0.101 weight=10;
server 192.168.0.102 weight=10;
}
三、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream bakend {
ip_hash;
server 192.168.0.101:8080;
server 192.168.0.102:8080;
}
四、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backend {
server server1;
server server2;
fair;
}
五、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法
upstream backend {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
server node2.com:8080; 后端服务器
server node3.com:8080; 后端服务器
}
server {
listen 80;
server_name localhost;
index index.html index.htm;
location / {
proxy_pass http://tomcat; 再此处引用定义的upstream
}
三:配置两个tomcat节点
tomcat1:IP地址:192.168.1.101
1,编辑配置文件定义虚拟主机:vim /usr/local/tomcat/conf/server.conf/server
<Engine name="Catalina" defaultHost="node2.com"> 将node2.com定义成默认访问站点
<Host name="node2.com"定义访问域名 appBase="/app" 根下的app为主目录
unpackWARs="true" autoDeploy="true">
<Context path="" docBase="myapp"/> myapp是app的下级目录,是index.jsp主页面的上级目录
</Host>
</Engine>
2,创建虚拟主机的主页面目录文件
mkdir -p /app/myapp
cd /app/myapp 这是根目录,根目录下必须包括以下文件:
WEB-INF:不是必须,当前webapp的私有目录,通常存放webapp的自用web.xml
META-INF:当前webapp的私有资源目录,通常存放webapp的自用web.xml
classes:此webapp的私有类
lib:此webapp的私有文件,被打包成jar格式的类
index.jsp:web主页
cp /usr/local/tomcat/weapps/Root/* ./ 可以从默认根目录下复制这几个文件
3,编辑主页面,用来做测试
vim /app/myapp/index.jsp
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<html>
<head>
<title>Test Page</title>
</head>
<body>
<% out.println(“my name is HU");%> 访问主页面显示的是“hello node2.com”
</body>
</html>
tomcat2:IP地址:192.168.1.102
在tomcat2做鱼tomcat1节点一样的操作,只是将node2.com改成node3.com
四:在浏览器访问 http://192.168.1.100
当客户端访问nginx服务器地址时,实际是tomcat服务器的内容。而且内容不一样(实际环境应用中所有节点内容应该是完全一样的,这里是为了测试时能够看出负载结果,所以有所区别),说明nginx是向两台tomcat服务器进行转发,这就有效的减轻服务器的负载量并且很好的隐藏了真实服务器的ip。甚至我们还可以更改服务器端口号,这样就避免了外来攻击与暴力破解。