Tomcat集群

Tomcat集群

Tomcat集群原理
  • 通过Nginx负载均衡进行请求转发
Tomcat集群能带来什么
  • 提高服务的性能, 并发能力, 以及高可用性
  • 提供项目架构的横向扩展能力
Tomcat集群能带来了什么问题
  • Session登录信息存储以及读取的问题
  • 服务器定时任务并发的问题
Tomcat集群_第1张图片
单机

Tomcat集群_第2张图片
集群, 单独设立一个redis中间层来解决启动定时任务和session读取的问题

Tomcat单机部署多应用

1. 解压2个tomcat, 分别命名为tomcat1和tomcat2
Tomcat集群_第3张图片
解压2个tomcat
2. 分别设置2个tomcat的URIEncoding, 将tomcat2的conf/server.xml里的port修改加1000
Tomcat集群_第4张图片
设置URIEncoding

Tomcat集群_第5张图片

Tomcat集群_第6张图片
3. 设置tomcat的图标, 以区别访问2个不同的tomcat

下载一张图片, 命名为tomcat.png, 进入tomcat2中, 替换webapps/ROOT/tomcat.png. 当启动tomcat2的时候, 访问localhost:9080即可验证

Tomcat集群_第7张图片
访问tomcat2

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
Tomcat集群_第8张图片
引入vhost, 代码和server同级

在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的频率

你可能感兴趣的:(Tomcat集群)