引言:内网网络与外网网络之间能够进行通信,无非要依赖于中间的路由设备进行路由转发,从而进行不同网段内互相通信,那么我们都知道什么东西都有"报费"的那一时刻,假如工作的路由设备“罢工”,那就意味着整个网络都不能通信,假如是在一家公司中出现这种情况,可想而知后果是很严重的;由此我们可以扩展自己的想法,总有一种方法会解决这种问题的出现,对了,我们可以在原来的基础上再添加一个路由做成路由冗余,在路由上都配置成动态ARP,当用户想要连向互联网时,可以选择不同的路由设备接口,但是这种方法还是不够完善,还会遇到其他的问题;比如:不同路由设备上的IP地址是不同的,而在客户端上配置的是客户ARP,也许会面临每次用户想要上互联网连不上互联网都要向联通或电信公司打电话,这样对双方都不是有利的事情。只好使出了杀手锏:在路由设备上配置VRRP协议,这样基本上就解决了路由设备宕机的问题。

一、阐述VRRP

VRRP(Virtual Routing Redundent Protocol):虚拟路由冗余协议,将多台物理设备组合成一台虚拟设备,可以称为一个备份组设备,会根据设定路由设备优先级,实现在物理设备的地址飘移,主要目的是实现指定路由网关,并为路由网关提供冗余功能

VRRP的工作机制:把多台物理设备组合成一台虚拟设备,只需要在虚拟设备上配置一个虚拟IP地址,用户每次访问互联网只需要通过这个虚拟IP地址,而这个虚拟设备背后的物理设备会通过物理设备的优先级高低来进行地址的漂移,物理设备之间是通过通告机制来选择使用哪个物理设备进行用户连接通信;

备份组中的路由器的认证方式

为了防止非法用户构造报文攻击备份组,VRRP通过在VRRP报文中增加认证字的方式,验证接收到的VRRP报文。VRRP提供了两种认证方式:

1、简单字符认证。发送VRRP报文的路由器将认证字填入到VRRP报文中,而收到VRRP报文的路由器会将收到的VRRP报文中的认证字和本地配置的认证字进行比较。如果认证字相同,则认为接收到的报文

是真实、合法的VRRP报文;否则认为接收到的报文是个非法报文。

2、MD5认证。发送VRRP报文的路由器利用认证字和MD5算法对VRRP报文进行摘要运算,运算结果保存在Authentication Header中。收到VRRP报文的路由器会利用认证字和MD5算法进行同样的运算,并将运算结果与认证字的内容进行比较。如果相同,则认为接收到的报文是真实、合法的VRRP报文;否则认为接收到的报文是一个非法报文。

在一个安全的网络中,用户也可以不设置认证方式。

VRRP工作过程

1、路由器使能VRRP功能后,会根据优先级确定自己在备份组中的角色。优先级高的路由器成为master路由器,优先级低的成为backup路由器。master路由器定期发送VRRP通告报文,通知备份组内的其他路由器自己工作正常;backup路由器则启动定时器等待通告报文的到来。

2、在抢占方式下,当backup路由器接收到VRRP通告报文后,会将自己的优先级与通告报文中的优先级进行比较。如果大于通告报文中的优先级,则成为master路由器;否则将保持backup状态。

3、在非抢占方式下,只要master路由器没有出现故障,备份组中的路由器始终保持master或backup状态,backup路由器即使随后被配置了更高的优先级也不会成为master路由器。

4、如果backup路由器的定时器超时后仍未收到master路由器发送来的VRRP通告报文,则认为master路由器已经无法正常工作,此时backup路由器会认为自己是master路由器,并对外发送VRRP通告报文。备份组内的路由器根据优先级选举出master路由器,承担报文的转发功能。

二、了解keepalived

keepalived最初实现主要目的就是为LVS的ipvs提供高可用功能

主要提供的功能:

IP:把IP地址实现飘移,在keepalived内部模拟VRRP协议实现,即keepalived以VRRP协议进行工作

LVS:在地址漂移的路由设备上动态生成一份ipvs规则,只需要在配置文件中定义好即可

health check:为后台工作的realserver实现健康检查

keepalived另一功能:调用web脚本实现web集群服务,只能决定优先级高低,还不能完全实现web集群服务

vrrp_script "killall -0 httpd"

###探测是否依赖于httpd服务进程,这只决定了优先级,还不能完全是否有httpd服务,还需要借助于通知机制

通知机制:

notify-master "script"

###当节点转为主设备同时要执行定义好的脚本,根据自己是否已经启动了web服务,来重新启动web服务

notify-backup "script"

##当节点转为备份设备时,如果原来有web服务,要把原来的web服务关闭掉

###注意:这里使用的脚本还需要自己手动编写

废话不多说了,直接进入到我们的配置主题吧!


配置安装Keepalived作为web高可用集群服务拓扑图keepalived + web高可用集群实现主从模型、双主模型配置_keepalived

实验环境:

虚拟主机规划:开启两台虚拟机(HA1、HA2)作为web高可用集群服务,另两台虚拟机(RA1、RA2)作为工作在后端的realserver,realserver使用的是DR模型

IP地址规划:

HA1:172.16.52.2

HA2:172.16.52.3

RA1:172.16.52.4

RA2:172.16.52.

1 时间同步(在HA1、HA2上配置)

手动修改时间中间可能还会出现误差,可以使用NTP协议的ntpdate命令来根据时间服务器进行修改时间,默认时间服务器是开启的,为了不影响实验效果需要手动关闭

[root@lwj ~]#service ntp stop
[root@lwj ~]#ntpdate 172.16.0.1
16 May 12:01:39 ntpdate[11072]: step time server 172.16.0.1 offset 40279.156033 sec
//表示同步时间已经成功
[root@luo ~]#service ntp stop
[root@luo ~]#ntpdate 172.16.0.1
16 May 12:04:32 ntpdate[9955]: adjust time server 172.16.0.1 offset 0.002073 sec
//表示同步时间已经成功

2 修改节点名称,要与”uname –n”执行的结果保持一致(在HA1HA2上配置)

[root@lwj ~]#vim /etc/hosts
172.16.52.2     node1.magedu.com   node1
172.16.52.3     node2.magedu.com   node2
保存退出
[root@lwj ~]#hostname node1.magedu.com
[root@lwj ~]#hostname
node1.magedu.com
[root@luo ~]#hostname node2.magedu.com
[root@luo ~]#hostname
node2.magedu.com
修改之后的主机名不会立即生效,可以重新打开一个虚拟终端即可

3 实现ssh互信通信,在两个节点上都要做相同的操作

####node1
[root@node1~]#ssh-keygen –t rsa –P ‘’ –f ~/.ssh/id_rsa
[root@node1~]#ssh-copy-id –i .ssh/id_rsa.pub root@172.16.52.3   //在执行此命令之后,会询问是否与指定的位置建立连接,选择“yes”,之后再输入密码即可
[root@node1~]#ssh 172.16.52.3 ‘ifconfig’
eth0      Link encap:Ethernet  HWaddr 00:0C:29:D5:B1:81
inet addr:172.16.52.3  Bcast:172.16.255.255  Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:28753 errors:0 dropped:0 overruns:0 frame:0
TX packets:1426 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:5177449 (4.9 MiB)  TX bytes:141085 (137.7 KiB)
Interrupt:67 Base address:0x2000
######node2
[root@node2~]#ssh-keygen –t rsa –P ‘’ –f ~/.ssh/id_rsa
[root@node2~]#ssh-copy-id –i .ssh/id_rsa.pub root@172.16.52.2   //在执行此命令之后,会询问是否与指定的位置建立连接,选择“yes”,之后再输入密码即可
[root@node2~]#ssh 172.16.52.2 ‘ifconfig’
eth0      Link encap:Ethernet  HWaddr 00:0C:29:D5:B1:81
inet addr:172.16.52.2  Bcast:172.16.255.255  Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:28753 errors:0 dropped:0 overruns:0 frame:0
TX packets:1426 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:5177449 (4.9 MiB)  TX bytes:141085 (137.7 KiB)
Interrupt:67 Base address:0x2000

4 在两个节点上分别下载安装keepalived软件包

[root@node1~]#lftp 172.16.0.1
lftp 172.16.0.1> cd pub/Sources/keepalived/
lftp 172.16.0.1> get keepalived-1.2.7-5.el5.i386.rpm
//我这里使用的是源码编译好的rpm包,如果使用源码安装时,还要指定两个选项:--enable-vrrp    ##一定要启动vrrp功能,默认是启用的
--disable-snmp   ##默认是支持snmp协议,禁用snmp协议
[root@node1~]#yum –y localinstall –nogpgcheck keepalived-1.2.7-5.el5.i386.rpm
// keepalived-1.2.7-5.el5.i386.rpm依赖于lm_sensors(探测器软件包),这里使用yum方式安装
[root@node1~]#scp keepalived-1.2.7-5.el5.i386.rpm node2:/root/
//把keepalived-1.2.7-5.el5.i386.rpm复制到节点2中,与节点1执行相同的操作

5 修改realserver的主机名称

[root@ll ~]#vim /etc/hosts
172.16.52.4     RS1.magedu.com     RS1
[root@ll ~]#hostname RS1.magedu.com
[root@ll ~]#hostname
RS1.magedu.com
[root@lj ~]#vim /etc/hosts
172.16.52.6     RS2.magedu.com     RS2
[root@lj ~]#hostname RS2.magedu.com
[root@lj ~]#hostname
RS2.magedu.com
//要想立即生效,需要重新连接虚拟终端即可

6 在RS1和RS2上安装web服务并为其添加页面

[root@RS1 ~]#yum install httpd –y   //我使用的是yum源安装的web服务
[root@RS1 ~]#vim /var/www/html/index.html
RS1.magedu.com
//保存退出
[root@RS2 ~]#yum install httpd –y
[root@RS2 ~]#vim /var/www/html/index.html
RS2.magedu.com
//保存退出

7 使用脚本方式关闭RS1和RS2的arp_ignore和arp_announce功能

[root@RS1 ~]# vim startrs.sh
#!/bin/bash
#
# Script to start LVS DR real server.
# description: LVS DR real server
#
.  /etc/rc.d/init.d/functions
VIP=172.16.52.1
host=`/bin/hostname`
case "$1" in
start)
# Start LVS-DR real server on this machine.
/sbin/ifconfig lo down
/sbin/ifconfig lo up
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo:0
;;
stop)
# Stop LVS-DR real server loopback device(s).
/sbin/ifconfig lo:0 down
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
;;
status)
# Status of LVS-DR real server.
islothere=`/sbin/ifconfig lo:0 | grep $VIP`
isrothere=`netstat -rn | grep "lo:0" | grep $VIP`
if [ ! "$islothere" -o ! "isrothere" ];then
# Either the route or the lo:0 device
# not found.
echo "LVS-DR real server Stopped."
else
echo "LVS-DR real server Running."
fi
;;
*)
# Invalid entry.
echo "$0: Usage: $0 {start|status|stop}"
exit 1
;;
esac
//保存退出
[root@RS1 ~]#chmod +x startrs.sh
[root@RS1 ~]#./ startrs.sh start

keepalived + web高可用集群实现主从模型、双主模型配置_web高可用集群实现_02

[root@RS1 ~]#scp startrs.sh RS2:/root/
[root@RS2 ~]#./ startrs.sh start

keepalived + web高可用集群实现主从模型、双主模型配置_keepalived_03

8 修改配置文件

[root@node1 ~]#vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {     ##当主、备份设备发生改变时,需要通过邮件通知管理员
root@localhost    ##指定邮件发给谁,为了测试方便,设置收件人和发件人都为本地的root用户
}
notification_email_from root@localhost    ##指定发件人地址
smtp_server 127.0.0.1     ##指定邮箱服务器地址,这里使用本地地址
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {    ##定义一个虚拟路由组实例
state MASTER    ##在初始化状态下定义为主设备
interface eth0    ##在哪个接口上配置选举地址,默认是使用ipaddr配置
virtual_router_id 60    ##定义虚拟路由组的id号
priority 101     ##定义优先级
advert_int 1    ##通告心跳信息时间为1秒
authentication {
auth_type PASS   ##使用PASS简单认证
auth_pass password     ##pass使用随机字符串
}
virtual_ipaddress {   ##针对eth0接口设置虚拟地址(VIP),有几个就设置几个
172.16.52.1
virtual_server 172.16.52.1 80 {   ##定义LVS的集群地址
delay_loop 6    ##获取服务需要等待的时间
lb_algo wlc    ##指定负载均衡调度方法
lb_kind DR     ##指定负载均衡的类型
nat_mask 255.255.0.0    ##指定VIP的子网掩码
persistence_timeout 50     ##定义持久连接的时间
protocol TCP
real_server 172.16.52.4 80 {   ##定义realserver的IP地址和端口
weight 1
url {
path /
status_code 200     ##定义realserver的状态码,如果检测正常就显示为200
}
connect_timeout 2   ##指定多长时间探测一次,如果探测不到就说明服务器不健康了
nb_get_retry 3    ##尝试多少次再次探测
delay_before_retry 1   ##定义尝试之前需要延迟多长时间再次尝试
}
}
virtual_server 172.16.52.1 80 {
delay_loop 6
lb_algo wlc
lb_kind DR
nat_mask 255.255.0.0
persistence_timeout 50
protocol TCP
real_server 172.16.52.6 80 {
weight 1
url {
path /
status_code 200
}
connect_timeout 2
nb_get_retry 3
delay_before_retry 1
}
}
保存退出
[root@node1 ~]#scp /etc/keepalived/keepalived.conf node2:/etc/keepalived/
在node2上还需要略略修改配置文件部分内容:
state BACKUP      ##设置node2为备份设备
priority 100      ##要比node1的优先级低,具体设置为多少,可以自定义修改

9 启动keepalived服务并查看node1上是否添加VIP地址成功

[root@node1 ~]#service keepalived start
[root@node2 ~]#service keepalived start

keepalived + web高可用集群实现主从模型、双主模型配置_vrrp_04

10 安装ipvsadm并查看规则

[root@node1 ~]#yum install ipvsadm –y

keepalived + web高可用集群实现主从模型、双主模型配置_web高可用集群实现_05

[root@node2 ~]#yum install ipvsadm –y

keepalived + web高可用集群实现主从模型、双主模型配置_web高可用集群实现_06

11 访问VIP地址页面

keepalived + web高可用集群实现主从模型、双主模型配置_vrrp_07

keepalived + web高可用集群实现主从模型、双主模型配置_keepalived_08


结合脚本实现配置web高可用集群服务主从模型拓扑图

keepalived + web高可用集群实现主从模型、双主模型配置_vrrp_09

实验环境:

虚拟主机规划:需要node1和node2虚拟主机进行操作,此时另两台realserver虚拟主机就使用不到了

IP地址规划:

node1:172.16.52.2

node2:172.16.52.3

1 关闭keepalived服务

[root@node1 ~]#service keepalived stop
[root@node2 ~]#service keepalived stop

2 安装web服务,并为节点提供页面

[root@node1 ~]#yum –y install httpd
[root@node1 ~]#vim /var/www/html/index.html
<h1>node1</h1>
[root@node1 ~]#service httpd start
[root@node2 ~]#yum –y install httpd
[root@node2 ~]#vim /var/www/html/index.html
<h1>node2</h1>
[root@node2 ~]#service httpd start

3 访问节点的测试页面

keepalived + web高可用集群实现主从模型、双主模型配置_keepalived_10

keepalived + web高可用集群实现主从模型、双主模型配置_web高可用集群实现_11

4 启动keepalived服务

[root@node1 ~]#service keepalived start
[root@node1 ~]#mv /etc/keepalived/keepalived.conf.haproxy_example  keepalived.conf
//这是为haproxy_example提供的一个案例,直接复制作为http服务的配置文件
[root@node1 ~]#vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {      ##当主、备份设备发生改变时,需要通过邮件通知管理员
root@localhost     ##指定邮件发给谁
}
notification_email_from root@localhost       #指定发件人地址
smtp_connect_timeout 3
smtp_server 127.0.0.1
router_id LVS_DEVEL
}
vrrp_script chk_httpd {
script "killall -0 httpd"
interval 2
# check every 2 seconds
weight -2
# if failed, decrease 2 of the priority
fall 2
# require 2 failures for failures
rise 1
# require 1 sucesses for ok
}
vrrp_script chk_schedown {
script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
interval 2
weight -2
}
vrrp_instance VI_1 {
interface eth0
# interface for inside_network, bound by vrrp
state MASTER     ##设置为主设备
# Initial state, MASTER|BACKUP
# As soon as the other machine(s) come up,
# an election will be held and the machine
# with the highest "priority" will become MASTER.
# So the entry here doesn't matter a whole lot.
priority 101     ##设置主设备的优先级
# for electing MASTER, highest priority wins.
# to be MASTER, make 50 more than other machines.
virtual_router_id 60    ##设置虚拟路由组的组ID
# arbitary unique number 0..255
# used to differentiate multiple instances of vrrpd
# running on the same NIC (and hence same socket).
garp_master_delay 1
authentication {
auth_type PASS
auth_pass password
}
track_interface {
eth0
}
# optional, monitor these as well.
# go to FAULT state if any of these go down.
virtual_ipaddress {
172.16.52.1/16 dev eth0 label eth0:0
}
#addresses add|del on change to MASTER, to BACKUP.
#With the same entries on other machines,
#the opposite transition will be occuring.
#<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
track_script {     ##每隔一段时间自动检测上面的两个脚本,查看服务是否正常运行
chk_httpd
chk_schedown
}
notify_master "/etc/keepalived/notify.sh master"
##当节点转变为主节点时,就执行这个脚本并传递master参数
notify_backup "/etc/keepalived/notify.sh backup"
##当节点转变为备份节点时,就执行这个脚本并传递backup参数
notify_fault "/etc/keepalived/notify.sh fault"
##当节点既没有切换成主节点也没有切换成备份节点,就执行这个脚本并传递fault参数,执行的脚本都是同一个脚本
}
保存退出
[root@node1 ~]#scp /etc/keepalived/keepalived.conf node2:/etc/keepalived/
传递到node2中还需要修改一点内容:
state BACKUP    ##设置成备份设备
priority 100     ##把备份设备的优先级改为100,要比主设备的优先级低

5 为主、备份设备切换提供脚本

[root@node1 ~]#vim /etc/keepalived/notify.sh
#!/bin/bash
# Author: MageEdu <linuxedu@foxmail.com>
# description: An example of notify script
#
ifalias=${2:-eth0:0}
interface=$(echo $ifalias | awk -F: '{print $1}')
vip=$(ip addr show $interface | grep $ifalias | awk '{print $2}')
#contact='linuxedu@foxmail.com'
contact='root@localhost'
workspace=$(dirname $0)
notify() {
subject="$ip change to $1"
body="$ip change to $1 $(date '+%F %H:%M:%S')"
echo $body | mail -s "$1 transition" $contact
}
case "$1" in
master)
notify master
exit 0
;;
backup)
notify backup
/etc/rc.d/init.d/haproxy restart
exit 0
;;
fault)
notify fault
exit 0
;;
*)
echo 'Usage: $(basename $0) {master|backup|fault}'
exit 1
;;
esac
保存退出
[root@node1 ~]#scp /etc/keepalived/notify.sh node2:/etc/keepalived/
[root@node1 ~]#service keepalived restart
[root@node2 ~]#service keepalived restart

6 检测主节点上是否生成VIP地址

keepalived + web高可用集群实现主从模型、双主模型配置_keepalived_12

7 访问VIP地址的测试页面

keepalived + web高可用集群实现主从模型、双主模型配置_vrrp_13

8 手动切换主节点

[root@node1 ~]#cd /etc/keepalived
[root@node1 keepalived]#touch down
##根据配置文件的定义可以手动创建一个down文件,相当于手动关闭node1,此时node1的优先级就会降低,VIP地址就会切换到node2上

keepalived + web高可用集群实现主从模型、双主模型配置_web高可用集群实现_14

keepalived + web高可用集群实现主从模型、双主模型配置_web高可用集群实现_15

9 再次访问VIP地址的页面内容

keepalived + web高可用集群实现主从模型、双主模型配置_vrrp_16

实现双主模型

1 修改配置文件(在配置文件/etc/keepalived/keepalived.conf后面添加以下内容)

vrrp_instance VI_2 {    ##定义第二个虚拟路由组
interface eth0
state BACKUP  # BACKUP for slave routers    ##由于第一个虚拟组的node1被定义成主节点,所以第二个虚拟组node1要定义成备份节点
priority 100  # 100 for BACKUP    ##优先级要比第二个虚拟组的node2优先级低
virtual_router_id 52    ##设置虚拟路由组ID,要与第一个虚拟组ID设置不同
garp_master_delay 1
authentication {
auth_type PASS
auth_pass password
}
track_interface {
eth0
}
virtual_ipaddress {
172.16.52.10/16 dev eth0 label eth0:1
##设置第二个虚拟组的VIP地址,并定义在别名eth0:1上
}
track_script {
chk_httpd
chk_schedown
}
notify_master "/etc/keepalived/notify.sh master eth0:1"
notify_backup "/etc/keepalived/notify.sh backup eth0:1"
notify_fault "/etc/keepalived/notify.sh fault eth0:1"
}
//保存退出

在node2的配置文件的后面添加以下内容:

vrrp_instance VI_2 {    ##定义第二个虚拟路由组
interface eth0
state MASTER  # BACKUP for slave routers    ##由于第一个虚拟组的node1被定义成主节点,所以第二个虚拟组node1要定义成备份节点
priority 101  # 100 for BACKUP    ##优先级要比第二个虚拟组的node2优先级低
virtual_router_id 52    ##设置虚拟路由组ID,要与第一个虚拟组ID设置不同
garp_master_delay 1
authentication {
auth_type PASS
auth_pass password
}
track_interface {
eth0
}
virtual_ipaddress {
172.16.52.10/16 dev eth0 label eth0:1
##设置第二个虚拟组的VIP地址,并定义在别名eth0:1上
}
track_script {
chk_httpd
chk_schedown
}
notify_master "/etc/keepalived/notify.sh master eth0:1"
notify_backup "/etc/keepalived/notify.sh backup eth0:1"
notify_fault "/etc/keepalived/notify.sh fault eth0:1"
}
//保存退出

2 查看第二个虚拟组的主节点切换情况

keepalived + web高可用集群实现主从模型、双主模型配置_keepalived_17

3 访问第二个虚拟组的主节点切换页面

keepalived + web高可用集群实现主从模型、双主模型配置_keepalived_18

4 手动切换第一个虚拟组主节点

[root@node1 ~]#cd /etc/keepalived/
[root@node1 keepalived]#touch down
##模拟第一个虚拟组的主节点被down掉,再次查看主节点都在node2显示

keepalived + web高可用集群实现主从模型、双主模型配置_keepalived_19

keepalived + web高可用集群实现主从模型、双主模型配置_vrrp_20

5 测试主节点切换页面

keepalived + web高可用集群实现主从模型、双主模型配置_web高可用集群实现_21

keepalived + web高可用集群实现主从模型、双主模型配置_web高可用集群实现_22

6 从node2上把第一个虚拟组主节点手动切换回node1

[root@node2 ~]#cd /etc/keepalived/
[root@node2 keepalived]#touch down

keepalived + web高可用集群实现主从模型、双主模型配置_vrrp_23

keepalived + web高可用集群实现主从模型、双主模型配置_vrrp_24

7 测试节点切换页面

keepalived + web高可用集群实现主从模型、双主模型配置_vrrp_25

keepalived + web高可用集群实现主从模型、双主模型配置_web高可用集群实现_26

好了,到这里keepalived配置、组建web高可用集群服务的一主一从模型及双主模型演示就告一段落了,在讲述演示过程可能有言语表达不太清晰的地方,还请大家多多见谅,也希望大家多多提意见,我最衷心的想法就是能和大家共同进步。