目录
一、概述
二、环境规划
三、Nginx服务、Tomcat服务安装部署
(一)、Nginx服务安装部署
(二)、Tomcat服务安装部署
1、Tomcat01应用服务器部署应用程序
(1)、tomcat_8081服务
(2)、tomcat_8082服务
2、Tomcat02应用服务器部署应用程序
(1)、tomcat_8081服务
(2)、tomcat_8082服务
(三)、Tomcat服务验证
1、反向代理服务器Nginx01节点(192.168.110.161)验证
2、反向代理服务器Nginx02节点(192.168.110.162)验证
四、Nginx双虚拟主机反向代理负载均衡配置
(一)、反向代理负载均衡配置
(二)、启动Nginx服务
(三)、客户端访问反向代理服务
1、客户端访问虚拟主机8081
(1)、客户端访问Nginx服务
(2)、观察服务日志
2、客户端访问虚拟主机8082
(1)、客户端访问Nginx服务
(2)、观察服务日志
(四)、Nginx02节点(192.168.110.162)反向代理负载均衡配置
五、Keepalived安装配置
(一)、安装Keepalived
1、Nginx01节点安装Keepalived
(1)、下载Keepalived源码安装包
(2)、解压Keepalived源码安装包
(3)、编译、安装Keepalived
2、Nginx02节点安装Keepalived
(1)、下载Keepalived源码安装包
(2)、解压Keepalived源码安装包
(3)、编译、安装Keepalived
(二)、配置Keepalived
1、Nginx01节点配置Keepalived
(1)、编辑Nginx服务状态监测脚本
(2)、编辑Keepalived服务配置文件
2、Nginx02节点配置Keepalived
(1)、编辑Nginx服务状态监测脚本
(2)、编辑Keepalived服务配置文件
(三)、启动Keepalived服务
1、Nginx01节点启动Keepalived服务
2、Nginx02节点启动Keepalived服务
(四)、客户端验证服务
1、客户端访问8081端口服务
(1)、客户端访问服务
(2)、观察服务日志
2、客户端访问8082端口服务
(1)、客户端访问服务
(2)、观察服务日志
六、集群高可用性验证
(一)、关闭Keepalived服务验证集群高可用性
1、Nginx01节点关闭Keepalived服务
2、Nginx02节点查看状态
3、验证应用服务是否正常
(1)、验证8081端口服务
(2)、验证8082端口服务
(二)、关闭Nginx服务验证集群高可用性
1、Nginx01节点关闭Nginx服务
2、Nginx02节点查看状态
3、验证应用服务是否正常
(1)、验证8081端口服务
(2)、验证8082端口服务
更多精彩原创博文详见:《Linux系统应用运维》专栏总目录(持续更新)
一、概述
Keepalived是一款基于虚拟冗余路由协议(Virtual Reduntant Routing Protocol,VRRP)实现的轻量级高可用性解决方案。VRRP将多台物理设备抽象成一台虚拟路由器,并为该虚拟路由器分配一个虚拟IP(VIP)对外提供服务。
多台物理设备成员中只有一台是处于MASTER状态,其余成员处于BACKUP状态。MASTER状态的物理设备是虚拟IP(VIP)的拥有者,负责转发外界的请求;BACKUP状态的物理设备是备份状态,当MASTER状态的物理设备故障时,BACKUP状态会转换为MASTER状态进行故障转移接替请求转发的工作,从而实现高可用性。
Keepalived还设计了多种主动健康检测机制,常用的检测机制有TCP检测、HTTP检测、SSL检测、自定义脚本检测等。本文使用自定义脚本检测机制,实时监测Nginx服务的状态,当发现Nginx服务出现故障时,自动进行故障转移。
在本文中,Keepalived负责实现Nginx反向代理服务的高可用性,Nginx服务负责实现后端Tomcat应用服务的负载均衡,使得整个集群具备高可用负载均衡的能力。
Keepalived+Nginx+Tomcat高可用负载均衡集群架构图如下:
二、环境规划
- 服务器规划
主机名称 IP地址 角色 应用程序 端口 虚拟IP 192.168.110.160 VIP 无 8081、8082 Nginx01 192.168.110.161 反向代理服务器+高可用软件 Nginx+Keepalived 8081、8082 Nginx02 192.168.110.162 反向代理服务器+高可用软件 Nginx+Keepalived 8081、8082 Tomcat01 192.168.110.166 后端应用服务器 Tomcat 8081、8082 Tomcat02 192.168.110.167 后端应用服务器 Tomcat 8081、8082
- 系统版本
CentOS Linux release 7.7.1908 (Core)
- Nginx版本
此处使用1.27.5版本,可以根据实际情况选择合适的版本。
Nginx源码包官方下载地址:http://nginx.org/download/
- Tomcat版本
此处使用 v11.0.6 版本,可以根据实际情况选择合适的版本。
二进制安装包官方下载地址:https://dlcdn.apache.org/tomcat/tomcat-11/v11.0.6/bin/apache-tomcat-11.0.6.tar.gz
- Keepalived版本
此处使用2.3.0版本,可以根据实际情况选择合适的版本。
二进制安装包官方下载地址:https://www.keepalived.org/software/keepalived-2.3.0.tar.gz
- 关闭防火墙
此处为方便演示,直接关闭防火墙。生产环境可以根据实际需求开通服务器防火墙策略。
systemctl stop firewalld
systemctl stop iptables
三、Nginx服务、Tomcat服务安装部署
(一)、Nginx服务安装部署
根据文章《一文读懂Nginx应用之 CentOS安装部署Nginx服务》,在反向代理服务器Nginx01节点(192.168.110.161)、反向代理服务器Nginx02节点(192.168.110.162)上安装Nginx服务,安装过程此处不再赘述。
(二)、Tomcat服务安装部署
根据文章《一文读懂Tomcat应用之 CentOS安装部署Tomcat服务》,分别在后端应用服务器Tomcat01(192.168.110.166)、Tomcat02(192.168.110.167)上安装Tomcat服务。此处每个后端应用服务器节点需要安装两个Tomcat服务,安装路径分别为/usr/local/apache-tomcat-8081,并配置服务端口为8081;/usr/local/apache-tomcat-8082,并配置服务端口为8082。安装过程此处不再赘述。
1、Tomcat01应用服务器部署应用程序
新建index.jsp文件,用于模拟应用程序。
(1)、tomcat_8081服务
- 新建index.jsp文件
[root@Tomcat01 ~]# mkdir -pv /usr/local/apache-tomcat-8081/webapps/ROOT/tomcat_8081/
[root@Tomcat01 ~]# cat > /usr/local/apache-tomcat-8081/webapps/ROOT/tomcat_8081/index.jsp << EOF
This is Tomcat01 Web Server !(192.168.110.166)
I am API_8081 !
EOF[root@Tomcat01 ~]# cat /usr/local/apache-tomcat-8081/webapps/ROOT/tomcat_8081/index.jsp
- 重启Tomcat服务
[root@Tomcat01 ~]# /usr/local/apache-tomcat-8081/bin/shutdown.sh
[root@Tomcat01 ~]# /usr/local/apache-tomcat-8081/bin/startup.sh
- 访问index.jsp页面
使用浏览器访问地址:http://192.168.110.166:8081/tomcat_8081/
由上可见,访问成功。
(2)、tomcat_8082服务
- 新建index.jsp文件
[root@Tomcat01 ~]# mkdir -pv /usr/local/apache-tomcat-8082/webapps/ROOT/tomcat_8082/
[root@Tomcat01 ~]# cat > /usr/local/apache-tomcat-8082/webapps/ROOT/tomcat_8082/index.jsp << EOF
This is Tomcat01 Web Server !(192.168.110.166)
I am API_8082 !
EOF[root@Tomcat01 ~]# cat /usr/local/apache-tomcat-8082/webapps/ROOT/tomcat_8082/index.jsp
- 重启Tomcat服务
[root@Tomcat01 ~]# /usr/local/apache-tomcat-8082/bin/shutdown.sh
[root@Tomcat01 ~]# /usr/local/apache-tomcat-8082/bin/startup.sh
- 访问index.jsp页面
使用浏览器访问地址:http://192.168.110.166:8082/tomcat_8082/
由上可见,访问成功。
2、Tomcat02应用服务器部署应用程序
新建index.jsp文件,用于模拟应用程序。
(1)、tomcat_8081服务
- 新建index.jsp文件
[root@Tomcat02 ~]# mkdir -pv /usr/local/apache-tomcat-8081/webapps/ROOT/tomcat_8081/
[root@Tomcat02 ~]# cat > /usr/local/apache-tomcat-8081/webapps/ROOT/tomcat_8081/index.jsp << EOF
This is Tomcat02 Web Server !(192.168.110.167)
I am API_8081 !
EOF[root@Tomcat02 ~]# cat /usr/local/apache-tomcat-8081/webapps/ROOT/tomcat_8081/index.jsp
- 重启Tomcat服务
[root@Tomcat02 ~]# /usr/local/apache-tomcat-8081/bin/shutdown.sh
[root@Tomcat02 ~]# /usr/local/apache-tomcat-8081/bin/startup.sh
- 访问index.jsp页面
使用浏览器访问地址:http://192.168.110.167:8081/tomcat_8081/
由上可见,访问成功。
(2)、tomcat_8082服务
- 新建index.jsp文件
[root@Tomcat02 ~]# mkdir -pv /usr/local/apache-tomcat-8082/webapps/ROOT/tomcat_8082/
[root@Tomcat02 ~]# cat > /usr/local/apache-tomcat-8082/webapps/ROOT/tomcat_8082/index.jsp << EOF
This is Tomcat02 Web Server !(192.168.110.167)
I am API_8082 !
EOF[root@Tomcat02 ~]# cat /usr/local/apache-tomcat-8082/webapps/ROOT/tomcat_8082/index.jsp
- 重启Tomcat服务
[root@Tomcat02 ~]# /usr/local/apache-tomcat-8082/bin/shutdown.sh
[root@Tomcat02 ~]# /usr/local/apache-tomcat-8082/bin/startup.sh
- 访问index.jsp页面
使用浏览器访问地址:http://192.168.110.167:8082/tomcat_8082/
由上可见,访问成功。
(三)、Tomcat服务验证
验证从反向代理服务器Nginx01节点(192.168.110.161)、反向代理服务器Nginx02节点(192.168.110.162)上,是否能够直接访问Tomcat01(192.168.110.166)、Tomcat02(192.168.110.167)的Tomcat应用服务。
1、反向代理服务器Nginx01节点(192.168.110.161)验证
- 访问Tomcat01(192.168.110.166)
[root@Nginx01 ~]# curl http://192.168.110.166:8081/tomcat_8081/
[root@Nginx01 ~]# curl http://192.168.110.166:8082/tomcat_8082/
- 访问Tomcat02(192.168.110.167)
[root@Nginx01 ~]# curl http://192.168.110.167:8081/tomcat_8081/
[root@Nginx01 ~]# curl http://192.168.110.167:8082/tomcat_8082/
以上说明从反向代理服务器Nginx01节点(192.168.110.161)可以正常访问Tomcat01(192.168.110.166)与Tomcat02(192.168.110.167)的Tomcat应用服务,代理服务器与后端应用服务器之间网络、服务等均状态正常。
2、反向代理服务器Nginx02节点(192.168.110.162)验证
- 访问Tomcat01(192.168.110.166)
[root@Nginx02 ~]# curl http://192.168.110.166:8081/tomcat_8081/
[root@Nginx02 ~]# curl http://192.168.110.166:8082/tomcat_8082/
- 访问Tomcat02(192.168.110.167)
[root@Nginx02 ~]# curl http://192.168.110.167:8081/tomcat_8081/
[root@Nginx02 ~]# curl http://192.168.110.167:8082/tomcat_8082/
以上说明从反向代理服务器Nginx02节点(192.168.110.162)可以正常访问Tomcat01(192.168.110.166)与Tomcat02(192.168.110.167)的Tomcat应用服务,代理服务器与后端应用服务器之间网络、服务等均状态正常。
四、Nginx双虚拟主机反向代理负载均衡配置
在本例中,客户端通过访问Nginx反向代理服务的不同端口或者不同域名,来实现请求转发至不同的后端应用服务器组。其中8081端口表示访问后端应用服务器组Tomcat01(192.168.110.166)的8081端口服务和Tomcat02(192.168.110.167)的8081端口服务;8082端口表示访问后端应用服务器组Tomcat01(192.168.110.166)的8082端口服务和Tomcat02(192.168.110.167)的8082端口服务;
在nginx.conf配置文件中,http模块下配置了两个server模块和两个upstream模块,来实现双虚拟主机反向代理负载均衡配置。其中tomcat8081服务器组的负载均衡策略使用默认的轮询策略,在upstream中不需要显式配置;tomcat8082服务器组的负载均衡策略使用最少连接(least_conn)策略,在upstream中需要显式配置。
(一)、反向代理负载均衡配置
在反向代理服务器Nginx01(192.168.110.161)中修改Nginx服务配置文件/usr/local/nginx/conf/nginx.conf,加入反向代理和负载均衡配置。本例中最核心的配置是location模块、upstream模块、server模块。
[root@Nginx01 ~]# vim /usr/local/nginx/conf/nginx.conf
配置内容如下:
#
# Nginx configuration
#
worker_processes 1;pid /usr/local/nginx/nginx.pid;
events {
worker_connections 1024;
}http {
include mime.types;
default_type application/octet-stream;log_format main '"$remote_addr" "$remote_user" [$time_local] "$request" '
'"$status" "$body_bytes_sent" "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$request_time" '
'"$host:$server_port" "$upstream_addr" '