Keepalived+nginx+tomcat

Keepalived+nginx+tomcat

1.1 节点规划

IP地址 主机名 软件 节点
192.168.72.30 master keepalived,nginx 主节点
192.168.72.32 backup keepalived,nginx 从节点
192.168.72.100 VIP地址
192.168.72.41 web1 tomcat,jdk
192.168.72.42 web2 tomcat,jdk

1.2 环境准备

1、先删除master和backup服务器上的keeapalived和nginx服务。

bash 复制代码
# 1. 停止服务
[root@master ~]# systemctl stop keepalived
[root@master ~]# systemctl stop nginx

[root@backup ~]# systemctl stop keepalived
[root@backup ~]# systemctl stop nginx

# 2. 删除软件
[root@master ~]# dnf remove nginx keepalived
[root@backup ~]# dnf remove nginx keepalived


# 3. 删除文件
[root@master ~]# rm -rf /etc/keepalived
[root@backup ~]# rm -rf /etc/keepalived

2、克隆两台tomcat服务器,并设置主机名和IP地址

bash 复制代码
# 1. 修改主机名
[root@localhost ~]# hostnamectl set-hostname tomcat1 && bash
[root@tomcat1 ~]# 

[root@localhost ~]# hostnamectl set-hostname tomcat2 && bash
[root@tomcat2 ~]# 


# 2. 修改IP地址
[root@tomcat1 ~]# nmcli c m ens160 ipv4.method manual ipv4.addresses 192.168.72.41/24 ipv4.gateway 192.168.72.2 ipv4.dns 223.5.5.5 connection.autoconnect yes
[root@tomcat1 ~]# nmcli c up ens160

[root@tomcat2 ~]# nmcli c m ens160 ipv4.method manual ipv4.addresses 192.168.72.42/24 ipv4.gateway 192.168.72.2 ipv4.dns 223.5.5.5 connection.autoconnect yes
[root@tomcat2 ~]# nmcli c up ens160

3、将两台tomcat服务的selinux和防火墙关闭

bash 复制代码
# 1. 关闭selinux
[root@tomcat1 ~]# setenforce 0
[root@tomcat1 ~]# sed -i "s/SELINUX=enforcing/SELINUX=permissive/" /etc/selinux/config 
[root@tomcat1 ~]# grep SELINUX /etc/selinux/config
# SELINUX= can take one of these three values:
# NOTE: Up to RHEL 8 release included, SELINUX=disabled would also
SELINUX=permissive
# SELINUXTYPE= can take one of these three values:
SELINUXTYPE=targeted

[root@tomcat2 ~]# sed -i "s/SELINUX=enforcing/SELINUX=permissive/" /etc/selinux/config
[root@tomcat2 ~]# setenforce 0


# 2. 关闭防火墙
[root@tomcat2 ~]# systemctl disable --now firewalld.service 
Removed "/etc/systemd/system/multi-user.target.wants/firewalld.service".
Removed "/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service".

[root@tomcat1 ~]# systemctl disable --now firewalld.service
Removed "/etc/systemd/system/multi-user.target.wants/firewalld.service".
Removed "/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service".

1.3 搭建tomcat

1.3.1 安装JDK

1、安装jdk

bash 复制代码
# 下载安装包
[root@tomcat1 ~]# wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz
--2026-01-13 14:21:31--  https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz
Resolving download.oracle.com (download.oracle.com)... 23.58.108.145
Connecting to download.oracle.com (download.oracle.com)|23.58.108.145|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 197085853 (188M) [application/x-gzip]
Saving to: 'jdk-21_linux-x64_bin.tar.gz'

jdk-21_linux-x64_bin.tar.gz       100%[==========================================================>] 187.96M  14.3MB/s    in 15s     

2026-01-13 14:21:47 (12.3 MB/s) - 'jdk-21_linux-x64_bin.tar.gz' saved [197085853/197085853]


# 解压即安装
[root@tomcat1 ~]# tar -zxf jdk-21_linux-x64_bin.tar.gz -C /usr/local/
[root@tomcat1 ~]# cd /usr/local/
[root@tomcat1 local]# ls
bin  etc  games  include  jdk-21.0.9  lib  lib64  libexec  sbin  share  src
[root@tomcat1 local]# cd jdk-21.0.9/
[root@tomcat1 jdk-21.0.9]# pwd
/usr/local/jdk-21.0.9

2、配置JDK

ba 复制代码
[root@tomcat1 jdk-21.0.9]# vim /etc/profile

然后在这个文件的最后添加如下的内容:

bash 复制代码
.....
export JAVA_HOME=/usr/local/jdk-21.0.9
export PATH=$PATH:$JAVA_HOME/bin

3、让配置生效

bash 复制代码
[root@tomcat1 jdk-21.0.9]# source /etc/profile
[root@tomcat1 jdk-21.0.9]# 

4、验证JDK的安装

bash 复制代码
[root@tomcat1 jdk-21.0.9]# java --version
java 21.0.9 2025-10-21 LTS
Java(TM) SE Runtime Environment (build 21.0.9+7-LTS-338)
Java HotSpot(TM) 64-Bit Server VM (build 21.0.9+7-LTS-338, mixed mode, sharing)

5、将JDK的安装目录和配置文件复制到tomcat2服务器中

bash 复制代码
# 1. 复制安装目录
[root@tomcat1 jdk-21.0.9]# scp -r /usr/local/jdk-21.0.9/ root@192.168.72.42:/usr/local/
The authenticity of host '192.168.72.42 (192.168.72.42)' can't be established.
ED25519 key fingerprint is SHA256:s1BvgtBs1UxSKS+5fVxpZGEOB76pE1/J2MAZnhNW6Wo.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.72.42' (ED25519) to the list of known hosts.
root@192.168.72.42's password: 


# 2. 验证安装目录
[root@tomcat2 ~]# ls /usr/local/
bin  etc  games  include  jdk-21.0.9  lib  lib64  libexec  sbin  share  src


# 3. 复制配置文件
[root@tomcat2 ~]# scp root@192.168.72.41:/etc/profile /etc/
The authenticity of host '192.168.72.41 (192.168.72.41)' can't be established.
ED25519 key fingerprint is SHA256:s1BvgtBs1UxSKS+5fVxpZGEOB76pE1/J2MAZnhNW6Wo.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.72.41' (ED25519) to the list of known hosts.
root@192.168.72.41's password: 
profile                                                                                            100% 1973     1.2MB/s   00:00    

# 4. 验证配置文件
[root@tomcat2 ~]# tail -4 /etc/profile

export JAVA_HOME=/usr/local/jdk-21.0.9
export PATH=$PATH:$JAVA_HOME/bin

# 5. 让配置生效
[root@tomcat2 ~]# source /etc/profile

# 6. 验证JDK
[root@tomcat2 ~]# java --version
java 21.0.9 2025-10-21 LTS
Java(TM) SE Runtime Environment (build 21.0.9+7-LTS-338)
Java HotSpot(TM) 64-Bit Server VM (build 21.0.9+7-LTS-338, mixed mode, sharing)
1.3.2 安装tomcat

1、下载tomcat安装包

bash 复制代码
[root@tomcat1 ~]# wget https://dlcdn.apache.org/tomcat/tomcat-11/v11.0.15/bin/apache-tomcat-11.0.15.tar.gz
--2026-01-13 14:38:56--  https://dlcdn.apache.org/tomcat/tomcat-11/v11.0.15/bin/apache-tomcat-11.0.15.tar.gz
Resolving dlcdn.apache.org (dlcdn.apache.org)... 151.101.2.132, 2a04:4e42::644
Connecting to dlcdn.apache.org (dlcdn.apache.org)|151.101.2.132|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 14317088 (14M) [application/x-gzip]
Saving to: 'apache-tomcat-11.0.15.tar.gz'

apache-tomcat-11.0.15.tar.gz      100%[==========================================================>]  13.65M  8.55MB/s    in 1.6s    

2026-01-13 14:38:58 (8.55 MB/s) - 'apache-tomcat-11.0.15.tar.gz' saved [14317088/14317088]

2、解压安装包

bash 复制代码
[root@tomcat1 ~]# tar -zxf apache-tomcat-11.0.15.tar.gz -C /usr/local

[root@tomcat1 ~]# cd /usr/local/
[root@tomcat1 local]# ls
apache-tomcat-11.0.15  bin  etc  games  include  jdk-21.0.9  lib  lib64  libexec  sbin  share  src
[root@tomcat1 local]# mv apache-tomcat-11.0.15/ tomcat-11.0.15/
[root@tomcat1 local]# ls
bin  etc  games  include  jdk-21.0.9  lib  lib64  libexec  sbin  share  src  tomcat-11.0.15
root@tomcat1 local]# cd tomcat-11.0.15/
[root@tomcat1 tomcat-11.0.15]# pwd
/usr/local/tomcat-11.0.15

3、配置tomcat

bash 复制代码
[root@tomcat1 tomcat-11.0.15]# vim /etc/profile

在文件的最后添加如下内容:

bash 复制代码
....
export CATALINA_HOME=/usr/local/tomcat-11.0.15
export PATH=$PATH:$CATALINA_HOME/bin

4、让配置生效

bash 复制代码
[root@tomcat1 tomcat-11.0.15]# source /etc/profile

5、将安装好后的tomcat目录复制到tomcat2服务器中

bash 复制代码
[root@tomcat1 tomcat-11.0.15]# scp -r /usr/local/tomcat-11.0.15/ 192.168.72.42:/usr/local

6、将配置文件也复制到tomcat2服务器中

bash 复制代码
[root@tomcat1 tomcat-11.0.15]# scp /etc/profile 192.168.72.42:/etc/
root@192.168.72.42's password: 
profile                                                                                            100% 2057     3.9MB/s   00:00    

7、让配置生效

bash 复制代码
[root@tomcat2 ~]# source /etc/profile
1.3.3 启动服务

1、启动服务

bash 复制代码
[root@tomcat1 tomcat-11.0.15]# startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat-11.0.15
Using CATALINA_HOME:   /usr/local/tomcat-11.0.15
Using CATALINA_TMPDIR: /usr/local/tomcat-11.0.15/temp
Using JRE_HOME:        /usr/local/jdk-21.0.9
Using CLASSPATH:       /usr/local/tomcat-11.0.15/bin/bootstrap.jar:/usr/local/tomcat-11.0.15/bin/tomcat-juli.jar
Using CATALINA_OPTS:   
Tomcat started.


[root@tomcat2 ~]# startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat-11.0.15
Using CATALINA_HOME:   /usr/local/tomcat-11.0.15
Using CATALINA_TMPDIR: /usr/local/tomcat-11.0.15/temp
Using JRE_HOME:        /usr/local/jdk-21.0.9
Using CLASSPATH:       /usr/local/tomcat-11.0.15/bin/bootstrap.jar:/usr/local/tomcat-11.0.15/bin/tomcat-juli.jar
Using CATALINA_OPTS:   
Tomcat started.

2、访问测试

bash 复制代码
http://192.168.72.41:8080/

为了能够更好的看到是哪一台服务器在运行,我们修改index.jsp首页文件:

bash 复制代码
[root@tomcat1 ~]# echo "$(hostname) $(hostname -I)" > /usr/local/tomcat-11.0.15/webapps/ROOT/index.jsp

[root@tomcat2 ~]# echo "$(hostname) $(hostname -I)" > /usr/local/tomcat-11.0.15/webapps/ROOT/index.jsp

1.4 搭建nginx服务器

1、安装nginx

bash 复制代码
[root@master ~]# dnf install nginx -y

[root@backup ~]# dnf install nginx -y

2、配置nginx

2.1 配置master服务

bash 复制代码
[root@master ~]# cd /etc/nginx/conf.d/
[root@master conf.d]# ls
[root@master conf.d]# vim tomcat.conf

文件的内容如下:

nginx 复制代码
upstream web {
        server 192.168.72.41:8080;
        server 192.168.72.42:8080;
}

server {
        listen          80;
        server_name     192.168.72.30;
        location / {
                proxy_pass      http://web;
        }
}

2.2 配置backup服务

bash 复制代码
[root@master conf.d]# scp /etc/nginx/conf.d/tomcat.conf 192.168.72.32:/etc/nginx/conf.d/
root@192.168.72.32's password: 
tomcat.conf                                                                                        100%  168   260.5KB/s   00:00    

然后修改一个服务名称:

nginx 复制代码
upstream web {
        server 192.168.72.41:8080;
        server 192.168.72.42:8080;
}

server {
        listen          80;
        server_name     192.168.72.32;
        location / {
                proxy_pass      http://web;
        }
}

3、启动nginx服务

bash 复制代码
[root@master conf.d]# systemctl start nginx

[root@backup ~]# systemctl start nginx

4、测试运行

在浏览器中输入 http://192.168.72.31或http://192.168.72.32来进行访问。

bash 复制代码
[root@master conf.d]# curl 192.168.72.30
tomcat1 192.168.72.41 
[root@master conf.d]# curl 192.168.72.30
tomcat2 192.168.72.42 
[root@master conf.d]# curl 192.168.72.30
tomcat1 192.168.72.41 
[root@master conf.d]# curl 192.168.72.30
tomcat2 192.168.72.42 
[root@master conf.d]# curl 192.168.72.30
tomcat1 192.168.72.41 
[root@master conf.d]# curl 192.168.72.30
tomcat2 192.168.72.42 
[root@master conf.d]# curl 192.168.72.30
tomcat1 192.168.72.41 



[root@backup ~]# curl 192.168.72.32
tomcat1 192.168.72.41 
[root@backup ~]# curl 192.168.72.32
tomcat2 192.168.72.42 
[root@backup ~]# curl 192.168.72.32
tomcat1 192.168.72.41 
[root@backup ~]# curl 192.168.72.32
tomcat2 192.168.72.42 
[root@backup ~]# curl 192.168.72.32
tomcat1 192.168.72.41 
[root@backup ~]# curl 192.168.72.32
tomcat2 192.168.72.42 
[root@backup ~]# curl 192.168.72.32
tomcat1 192.168.72.41 

1.5 搭建keepalived

1、安装keepalived

bash 复制代码
[root@master conf.d]# dnf install keepalived -y

[root@backup ~]# dnf install keepalived -y

2、配置keepalived

2.1 配置master

bash 复制代码
[root@master conf.d]# vim /etc/keepalived/keepalived.conf

文件内容如下:

bash 复制代码
global_defs {
   router_id nginx1
}

vrrp_script chk_nginx {
    script "/etc/keepalived/check_nginx.sh"
    interval 2
    timeout 2
    weight -20
    fall 3
    rise 2
}

vrrp_instance VI_1 {
    state MASTER
    interface ens160
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.72.100
    }
    track_script {
        chk_nginx
    }
}

3、编写健康检查脚本

bash 复制代码
[root@master conf.d]# vim /etc/keepalived/check_nginx.sh

脚本的内容如下:

bash 复制代码
#!/bin/bash

count=`ps -C nginx --no-header | wc -l`
if [ $count -eq 0 ]; then
        systemctl start nginx
        sleep 1
        if [ `ps -C nginx --no-header | wc -l` -eq 0 ]; then
                systemctl stop keepalived
        fi      
fi

4、给脚本设置可执行权限

bash 复制代码
[root@master conf.d]# chmod +x /etc/keepalived/check_nginx.sh

5、将keepalived和脚本文件复制到backup服务器上

bash 复制代码
[root@master conf.d]# scp /etc/keepalived/* 192.168.72.32:/etc/keepalived/
root@192.168.72.32's password: 
check_nginx.sh                                                                                     100%  200   383.7KB/s   00:00    
keepalived.conf                                                                                    100%  463   841.6KB/s   00:00    

6、修改backup服务器上的配置文件

bash 复制代码
[root@backup ~]# vim /etc/keepalived/keepalived.conf

文件内容如下:

bash 复制代码
global_defs {
   router_id nginx2
}

vrrp_script chk_nginx {
    script "/etc/keepalived/check_nginx.sh"
    interval 2
    timeout 2
    weight -20
    fall 3
    rise 2
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens160
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.72.100
    }
    track_script {
        chk_nginx
    }
}

7、启动服务

bash 复制代码
 [root@master conf.d]# systemctl start keepalived.service


[root@backup ~]# systemctl start keepalived.service




[root@master conf.d]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:e6:52:73 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 192.168.72.30/24 brd 192.168.72.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet 192.168.72.100/32 scope global ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fee6:5273/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever



[root@backup ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:2d:01:df brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 192.168.72.32/24 brd 192.168.72.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe2d:1df/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

8、修改nginx的配置文件(两台服务器都要改)

bash 复制代码
vim /etc/nginx/conf.d/tomcat.conf

文件内容如下:

nginx 复制代码
upstream web {
        server 192.168.72.41:8080;
        server 192.168.72.42:8080;
}

server {
        listen          80;
        server_name     192.168.72.100;
        location / {
                proxy_pass      http://web;
        }
}

9、重启nginx服务

bash 复制代码
[root@master conf.d]# systemctl restart nginx

[root@backup ~]# systemctl restart nginx

10、运行测试

bash 复制代码
[root@master conf.d]# curl 192.168.72.100
tomcat1 192.168.72.41 
[root@master conf.d]# curl 192.168.72.100
tomcat2 192.168.72.42 
[root@master conf.d]# curl 192.168.72.100
tomcat1 192.168.72.41 
[root@master conf.d]# curl 192.168.72.100
tomcat2 192.168.72.42 


[root@backup ~]# curl 192.168.72.100
tomcat1 192.168.72.41 
[root@backup ~]# curl 192.168.72.100
tomcat2 192.168.72.42 
[root@backup ~]# curl 192.168.72.100
tomcat1 192.168.72.41 
[root@backup ~]# curl 192.168.72.100
tomcat2 192.168.72.42 


[root@master conf.d]# systemctl stop nginx
[root@master conf.d]# curl 192.168.72.100
tomcat1 192.168.72.41 
[root@master conf.d]# curl 192.168.72.100
tomcat2 192.168.72.42 
[root@master conf.d]# curl 192.168.72.100
tomcat1 192.168.72.41 
[root@master conf.d]# curl 192.168.72.100
tomcat2 192.168.72.42 
[root@master conf.d]# curl 192.168.72.100
tomcat1 192.168.72.41 
相关推荐
计算机毕设指导62 小时前
基于微信小程序民宿预订管理系统【源码文末联系】
java·spring boot·mysql·微信小程序·小程序·tomcat·maven
oMcLin3 小时前
如何在CentOS 7.9上配置并优化高并发视频流平台,利用Nginx和RTMP模块确保低延迟流媒体传输?
linux·nginx·centos
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ4 小时前
List、Set的相似性
windows·tomcat·list
守城小轩5 小时前
深度解析 Firefox 144+ 编译架构(五)深入解析 Bootstrap 引导模式
firefox·浏览器自动化·指纹浏览器·浏览器开发
幽影相随5 小时前
Docker 环境下的 Nginx 负载均衡(vllm)
nginx·负载均衡
xiaoliuliu123456 小时前
apache-tomcat-6.0.10使用步骤详解(附启动与部署教程)
java·tomcat·apache
麦兜*6 小时前
Spring Boot整合MyBatis-Plus实战:简化CRUD操作的最佳实践
spring boot·tomcat·mybatis
Overt0p7 小时前
抽奖系统(7)
java·开发语言·spring boot·redis·tomcat·rabbitmq
岁岁种桃花儿7 小时前
Spring Boot Maven插件核心配置详解:从打包到部署全流程
前端·firefox·springboot