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

article/2025/8/14 18:49:07

目录

一、概述

二、环境规划

三、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地址角色应用程序端口
虚拟IP192.168.110.160VIP8081、8082
Nginx01192.168.110.161反向代理服务器+高可用软件Nginx+Keepalived8081、8082
Nginx02192.168.110.162反向代理服务器+高可用软件Nginx+Keepalived8081、8082
Tomcat01192.168.110.166后端应用服务器Tomcat8081、8082
Tomcat02192.168.110.167后端应用服务器Tomcat8081、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" '


http://www.hkcw.cn/article/mjCWWMKJJI.shtml

相关文章

从0到1部署Tomcat和添加servlet(IDEA2024最新版详细教程)

本文不仅细化了每一个步骤&#xff0c;实现了从0到1部署Tomcat和添加servlet。还针对IDEA2024版和以前的版本在部署上的区别&#xff0c;做了详细介绍&#xff0c;尤其是add framework support部分。与此同时&#xff0c;针对控制台中文乱码问题&#xff0c;本文也给出了详细解…

Apache Tomcat RCE 稳定复现 保姆级!(CVE-2024-50379)附视频+POC

原文链接 Apache Tomcat 最新RCE 稳定复现分析 保姆级&#xff01;&#xff01;&#xff01;附复现视频POC 前言 最近爆出 Apache Tomcat条件竞争导致的RCE&#xff0c;影响范围当然是巨大的&#xff0c;公司也及时收到了相关情报&#xff0c;于是老大让我复现&#xff0c;以…

Tomcat 的使用(图文教学)

Tomcat 的使用&#xff08;图文教学&#xff09; 前言一、什么是Tomcat&#xff1f;二、Tomcat 服务器和 Servlet 版本的对应关系三、Tomcat 的使用 1、安装2、目录介绍3、如何启动4、Tomcat 的停止5、如何修改 Tomcat 的端口号6、如何部暑 web 工程到 Tomcat 中 6.1 方式一6.…

linux服务器tomcat日志中文出现问号乱码

目录 一、场景二、排查三、原因四、解决 一、场景 tomcat日志的中文出现问号乱码 乱码示例 ??[377995738417729536]????????? ac??????????????message:二、排查 1、使用locale命令查看服务器当前使用的语言包 发现只用的语言包为utf-8&#xff0…

在【IntelliJ IDEA】中配置【Tomcat】【2023版】【中文】【图文详解】

作为一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;IntelliJ IDEA为Web服务器提供了卓越的支持&#xff0c;从而极大地简化了程序员在Web开发过程中的工作流程。学习Java Web开发实质上就是掌握如何创造动态Web资源&#xff0c;这些资源在完成开发后&…

tomcat 8 所有版本安装包

https://archive.apache.org/dist/tomcat/tomcat-8/ 此时在这里点击你要下载的版本号&#xff0c;这里大版本都是 8&#xff0c;这里演示下载 8.5.57 的过程&#xff1a; 点击后页面如下&#xff0c;再点击这里的 bin/ 我使用的linux系统选择对应的版本下载

Tomcat多应用部署与静态资源路径问题全解指南

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家、CSDN平台优质创作者&#xff0c;高级开发工程师&#xff0c;数学专业&#xff0c;10年以上C/C, C#, Java等多种编程语言开发经验&#xff0c;拥有高级工程师证书&#xff1b;擅长C/C、C#等开发语言&#xff0c;熟悉Java常用开…

Tomcat 8.5 下载、安装、启动及各种问题

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 本期内容主要介绍 Tomcat 8 的安装&#xff0c;以及可能会遇到的问题 文章目录 1. Tomcat 安装2. 可能会遇到的问题2.…

tomcat官网下载及安装

文档参考&#xff1a; (5条消息) tomcat官网下载详细步骤_成长硕果的博客-CSDN博客_tomcat怎么下载 (5条消息) Tomcat的下载及安装_InkingWT的博客-CSDN博客_tomcat下载及安装 一、Tomcat下载 1、tomcat官方网址&#xff1a;https://tomcat.apache.org 2、选择自己所需要的…

Apache Tomcat 远程代码执行漏洞(CVE-2025-24813) 超详细!

一、漏洞概述 远程代码执行漏洞(CVE-2025-24813)源于 Apache Tomcat 的反序列化机制未对用户输入进行严格验证&#xff0c;攻击者可通过构造恶意序列化对象绕过安全限制&#xff0c;处理部分 PUT 请求时&#xff0c;攻击者利用临时文件路径处理中的缺陷&#xff08;将路径分隔…

Tomcat 是什么?有什么功能和作用?为什么启动 Spring 或 Spring Boot 项目需要 Tomcat?

本文的内容是博主学习并记录关于 Tomcat 的基本知识&#xff0c;介绍了 Tomcat 为什么是一个 Web 应用服务器&#xff0c;为什么是 Servlet 容器&#xff0c;同时总结了 Tomcat 的一些功能原理&#xff0c;并详细介绍了 Tomcat 在 Spring 和SpringBoot 项目中的使用原理。本文不…

IDEA 中配置 Tomcat (详细教程)

前言 在Web项目的开发过程中&#xff0c;Tomcat 作为一款开源的Servlet容器&#xff0c;不仅能够提供稳定的运行环境&#xff0c;为开发者提供了丰富的功能支持。因此&#xff0c;本文将详细阐述在Web项目如何配置Tomcat服务器&#xff0c;包括安装检查、模块设置、路径配置、依…

tomcat 在 Linux 环境下的安装与配置教程

想部署个 Java Web 项目&#xff1f;那你八成会接触到 Tomcat。 本篇就是为 从没用过 Tomcat 的新手 写的&#xff0c;带你一步一步在 Linux 系统里把 Tomcat 装好、跑起来&#xff01; 为什么要学会用 Tomcat&#xff1f; Tomcat 是一个免费的 Java Web 服务器&#xff0c;功…

【机器学习】线性回归与逻辑回归的极致解析:从数学理论到实战案例

文章目录 1. 引言Python 代码示例 2. 线性回归2.1 线性回归的基本概念线性回归的定义数学表达式及模型假设 2.2 线性回归的工作原理最小二乘法&#xff08;Ordinary Least Squares, OLS&#xff09;梯度下降法在线性回归中的应用多元线性回归与一元线性回归的区别与联系 2.3 线…

机器学习-聚类分析算法

一、聚类分析的定义 聚类分析是一种无监督学习的统计分析方法。它的主要目的是将一个数据集中的样本&#xff08;或观测值&#xff09;按照某种相似性或距离度量划分成若干个类别&#xff08;簇&#xff09;。在聚类过程中&#xff0c;同一个簇内的样本具有较高的相似性&#…

LeetCode 热题 100 回顾

目录 一、哈希部分 1.两数之和 (简单) 2.字母异位词分组 (中等) 3.最长连续序列 (中等) 二、双指针部分 4.移动零 (简单) 5.盛最多水的容器 (中等) 6. 三数之和 (中等) 7.接雨水 (困难) 三、滑动窗口 8.无重复字符的最长子串 (中等) 9.找到字符串中…

人脸识别-特征算法

文章目录 一、LBPH算法1.基本原理2.实现步骤3.代码实现 二、Eigenfaces算法1.特点2.代码实习 三、FisherFaces算法1.算法原理2.算法特点3.代码实现 四、总结 人脸识别特征识别器是数字信息发展中的一种生物特征识别技术&#xff0c;其核心在于通过特定的算法和技术手段&#xf…

【数据结构】排序算法---计数排序(动图演示)

文章目录 1. 定义2. 算法步骤3. 动图演示4. 性质5. 算法分析6. 代码实现C语言PythonJavaGo 结语 1. 定义 计数排序又称为鸽巢原理&#xff0c;是对哈希直接定址法的变形应用。计数排序不是基于比较的排序算法&#xff0c;其核心在于将输入的数据值转化为键存储在额外开辟的数组…

【优选算法 | 哈希表】常见算法题的哈希表套路拆解

算法相关知识点可以通过点击以下链接进行学习一起加油&#xff01;双指针滑动窗口二分查找前缀和位运算模拟链表 在刷题的过程中&#xff0c;我们会频繁遇到一些“高频套路”——而哈希表正是其中最常用也最高效的工具之一。它能帮助我们在 O(1) 的时间复杂度内完成查找、插入与…

数据结构《排序》

在之前数据结构之算法复杂度章节中我们学习了复杂度相关的概念&#xff0c;这就使得懂得如何来区分算法的好坏&#xff0c;在之前C语言专题中在指针的学习时我们了解了冒泡排序&#xff0c;之后再数据结构的二叉树章节中我们又学习了堆排序&#xff0c;其实排序不止这两种&…