共计 5098 个字符,预计需要花费 13 分钟才能阅读完成。
这篇短文主要介绍 Tomcat 的集群和用 Nginx 反向代理实现 Tomcat 负载均衡。
1、首先需要对一些知识点进行扫盲(对自己进行扫盲,囧):
- 集群 (Cluster)
简单来说就是用 N 台服务器构成一个松耦合的多处理器系统(对外是一个服务器),内部通过网络实现通信。让 N 台服务器之间相互协作,共同承载一个网站的请求压力。用知乎上一个作者的话来说就是“同一个业务,部署在多个服务器上”,这就是集群。集群中比较重要的是任务调度。 - 负载均衡 (Load Balance)
简单来说就是根据某种负载策略把请求分发到集群中的每一台服务器上,让整个服务器群来处理网站的请求,从而共同完成工作任务。
2、安装环境如下:
- 腾讯云主机,安装的是 CentOS7.3 64bits
- Nginx 1.7.4
- JDK8 和 Tomcat8
3、具体安装步骤:
- JDK 安装请参考:简单易懂的 CentOS 6.7 上安装 JDK 入门教程 http://www.linuxidc.com/Linux/2017-12/149877.htm
- Nginx 安装请参考:CentOS 7.2 安装 Nginx 1.13.6 https://www.linuxidc.com/Linux/2018-02/150752.htm
CentOS6.9 编译安装 Nginx1.4.7 https://www.linuxidc.com/Linux/2017-06/144473.htm 配置 Nginx web 反向代理, 实现两个 Tomcat 负载均衡:
– 安装及配置 Tomcat
tar -zxvf apache-tomcat-8.5.28.tar.gz
cp -rf apache-tomcat-8.5.28 /usr/local/tomcat1
mv apache-tomcat-8.5.28 /usr/local/tomcat2
– 修改 tomcat1 端口号
$ cd /usr/local/tomcat1/conf/
$ cp server.xml server.xml.bak
$ cp web.xml web.xml.bak
$ vi server.xml
## 修改 Tomcat2 端口号
$ cd /usr/local/tomcat2/conf/
$ cp server.xml server.xml.bak
$ cp web.xml web.xml.bak
$ vi server.xml
– 添加 Tomcat1 开机自动启动
– 将 /usr/local/tomcat1/bin/catalina.sh 文件复制到 /etc/init.d 目录下并改名为 tomcat1
# cp /usr/local/tomcat1/bin/catalina.sh /etc/init.d/tomcat1
– 修改 /etc/init.d/tomcat1 文件,在文件中添加:
# vi /etc/init.d/tomcat1
– 在第一行下面输入如下内容(否则出现错误:tomcat 服务不支持 chkconfig):
#!/bin/sh
# chkconfig: 2345 10 90
# description:Tomcat1 service
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
……………………………………………………………
# $Id: catalina.sh 1498485 2013-07-01 14:37:43Z markt $
# —————————————————————————–
CATALINA_HOME=/usr/local/tomcat1
Java_HOME=/usr/local/jdk8
# OS specific support. $var _must_ be set to either true or false.
– 添加 tomcat 服务:
# chkconfig –add tomcat1
– 设置 tomcat 为开机自启动:
# chkconfig tomcat1 on – 将 tomcat2 设置开机自启动
– 将 /usr/local/tomcat2/bin/catalina.sh 文件复制到 /etc/init.d 目录下并改名为 tomcat2
# cp /usr/local/tomcat2/bin/catalina.sh /etc/init.d/tomcat2
– 修改 /etc/init.d/tomcat2 文件,在文件中:
# vi /etc/init.d/tomcat2
– 在第一行下面输入如下内容(否则出现错误:tomcat 服务不支持 chkconfig):
#!/bin/sh
# chkconfig: 2345 10 90
# description:Tomcat2 service
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
……………………………………………………………
# —————————————————————————–
CATALINA_HOME=/usr/local/tomcat2
JAVA_HOME=/usr/local/jdk8
# OS specific support. $var must be set to either true or false.
– 添加 tomcat 服务:
# chkconfig –add tomcat2
– 设置 tomcat 为开机自启动:
# chkconfig tomcat2 on
到这里,tomcat 已经安装好了,分别启用它们,打印出来引用的环境分别对应两个 tomcat 就是对的:
[root@VM_177_101_centos src]# service tomcat1 start
Using CATALINA_BASE: /usr/local/tomcat1
Using CATALINA_HOME: /usr/local/tomcat1
Using CATALINA_TMPDIR: /usr/local/tomcat1/temp
Using JRE_HOME: /usr/local/jdk8
Using CLASSPATH: /usr/local/tomcat1/bin/bootstrap.jar:/usr/local/tomcat1/bin/tomcat-juli.jar
Tomcat started.
[root@VM_177_101_centos src]# service tomcat2 start
Using CATALINA_BASE: /usr/local/tomcat2
Using CATALINA_HOME: /usr/local/tomcat2
Using CATALINA_TMPDIR: /usr/local/tomcat2/temp
Using JRE_HOME: /usr/local/jdk8
Using CLASSPATH: /usr/local/tomcat2/bin/bootstrap.jar:/usr/local/tomcat2/bin/tomcat-juli.jar
Tomcat started.
最后配置配置一下 Nginx:
– 切换到目录
cd /usr/local/nginx/conf
– 修改配置文件
vi nginx.conf
– 一些常用配置
–worker_processes:工作进程个数,可配置多个
–worker_connections: 单个进程最大连接数
–server: 每一个 server 相当于一个代理服务器
–lister: 监听端口,默认 80
–server_name: 当前服务的域名,可以有多个,用空格分隔(我们是本地所以是 localhost)
–location:表示匹配的路径,这时配置了 / 表示所有请求都被匹配到这里
–index:当没有指定主页时,默认会选择这个指定的文件,可多个,空格分隔
–proxy_pass:请求转向自定义的服务器列表
–upstream name{}: 服务器集群名称
– 现在想通过 nginx 访问到 tomcat,就需要修改配置中的 server 部分
server
{
listen 80 default;
charset utf-8;
server_name localhost;
access_log logs/host.access.log;
location / {
proxy_pass http://localhost:8080;
proxy_redirect default;
}
}
– 到这里方向代理已经完成,这样所有的请求都需要经过代理服务器才能访问到正式服务器。
接下来实现负载均衡,在安装的过程中 tomcat1 配置的端口是 8080,tomcat2 配置的端口是 8081。然后我们需要在配置文件中定义上游服务器(upstream server)
# 服务器的集群
upstream testcomcat {
#weight 是权重 权重越大,分配的几率越大
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=2;
}
server
{
listen 80 default;
charset utf-8;
access_log logs/host.access.log;
location / {
proxy_pass http://testcomcat;
proxy_redirect default;
}
}
– 为了看到不一样,我将 tomcat root 下面的 index.jsp 页面稍微改动了一下,分别加入了 TEST1,TEST2, 方便区分,重启 nginx, 浏览器地址栏输入 IP,进行访问,多刷新几次页面,会发现是在两个服务器间切换,如下图所示:
service nginx reload
下面关于 Nginx 的文章您也可能喜欢,不妨参考下:
CentOS 7 下 Nginx 服务器的安装配置 https://www.linuxidc.com/Linux/2017-04/142986.htm
CentOS 上安装 Nginx 服务器实现虚拟主机和域名重定向 https://www.linuxidc.com/Linux/2017-04/142642.htm
CentOS 6.8 安装 LNMP 环境(Linux+Nginx+MySQL+PHP)https://www.linuxidc.com/Linux/2017-04/142880.htm
Linux 下安装 PHP 环境并配置 Nginx 支持 php-fpm 模块 https://www.linuxidc.com/Linux/2017-05/144333.htm
Nginx 服务的 SSL 认证和 htpasswd 认证 https://www.linuxidc.com/Linux/2017-04/142478.htm
Ubuntu 16.04 上启用加密安全的 Nginx Web 服务器 https://www.linuxidc.com/Linux/2017-07/145522.htm
Linux 中安装配置 Nginx 及参数详解 https://www.linuxidc.com/Linux/2017-05/143853.htm
Nginx 日志过滤 使用 ngx_log_if 不记录特定日志 https://www.linuxidc.com/Linux/2014-07/104686.htm
CentOS 7.2 下 Nginx+PHP+MySQL+Memcache 缓存服务器安装配置 https://www.linuxidc.com/Linux/2017-03/142168.htm
Nginx 的详细介绍:请点这里
Nginx 的下载地址:请点这里