keepalived高可用三主热备架构(keepalived+nginx+tomcat)

发布于:2025-03-27 ⋅ 阅读:(92) ⋅ 点赞:(0)

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 ]; then
	systemctl start nginx
	if [ `ps -C nginx --no-header| wc -l` -eq 0 ]; then
		systemctl stop keepalived
	fi
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 MASTER
    interface ens160
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_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 BACKUP
    interface ens160
    virtual_router_id 52
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_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 BACKUP
    interface ens160
    virtual_router_id 53
    priority 60
    advert_int 1
    authentication {
        auth_type PASS
        auth_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 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:ee:31:81 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 192.168.250.30/24 brd 192.168.250.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet 192.168.250.100/32 scope global ens160
       valid_lft forever preferred_lft forever
    inet6 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 BACKUP
    interface ens160
    virtual_router_id 51
    priority 60
    advert_int 1
    authentication {
        auth_type PASS
        auth_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 MASTER
    interface ens160
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_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 BACKUP
    interface ens160
    virtual_router_id 53
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_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 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:c2:e1:65 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 192.168.250.31/24 brd 192.168.250.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet 192.168.250.101/32 scope global ens160
       valid_lft forever preferred_lft forever
    inet6 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 BACKUP
    interface ens160
    virtual_router_id 51
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_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 BACKUP
    interface ens160
    virtual_router_id 52
    priority 60
    advert_int 1
    authentication {
        auth_type PASS
        auth_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 MASTER
    interface ens160
    virtual_router_id 53
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_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 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:50:ff:3f brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 192.168.250.32/24 brd 192.168.250.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet 192.168.250.102/32 scope global ens160
       valid_lft forever preferred_lft forever
    inet6 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 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:ee:31:81 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 192.168.250.30/24 brd 192.168.250.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet6 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 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:50:ff:3f brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 192.168.250.32/24 brd 192.168.250.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet 192.168.250.102/32 scope global ens160
       valid_lft forever preferred_lft forever
    inet 192.168.250.100/32 scope global ens160
       valid_lft forever preferred_lft forever
    inet6 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 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:c2:e1:65 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 192.168.250.31/24 brd 192.168.250.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet6 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 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:50:ff:3f brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 192.168.250.32/24 brd 192.168.250.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet 192.168.250.102/32 scope global ens160
       valid_lft forever preferred_lft forever
    inet 192.168.250.100/32 scope global ens160
       valid_lft forever preferred_lft forever
    inet 192.168.250.101/32 scope global ens160
       valid_lft forever preferred_lft forever
    inet6 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服务启动失败的错误。另外还要注意高可用的脚本,语法正确否则高可用会失败。


网站公告

今日签到

点亮在社区的每一天
去签到