潘景

Nginx+Tomcat搭建集群
为什么要使用Tomcat集群提高服务的性能,并发能力,以及高可用性提供项目架构的横向扩展能力Tomcat集群实现原...
扫描右侧二维码阅读全文
28
2019/02

Nginx+Tomcat搭建集群

为什么要使用Tomcat集群

  • 提高服务的性能,并发能力,以及高可用性
  • 提供项目架构的横向扩展能力

Tomcat集群实现原理

  • 通过Nginx负载均衡进行请求转发

Tomcat单机部署多应用/多机部署多应用

Tomcat单机部署多应用

(1)配置Tomcat环境变量

  • 首先打开/etc/profile文件,增加下述内容配置Tomcat环境变量。
export CATALINA_BASE=/home/panjing/developer/tomcat1
export CATALINA_HOME=/home/panjing/developer/tomcat1
export TOMCAT_HOME=/home/panjing/developer/tomcat1
export CATALINA_2_BASE=/home/panjing/developer/tomcat2
export CATALINA_2_HOME=/home/panjing/developer/tomcat2
export TOMCAT_2_HOME=/home/panjing/developer/tomcat2
  • 保存退出,执行source /etc/profile使配置文件生效

(2)修改Tomcat配置文件

  • 第一个tomcat不变
  • 打开第二个tomcat目录下bin/catalina.sh${tomcat}/bin/catalina.sh
  • 找到# OS specific support. $var _must_ be set to either true or false.

    • 在这行下面编辑,新增如下配置,保存退出
  • 打开第二个tomcat目录下conf/server.xml${tomcat}/conf/server.xml

    • 注:此时有3个端口需要修改

      • Server port="8005" 节点端口号修改为9005
      • Connector port="8080" protocol="HTTP/1.1" 节点端口号修改9080
      • Connector port="8009" protocol="AJP/1.3" 节点端口号修改9009
      • 注意:以上端口号可以任意修改,但切记不能跟已有端口号重复
  • 分别进入两个tomcat的bin目录下启动tomcat即进入${tomcat}/bin/执行startup.sh
  • 访问http://localhost:8080,http://localhost:9080可以打开tomcat部署的webapps的ROOT项目首页
  • 如果继续想部署多个tomcat实例,请依照此法
  • 注:端口号在系统中必须不能重复,必须是系统没有使用的

Tomcat多机部署多应用

多机部署多应用相对于单机部署多应用简单很多,参考以下原则。

  • 如果一个机器部署一个tomcat实例,不用修改
  • 如果一个机器部署多个tomcat实例,依照单机部署多实例方法
  • 注:多个服务器并且每个服务器只安装一个Tomcat要保证它们之间的网络是互通的,方可集群。Nginx装在任意一台服务器上即可,也可单独把Nginx服务独立出来一台。

Nginx负载均衡配置、策略、场景及特点

在搭建集群之前,需要简单了解Nginx关于负载均衡的配置,如果对Nginx不太熟悉,可以参考文章Nginx基本使用

轮询(默认)

  • 优点:实现简单
  • 缺点:不考虑每台服务器处理能力
upstream www.panjingg.test{
    server www.panjingg.test:8080;
    server www.panjingg.test:9080;
}

权重

  • 优点:考虑了每台服务器处理能力的不同
upstream www.panjingg.test{
    server www.panjingg.test:8080 weight=15;
    server www.panjingg.test:9080 weight=10;
}

注:weight默认是1,如果多个配置权重的节点,比较相对值。

ip hash

  • 优点:能实现同一个用户访问同一个服务器
  • 缺点:根据ip hash不一定平均
upstream www.panjingg.test{
    ip_hash;
    server www.panjingg.test:8080;
    server www.panjingg.test:9080;
}

url hash(第三方,意为需要安装第三方插件)

  • 优点:能实现同一个服务访问同一个服务器
  • 缺点:根据url hash分配请求会不平均,请求频繁的url会请求到同一个服务器上
upstream www.panjingg.test{
    server www.panjingg.test:8080;
    server www.panjingg.test:9080;
    hash $request_uri;
}

fair(第三方,意为需要安装第三方插件)

  • 特点:按后端服务器的响应时间来分配请求,响应时间短的优先分配
upstream www.panjingg.test{
    server www.panjingg.test:8080;
    server www.panjingg.test:9080;
    fair;
}

负载均衡参数讲解扩展知识点补充

upstream backserver{
    ip_hash;
    server 127.0.0.1:9090 down;(down表示当前的server暂时不参与负载)
    server 127.0.0.1:8080 weight=2;(weight默认为1,weight越大,负载的权重就越大)
    server 127.0.0.1:6060;
    server 127.0.0.1:7070 backup;(其他所有的非backup机器down或者忙的时候,请求backup机器)
}

Nginx+Tomcat搭建集群

了解了Nginx关于负载均衡相关策略后,我们将使用权重的策略搭建集群。

Tomcat配置

  • 首先修改清空tomcat1以及tomcat2目录下webapps/ROOT目录,分别创建两个html文件,以备测试使用。注意,此处仅是为了测试方便,在真实开发中一定不可如此。
<!-- tomcat1/webapps/ROOT/index.html -->
<h1>tomcat1</h1>

<!-- tomcat1/webapps/ROOT/index.html -->
<h1>tomcat2</h1>
  • 启动两个tomcat,执行${tomcat}/bin/start.sh

Nginx配置

  • 编辑在${nginx}/conf/nginx.conf配置文件
  • 在http节点下增加 include ${nginx}/conf.d/*.conf
  • 目的是为了要增加Tomcat集群的负载均衡配置,并且把域名的配置文件分开,方便后期管理
  • conf.d/文件下创建www.panjingg.test.conf文件
upstream www.panjingg.test{
   server www.panjingg.test:8080 weight=1;
   server www.panjingg.test:9080 weight=1;
}

server {
    listen 80;
    autoindex on;
    server_name  www.panjingg.test;
    index  index.html index.htm;
    access_log /var/log/nginx/access_panjingg.log panjingg;
    location / {
        proxy_pass http://www.panjingg.test;
        add_header Access-Control-Allow-Origin *;
    }
}
  • 修改完之后重启nginx

完成以上步骤后,打开浏览器,输入www.panjingg.test进行访问,发现将会报错。

原因是没有使用DNS进行解析,这里为了演示方便,修改了hosts文件,以windows系统为例,以管理员权限打开C:\Windows\System32\drivers\etc\hosts文件,在末尾添加如下内容:

# 主机IP 域名
192.168.2.9 www.panjingg.test 

添加完成后保存,打开浏览器,输入www.panjingg.test,页面正常显示。
此时狂刷新页面,发现一会访问到8080端口的tomcat,一会访问到9080端口的tomcat,至此,Nginx+Tomcat集群搭建成功。

Last modification:March 11th, 2019 at 10:21 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment