1、虚拟环境准备:
角色 | 主机名 | 软件 | IP地址 |
用户 | client | 192.168.250.90 | |
keepalived | Vip | 192.168.250.100 192.168.250.101 192.168.250.101 | |
master | servera | keepalived、nginx | 192.168.250.30 |
backup | serverb | keepalived、nginx | 192.168.250.31 |
backup | serverc | keepalived、nginx | 192.168.250.32 |
web | tomcat1 | tomcat | 192.168.250.41 |
web | tomcat2 | tomcat | 192.168.250.42 |
web | tomcat3 | tomcat | 192.168.250.43 |
DNS轮询 | DNS | nginx | 192.168.250.11 |
注意:开始搭建之前确保所有虚拟机防火墙和selinux都要关闭
2、搭建tomcat
(1)搭建JDK环境
wget https://download.oracle.com/java/21/latest/jdk21_linux-x64_bin.tar.gz
将JDK21的压缩包使用tar命令压缩到/usr/local目录下
tar -zxf jdk-21_linux-x64_bin.tar.gz -C /usr/local/
进入/etc/profile目录下加入以下内容:
export JAVA_HOME=/usr/local/jdk-21.0.6/
export PATH=$PATH:$JAVA_HOME/bin
使用source /etc/profile 加载文件
查看java环境是否搭建成功,使用java -version 查询java的版本:
[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)
(2)搭建web页面
tomcat1
下载tomcat压缩包:
wget https://dlcdn.apache.org/tomcat/tomcat11/v11.0.5/bin/apache-tomcat-11.0.5.tar.gz
将压缩包解压到/usr/local下
tar -zxf apache-tomcat-11.0.5.tar.gz -C /usr/local/
在/etc/profile目录下添加如下内容:
export TOMCAT_HOME=/usr/local/apache-tomcat-11.0.5
export PATH=$PATH:$TOMCAT_HOME/bin
这时环境变量就添加好了,使用source /etc/profile重新加载文件,然后使用startup.sh启动tomcat如下:
[root@tomcat1 ~]# 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.5/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
重新定义web页面
cd /usr/local/apache-tomcat-11.0.5/webapps/ROOT/
删除此目录下的所有内容,再重新定义一个以.jsp结尾的文件:
[root@tomcat1 ROOT]# rm -rf *
[root@tomcat1 ROOT]# vim index.jsp
index.jsp中的内容可随便定义(这里我们方便区别另外两台tomcat定义成ip地址加主机名)
[root@tomcat1 ROOT]# cat index.jsp
tomcat1 192.168.250.41
此时我们在浏览器输入http://192.168.250.41:8080验证tomcat是否成功
已经成功看到我们自定义的内容!!
还剩另外两台tomcat和第一台的搭建一摸一样唯一不同的就是自定义的web界面:
tomcat2
使用scp命令将tomcat1上的jdk文件和tomcat文件传到tomcat2上:
scp -r /usr/local/jdk-21.0.6/ root@192.168.250.42:/usr/local
scp -r /usr/local/apache-tomcat-11.0.5/ root@192.168.250.42:/usr/local
再在tomcat2上查看文件是否传送成功:
[root@tomcat2 ~]# ls /usr/local/
apache-tomcat-11.0.5 bin etc games include jdk-21.0.6 lib lib64 libexec sbin share src
再将tomcat1上的/etc/profile文件传到tomcat2上:
[root@tomcat1 ~]# scp /etc/profile root@192.168.250.42:/etc
查看tomcat2上/etc/profile文件下的倒数四行,是否传送成功:
[root@tomcat2 ~]# tail -n -4 /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/bin
传送成功!!此时需要使用source /etc/profile 更新文件再使用java -version 和startup.sh 启动tomcat
[root@tomcat2 ~]# source /etc/profile
[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)
[root@tomcat2 ~]# 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.5/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
重新定义web界面:
cd /usr/local/apache-tomcat-11.0.5/webapps/ROOT/
删除此目录下的所有内容,再重新定义一个以.jsp结尾的文件:
[root@tomcat1 ROOT]# rm -rf *
[root@tomcat1 ROOT]# vim index.jsp
这里我们将tomcat2上的web界面定义为:
[root@tomcat2 ~]# cat /usr/local/apache-tomcat-11.0.5/webapps/ROOT/index.jsp
tomcat2 192.168.250.42
再在浏览器中输入:http//192.168.250.42:8080查看
tomcat3
和tomcat2一样先从tomcat1上将jdk以及tomcat传到本机上再将/etc/profile也传到本机上再启动tomcat最后自定义web页面然后测试是否生效:
传送文件:
scp -r /usr/local/jdk-21.0.6/ root@192.168.250.42:/usr/local
scp -r /usr/local/apache-tomcat-11.0.5/ root@192.168.250.42:/usr/local
scp /etc/profile root@192.168.250.42:/etc
启动tomcat:
[root@tomcat3 ~]# 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.5/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
重新定义页面:
[root@tomcat3 ~]# cat /usr/local/apache-tomcat-11.0.5/webapps/ROOT/index.jsp
tomcat3 192.168.250.43
在浏览器中输入http://192.168.250.43:8080
web服务全部搭建完成!!!
3、搭建keepalived高可用与主热备架构:
配置nginx
在servera上面下载nginx、keepalived软件:
dnf install nginx keepalived -y
servera
在/etc/nginx/conf.d下创建以.conf结尾的文件并写入以下内容:
[root@servera ~]# cat /etc/nginx/conf.d/servera.conf
upstream tomcat1 {server 192.168.250.41:8080;server 192.168.250.42:8080;server 192.168.250.43:8080;
}
server {listen 80;server_name 192.168.250.30;access_log /var/log/nginx/master_access.log;error_log /var/log/nginx/master_error.log;location / {proxy_pass http://tomcat1;}
}
启动nginx并使用curl测试是否轮询访问:
[root@servera ~]# systemctl start nginx
[root@servera ~]# curl 192.168.250.30
tomcat1 192.168.250.41
[root@servera ~]# curl 192.168.250.30
tomcat2 192.168.250.42
[root@servera ~]# curl 192.168.250.30
tomcat3 192.168.250.43
测试成功!!!!
serverb
同上述servera一样先下载软件再编写配置文件最后测试:
[root@serverb ~]# dnf install nginx keepalived -y
[root@serverb ~]# cat /etc/nginx/conf.d/serverb.conf
upstream tomcat2 {server 192.168.250.41:8080;server 192.168.250.42:8080;server 192.168.250.43:8080;
}
server {listen 80;server_name 192.168.250.31;access_log /var/log/nginx/master_access.log;error_log /var/log/nginx/master_error.log;location / {proxy_pass http://tomcat2;}
}systemctl start nginx
[root@serverb ~]# curl 192.168.250.31
tomcat1 192.168.250.41
[root@serverb ~]# curl 192.168.250.31
tomcat2 192.168.250.42
[root@serverb ~]# curl 192.168.250.31
tomcat3 192.168.250.43
serverc
同上:
[root@serverb ~]# dnf install nginx keepalived -y
[root@serverb ~]# cat /etc/nginx/conf.d/serverc.conf
upstream tomcat3 {server 192.168.250.41:8080;server 192.168.250.42:8080;server 192.168.250.43:8080;
}
server {listen 80;server_name 192.168.250.32;access_log /var/log/nginx/master_access.log;error_log /var/log/nginx/master_error.log;location / {proxy_pass http://tomcat3;}
}systemctl start nginx
[root@serverb ~]# curl 192.168.250.32
tomcat1 192.168.250.41
[root@serverb ~]# curl 192.168.250.32
tomcat2 192.168.250.42
[root@serverb ~]# curl 192.168.250.32
tomcat3 192.168.250.43
配置keepalived高可用
servera
编写脚本实现高可用:
脚本文件放在/etc/keepalived下
[root@servera ~]# cat /etc/keepalived/check_nginx.sh
#!/bin/bash
counter=$(ps -C nginx --no-header| wc -l)
if [ $counter -eq 0 ]; thensystemctl start nginxif [ `ps -C nginx --no-header| wc -l` -eq 0 ]; thensystemctl stop keepalivedfi
fi
给脚本文件赋权:
chmod +x /etc/keepalived/check_nginx.sh
查看是否赋权成功:
打开keepalived的配置文件进行如下修改:
global_defs {router_id MASTER
}vrrp_script chk_nginx {script "/etc/keepalived/check_nginx.sh"interval 2
}vrrp_instance VI_1 {state MASTERinterface ens160virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.250.100}track_script {chk_nginx}}global_defs {router_id BACKUP
}vrrp_script chk_nginx {script "/etc/keepalived/check_nginx.sh"interval 2
}vrrp_instance VI_2 {state BACKUPinterface ens160virtual_router_id 52priority 80advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.250.101}track_script {chk_nginx}}global_defs {router_id BACKUP
}vrrp_script chk_nginx {script "/etc/keepalived/check_nginx.sh"interval 2
}vrrp_instance VI_3 {state BACKUPinterface ens160virtual_router_id 53priority 60advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.250.102}track_script {chk_nginx}}
启动keepalived服务查看是否出现漂移IP
systemctl start keepalived
[root@servera ~]# ip ad
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::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 1000link/ether 00:0c:29:ee:31:81 brd ff:ff:ff:ff:ff:ffaltname enp3s0inet 192.168.250.30/24 brd 192.168.250.255 scope global noprefixroute ens160valid_lft forever preferred_lft foreverinet 192.168.250.100/32 scope global ens160valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:feee:3181/64 scope link noprefixroute valid_lft forever preferred_lft forever
此时出现的inet 192.168.250.100/32 scope global ens160就是漂移ip
修改nginx配置文件,将server_nameIP改成漂移IP即192.168.250.100
[root@servera ~]# cat /etc/nginx/conf.d/servera.conf
upstream tomcat1 {server 192.168.250.41:8080;server 192.168.250.42:8080;server 192.168.250.43:8080;
}
server {listen 80;server_name 192.168.250.100;access_log /var/log/nginx/master_access.log;error_log /var/log/nginx/master_error.log;location / {proxy_pass http://tomcat1;}
}
重新启动nginx服务
serverb
配置同上(特别需要注意的是要注意keepalived配置文件中三个漂移ip的优先级)
将servera的脚本文件拷贝到serverb中
scp /etc/keepalived/check_nginx.sh root@192.168.250.31:/keepalived/
修改keepalived的配置文件:
[root@serverb ~]# cat /etc/keepalived/keepalived.conf
global_defs {router_id BACKUP
}vrrp_script chk_nginx {script "/etc/keepalived/check_nginx.sh"interval 2
}vrrp_instance VI_1 {state BACKUPinterface ens160virtual_router_id 51priority 60advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.250.100}track_script {chk_nginx}}global_defs {router_id MASTER
}vrrp_script chk_nginx {script "/etc/keepalived/check_nginx.sh"interval 2
}vrrp_instance VI_2 {state MASTERinterface ens160virtual_router_id 52priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.250.101}track_script {chk_nginx}}global_defs {router_id BACKUP
}vrrp_script chk_nginx {script "/etc/keepalived/check_nginx.sh"interval 2
}vrrp_instance VI_3 {state BACKUPinterface ens160virtual_router_id 53priority 80advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.250.102}track_script {chk_nginx}}
启动keepalived服务查看漂移ip
[root@serverb ~]# systemctl start keepalived
[root@serverb ~]# ip ad
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::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 1000link/ether 00:0c:29:c2:e1:65 brd ff:ff:ff:ff:ff:ffaltname enp3s0inet 192.168.250.31/24 brd 192.168.250.255 scope global noprefixroute ens160valid_lft forever preferred_lft foreverinet 192.168.250.101/32 scope global ens160valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fec2:e165/64 scope link noprefixroute valid_lft forever preferred_lft forever
此时出现的inet 192.168.250.101/32 scope global ens160就是漂移ip
修改nginx配置文件将server_name 改成漂移ip即192.168.250.101
[root@serverb ~]# cat /etc/nginx/conf.d/serverb.conf
upstream tomcat2 {server 192.168.250.41:8080;server 192.168.250.42:8080;server 192.168.250.43:8080;
}
server {listen 80;server_name 192.168.250.101;access_log /var/log/nginx/master_access.log;error_log /var/log/nginx/master_error.log;location / {proxy_pass http://tomcat2;}
}
再重启nginx服务
serverc
同上配置:
将脚本文件拷贝到serverc上,再修改keepalived配置文件,再启动keepalived服务查看漂移ip最后修改nginx服务的配置文件中的server_name修改成漂移文件代码如下:
scp /etc/keepalived/check_nginx.sh root@192.168.250.32:/etc/keepalived/[root@serverc ~]# cat /etc/keepalived/keepalived.conf
global_defs {router_id BACKUP
}vrrp_script chk_nginx {script "/etc/keepalived/check_nginx.sh"interval 2
}vrrp_instance VI_1 {state BACKUPinterface ens160virtual_router_id 51priority 80advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.250.100}track_script {chk_nginx}}global_defs {router_id BACKUP
}vrrp_script chk_nginx {script "/etc/keepalived/check_nginx.sh"interval 2
}vrrp_instance VI_2 {state BACKUPinterface ens160virtual_router_id 52priority 60advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.250.101}track_script {chk_nginx}}global_defs {router_id MASTER
}vrrp_script chk_nginx {script "/etc/keepalived/check_nginx.sh"interval 2
}vrrp_instance VI_3 {state MASTERinterface ens160virtual_router_id 53priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.250.102}track_script {chk_nginx}}
[root@serverc ~]# systemctl restart keepalived.service
[root@serverc ~]# ip ad
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::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 1000link/ether 00:0c:29:50:ff:3f brd ff:ff:ff:ff:ff:ffaltname enp3s0inet 192.168.250.32/24 brd 192.168.250.255 scope global noprefixroute ens160valid_lft forever preferred_lft foreverinet 192.168.250.102/32 scope global ens160valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe50:ff3f/64 scope link noprefixroute valid_lft forever preferred_lft forever
[root@serverc ~]# cat /etc/nginx/conf.d/serverc.conf
upstream tomcat3 {server 192.168.250.41:8080;server 192.168.250.42:8080;server 192.168.250.43:8080;
}
server {listen 80;server_name 192.168.250.102;access_log /var/log/nginx/master_access.log;error_log /var/log/nginx/master_error.log;location / {proxy_pass http://tomcat3;}
}
4、配置DNS轮询
在dns主机上下载nginx
dnf install nginx -y
写入配置文件:
[root@dns ~]# cat /etc/nginx/conf.d/dns.conf
upstream web {server 192.168.250.100;server 192.168.250.101;server 192.168.250.102;
}
server {listen 80;server_name 192.168.250.11;access_log /var/log/nginx/access_dns.log;error_log /var/log/nginx/error_dns.log;location / {proxy_pass http://web;}
}
启动nginx服务
systemctl start nginx
5、测试:
(1)测试高可用
将servera、serverb、serverc上的nginx服务关闭再查看nginx的进程是否存在:
servera
[root@servera ~]# systemctl stop nginx
[root@servera ~]# ps -ef | grep nginx
root 5650 1 0 15:20 ? 00:00:00 nginx: master process /usr/sbin/nginx
nginx 5651 5650 0 15:20 ? 00:00:00 nginx: worker process
nginx 5652 5650 0 15:20 ? 00:00:00 nginx: worker process
nginx 5653 5650 0 15:20 ? 00:00:00 nginx: worker process
nginx 5654 5650 0 15:20 ? 00:00:00 nginx: worker process
root 5675 1509 0 15:20 pts/0 00:00:00 grep --color=auto nginx
serverb
[root@serverb ~]# systemctl stop nginx
[root@serverb ~]# ps -ef | grep nginx
root 5592 1 0 15:21 ? 00:00:00 nginx: master process /usr/sbin/nginx
nginx 5593 5592 0 15:21 ? 00:00:00 nginx: worker process
nginx 5594 5592 0 15:21 ? 00:00:00 nginx: worker process
nginx 5595 5592 0 15:21 ? 00:00:00 nginx: worker process
nginx 5596 5592 0 15:21 ? 00:00:00 nginx: worker process
root 5605 1472 0 15:21 pts/0 00:00:00 grep --color=auto nginx
serverc
[root@serverc ~]# systemctl stop nginx
[root@serverc ~]# ps -ef | grep nginx
root 5530 1 0 15:22 ? 00:00:00 nginx: master process /usr/sbin/nginx
nginx 5531 5530 0 15:22 ? 00:00:00 nginx: worker process
nginx 5532 5530 0 15:22 ? 00:00:00 nginx: worker process
nginx 5533 5530 0 15:22 ? 00:00:00 nginx: worker process
nginx 5534 5530 0 15:22 ? 00:00:00 nginx: worker process
root 5544 1474 0 15:22 pts/0 00:00:00 grep --color=auto nginx
测试高可用成功!!!
(2)测试DNS轮询
在client主机上使用curl命令分别测试192.168.250.100、192.168.250.101、192.168.250.102
[root@client ~]# curl 192.168.250.100
tomcat2 192.168.250.42[root@client ~]# curl 192.168.250.100
tomcat3 192.168.250.43[root@client ~]# curl 192.168.250.100
tomcat1 192.168.250.41
[root@client ~]# curl 192.168.250.101
tomcat1 192.168.250.41
[root@client ~]# curl 192.168.250.101
tomcat2 192.168.250.42[root@client ~]# curl 192.168.250.101
tomcat3 192.168.250.43[root@client ~]# curl 192.168.250.102
tomcat1 192.168.250.41
[root@client ~]# curl 192.168.250.102
tomcat2 192.168.250.42[root@client ~]# curl 192.168.250.102
tomcat3 192.168.250.43
测试成功!!!
(3)测试三主热备架构
将servera上的keepalived服务关闭,再去客户机上使用curl命令测试:
[root@servera ~]# systemctl stop keepalived.service
此时虚拟ip消失,出现在serverc主机上:
[root@servera ~]# ip ad
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::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 1000link/ether 00:0c:29:ee:31:81 brd ff:ff:ff:ff:ff:ffaltname enp3s0inet 192.168.250.30/24 brd 192.168.250.255 scope global noprefixroute ens160valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:feee:3181/64 scope link noprefixroute valid_lft forever preferred_lft forever
[root@serverc ~]# ip ad
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::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 1000link/ether 00:0c:29:50:ff:3f brd ff:ff:ff:ff:ff:ffaltname enp3s0inet 192.168.250.32/24 brd 192.168.250.255 scope global noprefixroute ens160valid_lft forever preferred_lft foreverinet 192.168.250.102/32 scope global ens160valid_lft forever preferred_lft foreverinet 192.168.250.100/32 scope global ens160valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe50:ff3f/64 scope link noprefixroute valid_lft forever preferred_lft forever
使用curl测试:
[root@client ~]# curl 192.168.250.100
tomcat1 192.168.250.41
[root@client ~]# curl 192.168.250.100
tomcat2 192.168.250.42[root@client ~]# curl 192.168.250.100
tomcat3 192.168.250.43
同理将serverb上的keepalived服务关闭再查看虚拟ip
[root@serverb ~]# systemctl stop keepalived.service
[root@serverb ~]# ip ad
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::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 1000link/ether 00:0c:29:c2:e1:65 brd ff:ff:ff:ff:ff:ffaltname enp3s0inet 192.168.250.31/24 brd 192.168.250.255 scope global noprefixroute ens160valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fec2:e165/64 scope link noprefixroute valid_lft forever preferred_lft forever
此时的虚拟ip全部在serverc上:
[root@serverc ~]# ip ad
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::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 1000link/ether 00:0c:29:50:ff:3f brd ff:ff:ff:ff:ff:ffaltname enp3s0inet 192.168.250.32/24 brd 192.168.250.255 scope global noprefixroute ens160valid_lft forever preferred_lft foreverinet 192.168.250.102/32 scope global ens160valid_lft forever preferred_lft foreverinet 192.168.250.100/32 scope global ens160valid_lft forever preferred_lft foreverinet 192.168.250.101/32 scope global ens160valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe50:ff3f/64 scope link noprefixroute valid_lft forever preferred_lft forever
再在客户端上测试DNS轮询查看是否成功:
[root@client ~]# curl 192.168.250.100
tomcat1 192.168.250.41
[root@client ~]# curl 192.168.250.100
tomcat2 192.168.250.42[root@client ~]# curl 192.168.250.100
tomcat3 192.168.250.43[root@client ~]# curl 192.168.250.101
tomcat1 192.168.250.41
[root@client ~]# curl 192.168.250.101
tomcat2 192.168.250.42[root@client ~]# curl 192.168.250.101
tomcat3 192.168.250.43[root@client ~]# curl 192.168.250.102
tomcat1 192.168.250.41
[root@client ~]# curl 192.168.250.102
tomcat2 192.168.250.42[root@client ~]# curl 192.168.250.102
tomcat3 192.168.250.43
测试成功!!!!三主热备架构高可用搭建完成!!!
6、总结
在本次实验中,最需要注意的就是keepalived的配置文件,因为有三个虚拟ip所以优先级,一定要按顺序写,一共是三组,如果逻辑思维不强的同学可以现在记事本中分好组再写入配置文件,以免出现keepalived配置文件出错导致keepalived服务启动失败的错误。另外还要注意高可用的脚本,语法正确否则高可用会失败。