三主热备架构
搭建Tomcat
在Tomcat1主机安装配置JDK
1.下载JDK21
[root@tomcat1 ~]# wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz
# 查看下载文件
[root@tomcat1 ~]# ls
anaconda-ks.cfg jdk-21_linux-x64_bin.tar.gz# 2. 解压JDK21
[root@tomcat1 ~]# tar -zxf jdk-21_linux-x64_bin.tar.gz -C /usr/local
[root@tomcat1 ~]# ls /usr/local
bin etc games include jdk-21.0.6 lib lib64 libexec sbin share src
[root@tomcat1 ~]# ls /usr/local/jdk-21.0.6/
bin conf include jmods legal lib LICENSE man README release# 3. 配置JDK
[root@tomcat1 ~]# vim /etc/profile
....
export JAVA_HOME=/usr/local/jdk-21.0.6/
export PATH=$PATH:$JAVA_HOME/bin# 4. 刷新文件让配置生效
[root@tomcat1 ~]# source /etc/profile
# 验证JDK是否安装成功
[root@tomcat1 ~]# java -version
java version "21.0.6" 2025-01-21 LTS
Java(TM) SE Runtime Environment (build 21.0.6+8-LTS-188)
Java HotSpot(TM) 64-Bit Server VM (build 21.0.6+8-LTS-188, mixed mode, sharing)
在Tomcat1主机安装配置Tomcat
# 1. 下载tomcat
[root@tomcat1 ~]# wget https://dlcdn.apache.org/tomcat/tomcat-11/v11.0.5/bin/apache-tomcat-11.0.5.tar.gz[root@tomcat1 ~]# ls
anaconda-ks.cfg apache-tomcat-11.0.5.tar.gz jdk-21_linux-x64_bin.tar.gz# 2. 解压tomcat
[root@tomcat1 ~]# tar -zxf apache-tomcat-11.0.5.tar.gz -C /usr/local/
[root@tomcat1 ~]# cd /usr/local/
[root@tomcat1 local]# ls
apache-tomcat-11.0.5 bin etc games include jdk-21.0.6 lib lib64 libexec sbin share src
[root@tomcat1 local]# mv apache-tomcat-11.0.5/ tomcat-11.0.5/
[root@tomcat1 local]# cd tomcat-11.0.5/
# 3. 配置tomcat
[root@tomcat1 tomcat-11.0.5]# vim /etc/profile
......
export TOMCAT_HOME=/usr/local/tomcat-11.0.5
export PATH=$PATH:$TOMCAT_HOME/bin# 4. 刷新配置
[root@tomcat1 bin]# source /etc/profile# 5. 启动tomcat
[root@tomcat1 ~]# startup.sh
Using CATALINA_BASE: /usr/local/tomcat-11.0.5
Using CATALINA_HOME: /usr/local/tomcat-11.0.5
Using CATALINA_TMPDIR: /usr/local/tomcat-11.0.5/temp
Using JRE_HOME: /usr/local/jdk-21.0.6/
Using CLASSPATH: /usr/local/tomcat-11.0.5/bin/bootstrap.jar:/usr/local/tomcat-11.0.5/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
配置好,打开浏览器,输入http://192.168.111.42:8080,如果能够看到那只猫,则已经配置完成。记得关闭防火墙和seliunx。
在Tomcat2主机安装配置Java和Tomcat
1.将tomcat和jdk传输到tomcat2
[root@tomcat1 local]# scp -r /usr/local/apache-tomcat-11.0.5/ root@192.168.111.42:/usr/local > /dev/null
[root@tomcat1 local]# scp -r /usr/local/jdk-21.0.6/ root@192.168.111.42:/usr/local > /dev/null
2.将配置文件拷贝到tomcat2
[root@tomcat1 local]# scp -r /etc/profile root@192.168.111.42:/etc/profile
[root@tomcat2 ~]# cat /etc/profile.........
export JAVA_HOME=/usr/local/jdk-21.0.6/
export PATH=$PATH:$JAVA_HOME/bin
export TOMCAT_HOME=/usr/local/apache-tomcat-11.0.5
export PATH=$PATH:$TOMCAT_HOME/bin3.刷新配置文件
[root@tomcat2 ~]# source /etc/profile
4. 验证JDK是否安装成功
[root@tomcat2 ~]# java -version
java version "21.0.6" 2025-01-21 LTS
Java(TM) SE Runtime Environment (build 21.0.6+8-LTS-188)
Java HotSpot(TM) 64-Bit Server VM (build 21.0.6+8-LTS-188, mixed mode, sharing)# 5. 启动tomcat
[root@tomcat2 ~]# startup.sh
在Tomcat3主机安装jdk和Tomcat
1.将配置tomcat和jdk传输到tomcat3
[root@tomcat1 local]# scp -r /usr/local/apache-tomcat-11.0.5/ root@192.168.111.43:/usr/local > /dev/n
[root@tomcat1 local]# scp -r /usr/local/jdk-21.0.6/ root@192.168.111.42:/usr/local > /dev/null
2.将配置文件拷贝到tomcat3
[root@tomcat1 local]# scp -r /etc/profile root@192.168.111.43:/etc/profile
[root@tomcat3 ~]# cat /etc/profile.........
export JAVA_HOME=/usr/local/jdk-21.0.6/
export PATH=$PATH:$JAVA_HOME/bin
export TOMCAT_HOME=/usr/local/apache-tomcat-11.0.5
export PATH=$PATH:$TOMCAT_HOME/bin3.刷新配置文件
[root@tomcat2 ~]# source /etc/profile
4. 验证JDK是否安装成功
[root@tomcat2 ~]# java -version
java version "21.0.6" 2025-01-21 LTS
Java(TM) SE Runtime Environment (build 21.0.6+8-LTS-188)
Java HotSpot(TM) 64-Bit Server VM (build 21.0.6+8-LTS-188, mixed mode, sharing)# 5. 启动tomcat
[root@tomcat2 ~]# startup.sh
搭建Nginx和keepalived
在master里面搭建nginx
先下载nginx和keepalived,这里默认nginx和keepalived下载完成
先关闭seliunx和防火墙
[root@master ~]# systemctl stop firewalld.service
[root@master ~]# setenforce 01.配置nginx
[root@master ~]# vim /etc/nginx/conf.d/master.confupstream tomcat {
server 192.168.111.41:8080;
server 192.168.111.42:8080;
server 192.168.111.43:8080;
}
server {
listen 80;
server_name 192.168.111.30;
access_log /var/log/nginx/master_access.log;
error_log /var/log/nginx/master_error.log;location / {
proxy_pass http://tomcat;
}
}
在backup里面搭建nginx
先下载nginx和keepalived,这里默认nginx和keepalived下载完成
先关闭seliunx和防火墙
[root@backup~]# systemctl stop firewalld.service
[root@backup~]# setenforce 01.配置nginx
[root@backup ~]# vim /etc/nginx/conf.d/master.confupstream tomcat {
server 192.168.111.41:8080;
server 192.168.111.42:8080;
server 192.168.111.43:8080;
}
server {
listen 80;
server_name 192.168.111.31;
access_log /var/log/nginx/backup_access.log;
error_log /var/log/nginx/backup_error.log;location / {
proxy_pass http://tomcat;
}
}
在backup里面搭建nginx
先下载nginx和keepalived,这里默认nginx和keepalived下载完成
先关闭seliunx和防火墙
[root@master ~]# systemctl stop firewalld.service
[root@master ~]# setenforce 01.配置nginx
[root@master ~]# vim /etc/nginx/conf.d/master.confupstream tomcat {
server 192.168.111.41:8080;
server 192.168.111.42:8080;
server 192.168.111.43:8080;
}
server {
listen 80;
server_name 192.168.111.30;
access_log /var/log/nginx/master_access.log;
error_log /var/log/nginx/master_error.log;location / {
proxy_pass http://tomcat;
}
}
修改tomcat的index页面
为保证可以区分是哪一个tomcat提供的服务,我们修改一下tomcat的页面
tomcat1
1.修改index页面
[root@tomcat1 ~]# cd /usr/local/apache-tomcat-11.0.5/webapps/
[root@tomcat1 webapps]# ls
docs examples host-manager manager ROOT
[root@tomcat1 webapps]# rm -rf docs examples host-manager manager
[root@tomcat1 webapps]# cd ROOT/
[root@tomcat1 ROOT]# rm -rf *
[root@tomcat ROOT]# vim index.jsp[root@tomcat1 ~]# cat /usr/local/apache-tomcat-11.0.5/webapps/ROOT/index.jsp
tomcat1 192.168.111.412.重启tomcat
[root@tomcat ROOT]# startup.sh
Using CATALINA_BASE: /usr/local/apache-tomcat-11.0.5
Using CATALINA_HOME: /usr/local/apache-tomcat-11.0.5
Using CATALINA_TMPDIR: /usr/local/apache-tomcat-11.0.5/temp
Using JRE_HOME: /usr/local/jdk-21.0.6/
Using CLASSPATH: /usr/local/apache-tomcat-11.0.5/bin/bootstrap.jar:/usr/local/apache-tomcat-11.0.cat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
tomcat2
1.修改index页面
[root@tomcat2 ~]# cd /usr/local/apache-tomcat-11.0.5/webapps/
[root@tomcat2 webapps]# ls
docs examples host-manager manager ROOT
[root@tomcat2 webapps]# rm -rf docs examples host-manager manager
[root@tomcat2 webapps]# cd ROOT/
[root@tomcat2 ROOT]# rm -rf *
[root@tomcat ROOT]# vim index.jsp[root@tomcat2 ~]# cat /usr/local/apache-tomcat-11.0.5/webapps/ROOT/index.jsp
tomcat2 192.168.111.422.重启tomcat
[root@tomcat ROOT]# startup.sh
Using CATALINA_BASE: /usr/local/apache-tomcat-11.0.5
Using CATALINA_HOME: /usr/local/apache-tomcat-11.0.5
Using CATALINA_TMPDIR: /usr/local/apache-tomcat-11.0.5/temp
Using JRE_HOME: /usr/local/jdk-21.0.6/
Using CLASSPATH: /usr/local/apache-tomcat-11.0.5/bin/bootstrap.jar:/usr/local/apache-tomcat-11.0.cat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
tomcat3
1.修改index页面
[root@tomcat3 ~]# cd /usr/local/apache-tomcat-11.0.5/webapps/
[root@tomcat3 webapps]# ls
docs examples host-manager manager ROOT
[root@tomcat3 webapps]# rm -rf docs examples host-manager manager
[root@tomcat3 webapps]# cd ROOT/
[root@tomcat3 ROOT]# rm -rf *
[root@tomcat ROOT]# vim index.jsp[root@tomcat3 ~]# cat /usr/local/apache-tomcat-11.0.5/webapps/ROOT/index.jsp
tomcat3 192.168.111.432.重启tomcat
[root@tomcat ROOT]# startup.sh
Using CATALINA_BASE: /usr/local/apache-tomcat-11.0.5
Using CATALINA_HOME: /usr/local/apache-tomcat-11.0.5
Using CATALINA_TMPDIR: /usr/local/apache-tomcat-11.0.5/temp
Using JRE_HOME: /usr/local/jdk-21.0.6/
Using CLASSPATH: /usr/local/apache-tomcat-11.0.5/bin/bootstrap.jar:/usr/local/apache-tomcat-11.0.cat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
重启nginx
[root@master ~]# systemctl restart nginx
[root@backup~]# systemctl restart nginx
[root@backup~]# systemctl restart nginx
测试nginx
测试master
[root@master ~]# curl 192.168.111.30
tomcat3 192.168.111.43
[root@master ~]# curl 192.168.111.30
tomcat1 192.168.111.41
[root@master ~]# curl 192.168.111.30
tomcat2 192.168.111.42发现轮询,则前面配置没有问题。back也是一样测试,这里就省略了。
搭建keepalived
master的keepalived配置
[root@master ~]# cat /etc/keepalived/keepalived.conf
global_defs {
router_id LVS_MASTER
}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.111.100
}
}vrrp_instance VI_2 {
state BACKUP
interface ens160
virtual_router_id 52
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.111.101
}
}vrrp_instance VI_3 {
state BACKUP
interface ens160
virtual_router_id 53
priority 60
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.111.102
}
}
backup的keepalived配置
[root@backup ~]# cat /etc/keepalived/keepalived.conf
global_defs {
router_id LVS_backup
}vrrp_instance VI_1 {
state BACKUP
interface ens160
virtual_router_id 51
priority 60
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.111.100
}
}vrrp_instance VI_2 {
state MASTER
interface ens160
virtual_router_id 52
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.111.101
}
}vrrp_instance VI_3 {
state BACKUP
interface ens160
virtual_router_id 53
priority 60
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.111.102
}
}
backup的keepalived配置
[root@backup ~]# cat /etc/keepalived/keepalived.conf
global_defs {
router_id LVS_backup
}vrrp_instance VI_1 {
state BACKUP
interface ens160
virtual_router_id 51
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.111.100
}
}vrrp_instance VI_2 {
state MASTER
interface ens160
virtual_router_id 52
priority 60
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.111.101
}
}vrrp_instance VI_3 {
state BACKUP
interface ens160
virtual_router_id 53
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.111.102
}
}
这里注意同一个虚拟IP的 virtual_router_id需要一样,优先级不一样
重启keepalived,并测试keepalived
master
backup
backup
搭建高可用
编写一个脚本,来实现nginx挂掉时,重启nginx。若重启不成功,则将keepalived也关掉
1.脚本应用到三台keepalived里面去
[root@master ~]# cat /etc/keepalived/check_nginx.sh
#!/bin/bash
count=$(ps -C nginx --no-header | wc -l)
if [ $count -eq 0 ]
then
systemctl restart nginx
if [ `ps -C nginx --no-header | wc -l` -eq 0 ]
then
systemctl stop keepalived
fi
fi2.将脚本引入到keepalived的配置文件中
[root@master ~]# cat /etc/keepalived/keepalived.conf
global_defs {
router_id LVS_MASTER
}vrrp_script chk_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 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.111.100
}
track_script {
chk_nginx
}
}vrrp_instance VI_2 {
state BACKUP
interface ens160
virtual_router_id 52
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.111.101
}
track_script {
chk_nginx
}
}vrrp_instance VI_3 {
state BACKUP
interface ens160
virtual_router_id 53
priority 60
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.111.102
}
track_script {
chk_nginx
}
}当然两台backup也是一样的将加粗的地方写入,这里就不写出来了。
测试高可用
将mster的nginx停掉,但是依然可以访问,说明我们的高可用搭建成功
[root@master ~]# systemctl stop nginx
[root@master ~]# curl 192.168.111.30
tomcat1 192.168.111.41
搭建DNS轮询
1.配置nginx[root@dns ~] # vim /etc/nginx/conf.d/dns.confupstream web {server 192 .168.111.100;server 192 .168.111.101;server 192.168.111.102;}server {listen 80 ;server_name 192 .168.111.11;access_log /var/log/nginx/dns_access.log;error_log /var/log/nginx/dns_error.log;location / {proxy_pass http://web;}}2.启动服务[root@dns ~] # systemctl start nginx
测试
[root@client ~] # for ((i=1;i<=10;i++)); do curl 192.168.111.11;done;tomcat2 192 .168.72.42tomcat1 192 .168.72.41tomcat2 192 .168.72.43tomcat1 192 .168.72.42tomcat2 192 .168.72.41tomcat1 192 .168.72.43tomcat2 192 .168.72.42tomcat1 192 .168.72.41tomcat2 192 .168.72.43tomcat1 192 .168.72.42