Mac 上 Tomcat 集群配置

想实现的效果是在本地部署两个 Tomcat 应用,通过一个域名均匀地访问它们。集群方案:Tomcat + Nginx , 自然配置就分为两部分:Tomcat 与 Nginx 。

修改系统 host

  • 打开 hosts 文件,执行命令 sudo vim /etc/hosts
  • 追加内容
    1
    2
    # tomcat test
    127.0.0.1 mmall.yohlj.com
  • 保存文件。

Tomcat 配置(单机部署多应用)

  • 下载并解压安装多个 Tomcat , 以 2 个为例,它们的安装路径分别为 /Users/enoch/Develop/apache-tomcat-9.0.8-1, /Users/enoch/Develop/apache-tomcat-9.0.8-2

  • 修改 /etc/profile 配置文件。执行命令 sudo vim /etc/profile, 追加如下信息:

    1
    2
    3
    4
    5
    6
    export CATALINA_1_BASE=/Users/enoch/Develop/apache-tomcat-9.0.8-1
    export CATALINA_1_HOME=/Users/enoch/Develop/apache-tomcat-9.0.8-1
    export TOMCAT_1_HOME=/Users/enoch/Develop/apache-tomcat-9.0.8-1
    export CATALINA_2_BASE=/Users/enoch/Develop/apache-tomcat-9.0.8-2
    export CATALINA_2_HOME=/Users/enoch/Develop/apache-tomcat-9.0.8-2
    export TOMCAT_2_HOME=/Users/enoch/Develop/apache-tomcat-9.0.8-2
  • 执行命令 sudo source /etc/profile 使配置立即生效。

  • 修改 catalina.sh . 第 1 个 tomcat 保持不变,进入第 2 个 tomcat 目录 bin 下,打开 catalina.sh , 找到 # OS specific support. $var _must_ be set to either true or false. ,在这行下面追加如下配置内容:

    1
    2
    export CATALINA_BASE=$CATALINA_2_BASE
    export CATALINA_HOME=$CATALINA_2_HOME
  • 修改 server.xml . 打开第 2 个 tomcat 目录 conf/server.xml , 修改 3 个端口信息:

    • Server port=”8005” 节点端口号修改: 8005 -> 9005
    • Connector port=”8080” 节点端口号修改: 8080 -> 9080
    • Connector port=”8009” protocol=… 节点端口号修改: 8009 -> 9009
  • 分别进入两个 tomcat 目录 bin 下,启动 tomcat ,查看启动日志。
    TIPS: 2 个以上 tomcat 也同理配置。同时启动多个 tomcat ,为了使首页加以区别,可以修改 tomcat logo,文件位置:${TOMCAT_HOME}/webapps/ROOT/tomcat.png

Nginx 配置

使用 brew 安装

执行命令 brew install nginx ,安装完成的软件路径为 /usr/local/Cellar/nginx ,启动程序路径为 /usr/local/Cellar/nginx/1.12.1/bin/nginx ,配置文件路径为 /usr/local/etc/nginx/nginx.conf

从官网下载安装包自行安装

使用 brew 安装,启动程序路径与配置文件路径不在统一父层级下,这样多少会有些麻烦,于是采用下载安装包自行安装的方法。

  • 从官网下载安装包解压。

  • 进入程序目录,执行 ./configure

  • 第 2 步完成后,执行 make

  • 第 3 步完成后,执行 sudo make install

  • nginx 安装完成。程序路径为 /usr/local/nginx
    TIPS: 上述操作步骤是在本机已存在 nginx 所依赖的组件进行的,如果一开始安装可能会报依赖组件不存在,可以使用 brew 安装好 nginx , 同时会安装好 nginx 依赖的组件,再单独卸载 nginx 。

  • 编辑在 ${nginx}/conf/nginx.conf 配置文件,在 http 节点下增加 include servers/*.conf 。servers 为创建新的目录,用来存放配置信息,这样做是为了把域名的配置文件分开,方便后期管理。

  • 在 servers 目录下创建配置文件,并追加如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
upstream mmall.yohlj.com{
# default weight = 1
server mmall.yohlj.com:8080 weight=1;
server mmall.yohlj.com:9080 weight=1;
}

server {
listen 80;
autoindex on;
server_name mmall.yohlj.com;
access_log /usr/local/nginx/logs/access.log combined;
index index.html index.htm index.jsp index.php;

location = / {
proxy_pass http://mmall.yohlj.com;
}

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|ico|svg)$ {
proxy_pass http://mmall.yohlj.com;
expires 30d;
}

location ~ .*\.(js|css)?$ {
proxy_pass http://mmall.yohlj.com;
expires 7d;
}
}

修改完成后启动 nginx ,在浏览器访问 mmall.yohlj.com , 狂刷新,发现 logo 的变化。

Nginx 负载均衡常用策略

轮询(默认)

权重

  • 优点:考虑了每台服务器处理能力不同。
  • 示例配置:
    1
    2
    3
    4
    5
    upstream mmall.yohlj.com{
    # default weight = 1
    server mmall.yohlj.com:8080 weight=1;
    server mmall.yohlj.com:9080 weight=1;
    }

ip hash

  • 优点:能实现用一个用户访问同一个服务器
  • 缺点:根据 ip hash 不一定平均
  • 示例配置:
    1
    2
    3
    4
    5
    upstream mmall.yohlj.com{
    ip_hash;
    server mmall.yohlj.com:8080;
    server mmall.yohlj.com:9080;
    }

url hash(第三方)

  • 优点:能实现同一个服务访问同一个服务器
  • 缺点:根据 url hash 分配请求会不均匀,请求频繁的 url 会请求到同一服务器上
  • 示例配置:
    1
    2
    3
    4
    5
    upstream mmall.yohlj.com{
    server mmall.yohlj.com:8080;
    server mmall.yohlj.com:9080;
    hash $request_uri;
    }

fair(第三方)

  • 特点:按后端服务的响应时间来分配请求,响应时间短的优先分配
  • 示例配置:
    1
    2
    3
    4
    5
    upstream mmall.yohlj.com{
    server mmall.yohlj.com:8080;
    server mmall.yohlj.com:9080;
    fair;
    }
负载均衡参数讲解扩展知识点
1
2
3
4
5
6
7
upstream mmall.yohlj.com{
ip_hash;
server mmall.yohlj.com:8080 down;(down 表示当前的 server 暂时不参与负载)
server mmall.yohlj.com:9080 weight=2;(weight 默认为 1.weight 越大,负载的权重就越大)
server mmall.yohlj.com:6060;
server mmall.yohlj.com:7070 backup;(其他所有的非 backup 机器 down 或者忙的时候,请求 backup 机器)
}

Mac 上 Tomcat 集群配置
https://blog.yohlj.cn/posts/a38f26f6/
作者
Enoch
发布于
2018年5月19日
许可协议