Tomcat集群
Tomcat集群原理
- 通过
Nginx
负载均衡进行请求转发
Tomcat集群能带来什么
- 提高服务的性能, 并发能力, 以及高可用性
- 提供项目架构的横向扩展能力
Tomcat集群能带来了什么问题
-
Session
登录信息存储以及读取的问题 - 服务器定时任务并发的问题
Tomcat单机部署多应用
1. 解压2个tomcat, 分别命名为tomcat1和tomcat2
2. 分别设置2个tomcat的URIEncoding, 将tomcat2的conf/server.xml里的port修改加1000
3. 设置tomcat的图标, 以区别访问2个不同的tomcat
下载一张图片, 命名为tomcat.png, 进入tomcat2中, 替换webapps/ROOT/tomcat.png
. 当启动tomcat2的时候, 访问localhost:9080即可验证
4. 设置tomcat的环境变量
- tomcat1的环境变量和以往一样, 不做改变
- 设置tomcat的环境变量
sudo vim /ect/profile
在profile文件里新增
export CATALINA_BASE=/Users/rochester/tomcat/apache-tomcat-9.0.21
export CATALINA_HOME=/Users/rochester/tomcat/apache-tomcat-9.0.21
export TOMCAT_HOME=/Users/rochester/tomcat/apache-tomcat-9.0.21
export CATALINA_2_BASE=/Users/rochester/tomcat/tomcat2
export CATALINA_2_HOME=/Users/rochester/tomcat/tomcat2
export TOMCAT_2_HOME=/Users/rochester/tomcat/tomcat2
强制保存退出
继续配置tomcat2下的catalina.sh里的内容,
cd tomcat目录
sudo vi catalina.sh
在# OS specific support. $var _must_ be set to either true or false.
下加入
export CATALINA_BASE=$CATALINA_2_BASE
export CATALINA_HOME=$CATALINA_2_HOME
执行
source /etc/profile
使环境变量生效, 执行
echo $CATALINA_2_BASE
如果有输出, 即环境变量已经生效
/Users/rochester/tomcat/tomcat2
分别进入两个tomcat下的bin目录启动tomcat, 正常即可
配置nginx
修改host
sudo vim /etc/hosts
在hosts文件里新增
# tomcat test
127.0.0.1 www.rui.com
启动nginx
- 进入nginx的安装目录
cd /usr/local/Cellar/nginx/1.17.0/bin
# 启动nginx
./nginx
配置nginx, 访问域名转发到固定端口下
- 在nginx的配置文件里, 加入转发到8080和8090的tomcat下
## 进入nginx的配置文件目录下
cd /usr/local/etc/nginx
## 创建一个vhost目录
mkdir vhost
在nginx.conf引入vhost
vim nginx.conf
在vhost内创建一个配置文件
touch rui.com.conf
vim rui.com.conf
加入以下代码
### rui.com 负载均衡
server {
listen 80;
autoindex on;
server_name rui.com www.rui.com;
#access_log /usr/local/nginx/access.log combined;
index index.html index.htm index.jsp index.php;
if ($query_string ~* ".*[\;'\<\>].*") {
return 404;
}
location / {
proxy_pass http://127.0.0.1:8080/;
}
}
重启nginx
sudo nginx -s reload
在浏览器输入www.rui.com
(不加端口号)即可转发到8080的端口下
Ngix负载均衡配置, 常用策略, 场景以及特点
轮询(默认)
- 优点: 实现简单, 不需要插件
- 缺点: 不考虑每台服务器的处理能力
upstream www.xxx.com {
server www.xxx.com:8080;
server www.xxx.com:9080;
}
权重
- 优点: 考虑到每台服务器处理能力的不同,
weight
默认为1, 如果多个配置权重的节点, 比较相对值, 相对访问的概率
upstream www.xxx.com {
server www.xxx.com:8080 weight=15;
server www.xxx.com:9080 weight=10;
}
ip hash(插件)
- 优点: 能实现同一个用户访问同一个服务器
- 缺点: 根据
ip hash
访问来的不一定平均
upstream www.xxx.com {
ip_hash;
server www.xxx.com:8080;
server www.xxx.com:9080;
}
url hash(插件)
- 优点: 能实现同一个服务访问同一个服务器
- 缺点: 根据url hash分配请求会不平均, 请求频繁的url会请求到同一个服务器上
upstream www.xxx.com {
server www.xxx.com:8080;
server www.xxx.com:9080;
hash $request_uri;
}
fair(插件)
- 优点: 按后端服务器的响应时间来分配请求, 响应时间短的优先分配
upstream www.xxx.com {
server www.xxx.com:8080;
server www.xxx.com:9080;
fair;
}
利用nginx实现负载均衡
在nginx的com.rui.conf配置文件内输入
upstream www.rui.com {
server www.rui.com:8080 weight=10;
server www.rui.com:9080 weight=2;
}
server {
listen 80;
autoindex on;
server_name rui.com www.rui.com;
#access_log /usr/local/nginx/access.log combined;
index index.html index.htm index.jsp index.php;
if ($query_string ~* ".*[\;'\<\>].*") {
return 404;
}
location / {
proxy_pass http://www.rui.com;
}
}
重启nginx
, 浏览器访问www.rui.com
即可实现访问不同的tomcat
, 根据weight
来调整访问tomcat
的频率