一文读懂Nginx应用之 Keepalived+Nginx+Tomcat实现高可用负载均衡集群

目录

一、概述

二、环境规划

三、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" '

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

野熊佩骑

您的鼓励是我持续创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值