掌握高可用核心:Keepalived 铸就坚不可摧的集群防线

目录

一.初识keepalived

二.VRRP工作模式

1.三种状态

2.选举机制

[三.Keepalived 架构](#三.Keepalived 架构)

[四. Keepalived环境准备](#四. Keepalived环境准备)

[五.KeepAlived 配置说明](#五.KeepAlived 配置说明)

1.配置文件组成部分

2.配置语法说明:全局配置

3.配置虚拟路由器

4.启用keepalived日志功能

5.实现独立子配置文件

六.抢占模式和非抢占模式

[1.非抢占模式 nopreempt](#1.非抢占模式 nopreempt)

[2.抢占延迟模式 preempt_delay](#2.抢占延迟模式 preempt_delay)

七.IP单播配置

[八.Keepalived 通知脚本配置](#八.Keepalived 通知脚本配置)

1.通知脚本类型

2.创建通知脚本

3.邮件配置

[4.实现 Keepalived 状态切换的通知脚本](#4.实现 Keepalived 状态切换的通知脚本)

5.同步邮箱的时间

[九.实现 master/master 的 Keepalived 双主架构](#九.实现 master/master 的 Keepalived 双主架构)

十.实现IPVS的高可用性

1.报错方法

[十一.实现其它应用的高可用性 VRRP Script](#十一.实现其它应用的高可用性 VRRP Script)

1.利用脚本实现主从角色切换

2.实现HAProxy高可用


一.初识keepalived

Keepalived是Linux下一个轻量级别的高可用解决方案,可以实现服务或者网络的高可用。主要是通过虚拟路由冗余来实现高可用,虽然它没有HeartBeat那么强大,但部署和使用非常简单,所有配置只需要一个配置文件即可完成。 Keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,如果某个服务器节点出现故障,Keepalived将检测到后自动将节点从集群系统中剔除,而在故障节点恢复正常后,Keepalived又可以自动将此节点重新加入集群中,这些工作自动完成,不需要人工干预,需要人工完成的只是修复出现故障的节点。

后来又加入了VRRP的功能,VRRP(VritrualRouterRedundancyProtocol,虚拟路由冗余协议)出现的目的是解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断稳定运行,因此Keepalvied一方面具有服务器状态检测和故障隔离功能,另外一方面也有高可用集群功能 健康检查和失败切换是keepalived的两大核心功能 健康检查,就是采用tcp三次握手,icmp请求,http请求,udp echo请求等方式对负载均衡器后面的实际的服务器(通常是承载真实业务的服务器)进行保活 而失败切换主要是应用于配置了主备模式的服务器,利用VRRP协议维持主备服务器的心跳,当主服务器出现问题时,由备服务器承载对应的业务,从而在最大限度上减少损失,并提供服务的稳定性。

二.VRRP工作模式

1.三种状态

Initialize状态:系统启动后进入initialize状态

Master状态

Backup状态

2.选举机制

抢占模式下,一旦有优先级高的路由器加入,立即成为Master,默认 非抢占模式下,只要Master不挂掉,优先级高的路由器只能等待 简单点说抢占模式就是,当master宕机后,backup 接管服务。 后续当master恢复后,vip漂移到master上,master重新接管服务,多了一次多余的vip切换,而在实际生产中是不需要这样。 实际生产中是,当原先的master恢复后,状态变为backup,不接管服务,这是非抢占模式。

接下来分4种情况说明:

1.俩台都为master时,比如server1的优先级大于server2,keepalived启动后server1获得master,server2自动降级为backup。此时server1宕机的话,server2接替 服务,当server1恢复后,server1又变为master,重新接管服务,server2变为backup。属于抢占式。

2.server1为master,server2位backup,且master优先级大于backup。keepalived启动后server1获得master,server2为backup。当server1宕机后, server2接管服务。当server1恢复后,server1重新接管服务变为master,而server2变为backup。属于抢占式。

3.server1为master,server2位backup,且master优先级低于backup。keepalived启动后server2获得master,server1为backup。当server2宕机后, server1接管服务。此时server2恢复后抢占服务,获得master,server1降级将为backup。属于抢占式。 以上几种,只要级别高就会获取master,与state状态是无关的 。

4.server1和server2都为backup。我们要注意启动server服务的启动顺序,先启动的升级为master,与优先级无关。且配置nopreempt项比如server1获得master权限,server2为backup。此时server1宕机后,server2接管服务升级为master。当server1恢复后权限将为backup,不会争抢 server2的master权限,server2将会继续master权限。属于非抢占式

重点:第4种非抢占式俩节点state必须为bakcup,且必须配置nopreempt

注意:这样配置后,我们要注意启动服务的顺序,优先启动的获取master权限,与优先级没有关系了 tips:抢占模式即MASTER从故障中恢复后,会将VIP从BACKUP节点中抢占过来。非抢占模式即MASTER恢复后不抢占BACKUP升级为MASTER后的VIP。

三.Keepalived 架构

用户空间核心组件:

vrrp stack:VIP消息通告

checkers:监测real server

system call:实现 vrrp 协议状态转换时调用脚本的功能

SMTP:邮件组件

IPVS wrapper:生成IPVS规则

Netlink Reflector:网络接口

WatchDog:监控进程

控制组件:提供keepalived.conf 的解析器,完成Keepalived配置

IO复用器:针对网络目的而优化的自己的线程抽象

内存管理组件:为某些通用的内存管理功能(例如分配,重新分配,发布等)提供访问权限

四. Keepalived环境准备

需要四台机子 VIP:172.25.254.100 k1:172.25.254.10 sh vmset.sh eth0 172.25.254.10 k1.rhel7.org k2:172.25.254.20 sh vmset.sh eth0 172.25.254.20 k2.rhel7.org #如果出现网卡的问题,先去对应的目录/etc/sysconfig/network-scripts里面看看有没有多的东西,再看看网卡开了没有nmcli networking;开启:nmcli networking on;最后看看nmcli connection看看挂载情况。

bash 复制代码
realserver1:172.25.254.110
配置Apache服务
yum install httpd -y
echo realserver1 - 172.25.254.110 > /var/www/html/index.html
systemctl enable --now httpd
realserver2:172.25.254.120
配置Apache服务
yum install httpd -y
echo realserver2 - 172.25.254.120 > /var/www/html/index.html
systemctl enable --now httpd

五.KeepAlived 配置说明

1.配置文件组成部分

配置文件:/etc/keepalived/keepalived.conf

配置文件组成

GLOBAL CONFIGURATION

Global definitions: 定义邮件配置,route_id,vrrp配置,多播地址等

VRRP CONFIGURATION VRRP

instance(s): 定义每个vrrp虚拟路由器

LVS CONFIGURATION

Virtual server group(s)

Virtual server(s): LVS集群的VS和RS

2.配置语法说明:全局配置
bash 复制代码
! Configuration File for keepalived
global_defs {
	notification_email {
		3511123xxx@qq.com #keepalived 发生故障切换时邮件发送的目标邮箱,可以按行区分写多个
		timiniglee-zln@163.com
	}
	notification_email_from keepalived@KA1.rhel7.org #发邮件的地址
	smtp_server 127.0.0.1 #邮件服务器地址
	smtp_connect_timeout 30 #邮件服务器连接timeout
	router_id KA1.rhel7.org #每个keepalived主机唯一标识;建议使用当前主机名,但多节点重名不影响
	vrrp_skip_check_adv_addr #对所有通告报文都检查,会比较消耗性能;启用此配置后,如果收到的通告报文和上一个报文是同一 #个路由器,则跳过检查,默认值为全检查
	vrrp_strict   			 #严格遵循vrrp协议
							#启用此项后以下状况将无法启动服务:
							#1.无VIP地址
							#2.配置了单播邻居
							#3.在VRRP版本2中有IPv6地址
									#建议不加此项配置
	vrrp_garp_interval 0 			#报文发送延迟,0表示不延迟
	vrrp_gna_interval 0 			#消息发送延迟
	vrrp_mcast_group4 224.0.0.18 	#指定组播IP地址范围:
 }
3.配置虚拟路由器
bash 复制代码
vrrp_instance VI_1 {
	state MASTER
	interface eth0 #绑定为当前虚拟路由器使用的物理接口,如:eth0,可以和VIP不在一个网卡
	virtual_router_id 100 #每个虚拟路由器惟一标识,范围:0-255,每个虚拟路由器此值必须唯一;否则服务无法启动;同属一个虚拟路由器的多个keepalived节点必须相同;务必要确认在同一网络中此值必须唯一
	priority 100 	#当前物理节点在此虚拟路由器的优先级,范围:1-254;值越大优先级越高,每个keepalived主机节点此值不同
	advert_int 1	 #vrrp通告的时间间隔,默认1s
	authentication { 	#认证机制
	auth_type AH|PASS #AH为IPSEC认证(不推荐),PASS为简单密码(建议使用)
	uth_pass 1111 	#预共享密钥,仅前8位有效;同一个虚拟路由器的多个keepalived节点必须一样
	}
	virtual_ipaddress { 			#虚拟IP,生产环境可能指定上百个IP地址;指定VIP,不指定网卡,默认为eth0,注意:不指定/prefix,默认32
		172.25.254.102/24 dev eth2 label eth0:1
	}
}
测试:tcpdump -i eth0 -nn host 224.0.0.18
#没有指令可以下载:yum install tcpdump -y;关闭KA1后再看组播信息
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
22:48:23.294894 IP 172.25.254.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 20,
prio 100, authtype none, intvl 1s, length 20
22:48:24.084793 IP 172.25.254.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 30,
prio 80, authtype none, intvl 1s, length 20
4.启用keepalived日志功能
bash 复制代码
vim /etc/sysconfig/keepalived
KEEPALIVED_OPTIONS="-D -S 6"   #添加内容
vim /etc/rsyslog.conf
.....
# Save boot messages also to boot.log
local7.*                                    /var/log/boot.log
local6.*                               /var/log/keepalived.log
.....   #添加内容
systemctl restart keepalived.service rsyslog.service  #重启
tail -f /var/log/keepalived.log
Aug 12 21:50:55 k1 Keepalived_vrrp[13257]: Sending gratuitous ARP on eth0 for 172.25.254.100
Aug 12 21:50:55 k1 Keepalived_vrrp[13257]: Sending gratuitous ARP on eth0 for 172.25.254.100
Aug 12 21:50:55 k1 Keepalived_vrrp[13257]: Sending gratuitous ARP on eth0 for 172.25.254.100
...
5.实现独立子配置文件

当生产环境复杂时, /etc/keepalived/keepalived.conf 文件中内容过多,不易管理 将不同集群的配置,比如:不同集群的VIP配置放在独立的子配置文件中利用include 指令可以实现包含子配置文件。

bash 复制代码
[root@K1 ~]# mkdir /etc/keepalived/conf.d
[root@K1 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
3511123xxx@qq.com
}
notification_email_from keepalived@KA1.rhel7.org
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id KA1.rhel7.org
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
vrrp_mcast_group4 224.0.0.18
#vrrp_iptables
}
include "/etc/keepalived/conf.d/*.conf" #相关子配置文件
....
[root@K1 ~]# vim /etc/keepalived/conf.d/router.conf
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 20
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.254.100/24 dev eth0 label eth0:1
}
}
[root@KA1 ~]# systemctl restart keepalived

六.抢占模式和非抢占模式

1.非抢占模式 nopreempt

默认为抢占模式preempt,即当高优先级的主机恢复在线后,会抢占低先级的主机的master角色, 这样会使vip在KA主机中来回漂移,造成网络抖动, 建议设置为非抢占模式 nopreempt ,即高优先级主机恢复后,并不会抢占低优先级主机的master角色 非抢占模块下,如果原主机down机, VIP迁移至的新主机, 后续也发生down时,仍会将VIP迁移回原主机;要关闭 VIP抢占,必须将各 keepalived 服务器state配置为BACKUP。

bash 复制代码
#ka1主机配置
vrrp_instance VI_1 {
	state BACKUP
	interface eth0
	virtual_router_id 100
	priority 100 #优先级高
	nopreempt #非抢占模式
	advert_int 1
	authentication {
		auth_type PASS
		auth_pass 1111
	}
	virtual_ipaddress {
		172.25.254.100/24 dev eth0 label eth0:1
	}
}
#KA2主机配置
vrrp_instance VI_1 {
	state BACKUP
	interface eth0
	virtual_router_id 100
	priority 80 #优先级低
	advert_int 1
	nopreempt #非抢占模式
	authentication {
		auth_type PASS
		auth_pass 1111
	}
	virtual_ipaddress {
		172.25.254.100/24 dev eth0 label eth0:1
	}
}
2.抢占延迟模式 preempt_delay

抢占延迟模式,即优先级高的主机恢复后,不会立即抢回VIP,而是延迟一段时间(默认300s)再抢回 VIP

preempt_delay # #指定抢占延迟时间为#s,默认延迟300s

bash 复制代码
#ka1主机配置
vrrp_instance VI_1 {
	state BACKUP
	interface eth0
	virtual_router_id 100
	priority 100 #优先级高
	preempt_delay 10s #抢占延迟10s
	advert_int 1
	authentication {
		auth_type PASS
		auth_pass 1111
	}
virtual_ipaddress {
		172.25.254.100/24 dev eth0 label eth0:1
	}
}
#KA2主机配置
vrrp_instance VI_1 {
	state BACKUP
	interface eth0
	virtual_router_id 100
	priority 80 #优先级低
	advert_int 1
	preempt_delay 10s #抢占延迟10S
	authentication {
		auth_type PASS
		auth_pass 1111
	}
	virtual_ipaddress {
		172.25.254.100/24 dev eth0 label eth0:1
	}
}

七.IP单播配置

默认keepalived主机之间利用多播相互通告消息,会造成网络拥塞,可以替换成单播,减少网络流 注意:启用 vrrp_strict 时,不能启用单播 注意:启用 vrrp_strict 时,不能启用单播

注意:启用 vrrp_strict 时,不能启用单播 注意:启用 vrrp_strict 时,不能启用单播

bash 复制代码
#在所有节点vrrp_instance语句块中设置对方主机的IP,建议设置为专用于对应心跳线网络的地址,而非使用业务网络
unicast_src_ip <IPADDR> #指定发送单播的源IP
unicast_peer {
<IPADDR> #指定接收单播的对方目标主机IP
......
}
#启用 vrrp_strict 时,不能启用单播,否则服务无法启动,并在messages文件中记录下面信息
Jun 16 17:50:06 centos8 Keepalived_vrrp[23180]: (m44) Strict mode does not
support authentication. Ignoring.
---------------------------实验配置---------------------------
#master 主机配置
[root@K1 ~]# vim /etc/keepalived/keepalived.conf
.....
vrrp_skip_check_adv_addr
#vrrp_strict #注释此参数,与vip单播模式冲突
.......
state MASTER
interface eth0
......
	172.25.254.100/24 dev eth0 label eth0:1
	}
	unicast_src_ip 172.25.254.10 #本机IP
	unicast_peer {
		172.25.254.20 #指向对方主机IP
#如果有多个keepalived,再加其它节点的IP
	}
}
##在BACKUP主机中
[root@K2 ~]# vim /etc/keepalived/keepalived.conf
....
vrrp_skip_check_adv_addr
#vrrp_strict #注释此参数,与vip单播模式冲突
vrrp_garp_interval 0
......
vrrp_instance VI_1 {
state BACKUP
......
virtual_ipaddress {
172.25.254.100/24 dev eth0 label eth0:0
	}
unicast_src_ip 172.25.254.20 #本机ip
unicast_peer {
172.25.254.1  0 #对端主机IP
	}
}
测试:抓包查看单播效果
[root@K1 ~]# tcpdump -i eth0 -nn src host 172.25.254.10 and dst 172.25.254.20
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
00:20:16.150917 IP 172.25.254.10 > 172.25.254.20: VRRPv2, Advertisement, vrid 100,
prio 100, authtype simple, intvl 1s, length 20
00:20:17.151569 IP 172.25.254.10 > 172.25.254.20: VRRPv2, Advertisement, vrid 100,
prio 100, authtype simple, intvl 1s, length 20
[root@K2 ~]# tcpdump -i eth0 -nn src 172.25.254.20 and dst 172.25.254.10
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
00:20:50.853174 IP 172.25.254.20 > 172.25.254.10: VRRPv2, Advertisement, vrid 100,
prio 80, authtype simple, intvl 1s, length 20
00:20:51.853798 IP 172.25.254.20 > 172.25.254.10: VRRPv2, Advertisement, vrid 100,
prio 80, authtype simple, intvl 1s, length 20

八.Keepalived 通知脚本配置

当keepalived的状态变化时,可以自动触发脚本的执行,比如:发邮件通知用户 默认以用户keepalived_script身份执行脚本 如果此用户不存在,以root执行脚本可以用下面指令指定脚本执行用户的身份。

1.通知脚本类型

当前节点成为主节点时触发的脚本

notify_master <STRING>|<QUOTED-STRING>

当前节点转为备节点时触发的脚本

notify_backup <STRING>|<QUOTED-STRING>

当前节点转为"失败"状态时触发的脚本

notify_fault <STRING>|<QUOTED-STRING>

通用格式的通知触发机制,一个脚本可完成以上三种状态的转换时的通知

notify <STRING>|<QUOTED-STRING>

当停止VRRP时触发的脚本

notify_stop <STRING>|<QUOTED-STRING>

2.创建通知脚本
bash 复制代码
[root@K1 ~]# vim /etc/keepalived/mail.sh
#!/bin/bash
mail_dest='594233887@qq.com'
mail_send()
{
	mail_subj="$HOSTNAME to be $1 vip 转移"
	mail_mess="`date +%F\ %T`: vrrp 转移,$HOSTNAME 变为 $1"
    echo "$mail_mess" | mail -s "$mail_subj" $mail_dest
}
case $1 in
	master)
	mail_send master
	;;
	backup)
	mail_send backup
	;;
	fault)
	mail_send fault
	;;
	*)
	exit 1
	;;
esac
3.邮件配置
bash 复制代码
dnf install mailx -y   #安装邮件发送工具
vim /etc/mail.rc
#######mail set##########
set from=3511123xxx@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=3511123xxx@qq.com
set smtp-auth-password=isjatjw  #qq邮箱的授权码,在邮箱设置里面账号POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务生成授权码。
set smtp-auth=login
set ssl-verify=ignore
测试:echo test message |mail -s test 3511123xxx@qq.com
4.实现 Keepalived 状态切换的通知脚本
bash 复制代码
#在所有 keepalived节点配置如下
vim /etc/keepalived/mail.sh
#!/bin/bash
mail_dest='3511123xxx@qq.com'
mail_send()
{
	mail_subj="$HOSTNAME to be $1 vip 转移"
	mail_mess="`date +%F\ %T`: vrrp 转移,$HOSTNAME 变为 $1"
	echo "$mail_mess" | mail -s "$mail_subj" $mail_dest
}
case $1 in
	master)
	mail_send master
	;;
	backup)
	mail_send backup
	;;
	fault)
	mail_send fault
	;;
	*)
	exit 1
	;;
esac
chmod +x /etc/keepalived/mail.sh
vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
	state MASTER
	interface eth0
	virtual_router_id 100
	priority 100
	advert_int 1
	authentication {
		auth_type PASS
		auth_pass 1111
}
virtual_ipaddress {
172.25.254.100/24 dev eth0 label eth0:1
}
unicast_src_ip 172.25.254.10
unicast_peer {
	172.25.254.20
}
notify_master "/etc/keepalived/mail.sh master"
notify_backup "/etc/keepalived/mail.sh backup"
notify_fault "/etc/keepalived/mail.sh fault"
}
测试:模拟master故障在浏览器中观察邮件即可
5.同步邮箱的时间
bash 复制代码
yum install ntpdate -y  #下载软件包
ntpdate ntp.aliyun.com   #同步阿里云服务器时间
date  #查看时间

九.实现 master/master 的 Keepalived 双主架构

master/slave的单主架构,同一时间只有一个Keepalived对外提供服务,此主机繁忙,而另一台主机却 很空闲,利用率低下,可以使用master/master的双主架构,解决此问题。 master/master 的双主架构: 即将两个或以上VIP分别运行在不同的keepalived服务器,以实现服务器并行提供web访问的目的,提高 服务器资源利用率.

bash 复制代码
[root@k1 ~]# vim /etc/keepalived/keepalived.conf
.....
vrrp_instance VI_1 {
    state MASTER           #主           
    interface eth0
    virtual_router_id 100
    priority 100
    #nopreempt
    #preempt_delay 5s
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
    unicast_src_ip 172.25.254.10
    unicast_peer {
        172.25.254.20
    }
}
vrrp_instance VI_2 {
    state BACKUP      #备
    interface eth0
    virtual_router_id 200
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.200/24 dev eth0 label eth0:2
    }
    unicast_src_ip 172.25.254.10
        unicast_peer {
        172.25.254.20
    }
}
...

[root@k2 ~]# vim /etc/keepalived/keepalived.conf
....
vrrp_instance VI_1 {
    state BACKUP             #备
    interface eth0
    virtual_router_id 100
    priority 80
    #nopreempt
    #preempt_delay 5s
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
    unicast_src_ip 172.25.254.20
    unicast_peer {
        172.25.254.10
    }
}

vrrp_instance VI_2 {
    state MASTER        #主
    interface eth0
    virtual_router_id 200
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.200/24 dev eth0 label eth0:2
    }
    unicast_src_ip 172.25.254.20
    unicast_peer {
        172.25.254.10
    }
}
....
注意:一定要看清楚自己的主备;还有优先级,router_id的值不要搞混了,出现问题的话,可以先看看这几个地方。
测试:ifconfig查看自己的vip

十.实现IPVS的高可用性

bash 复制代码
[root@k1 ~]# yum install ipvsadm -y
[root@k2 ~]# yum install ipvsadm -y
[root@k1 ~]# vim /etc/keepalived/keepalived.conf
[root@k2 ~]# vim /etc/keepalived/keepalived.conf   #一样的配置
virtual_server 172.25.254.100 80 {
    delay_loop 6   #每隔 6 秒对后端服务器进行健康检查
    lb_algo wrr     #使用加权轮询(Weighted Round Robin)的负载均衡算法。
    lb_kind DR      #表示负载均衡的类型为DR模式
    #persistence_timeout 50
    protocol TCP      #指定协议为 TCP

 real_server 172.25.254.110 80 {
        weight 1    #表示这两个服务器的权重均为 1
        HTTP_GET {   #应用层检测
            url {
              path /
              status_code 200   #期望得到的状态码是 200,表示服务器正常。
            }
            connect_timeout 3   #连接超时时间为 3 秒
            nb_get_retry 2      #重试次数为 2 次
            delay_before_retry 2  #每次重试前的延迟为 2 秒
        }
    }
    real_server 172.25.254.120 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 2
            delay_before_retry 2
        }
    }
}
[root@realserver1 ~]# vi /etc/sysctl.d/arp.conf
	net.ipv4.conf.all.arp_ignore=1  #这个设置适用于所有网络接口。当设置为 1 时,表示系统只响应目的 IP 地址是接收网卡上的本地地址的 ARP 请求。
	net.ipv4.conf.all.arp_announce=2  #同样适用于所有网络接口。设置为 2 时,表示系统在发送 ARP 报文时,尽可能避免使用不属于该网络接口子网的本地地址作为源 IP 地址。
	net.ipv4.conf.lo.arp_ignore=1  #这两个设置专门针对回环接口lo进行了相同的ARP相关配置。
	net.ipv4.conf.lo.arp_announce=2
[root@realserver1 ~]# sysctl --system
	* Applying /usr/lib/sysctl.d/00-system.conf ...
	* Applying /usr/lib/sysctl.d/10-default-yama-scope.conf ...
.....
	net.ipv4.conf.all.arp_ignore = 1
	net.ipv4.conf.all.arp_announce = 2
	net.ipv4.conf.lo.arp_ignore = 1
	net.ipv4.conf.lo.arp_announce = 2
	* Applying /etc/sysctl.conf ...
[root@realserver1 ~]# vi /etc/sysconfig/network-scripts/ifcfg-lo   #设置环回vip接口
DEVICE=lo
IPADDR0=127.0.0.1
NETMASK0=255.0.0.0
IPADDR1=172.25.254.100
NETMASK1=255.255.255.255
NETWORK=127.0.0.0
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
BROADCAST=127.255.255.255
ONBOOT=yes
NAME=loopback
[root@realserver1 ~]# systemctl restart network  #如果重启不了,看看ifcfg-lo文件所在地有没有其他的文件,删掉即可。
[root@realserver2 ~]# vi /etc/sysctl.d/arp.conf
	net.ipv4.conf.all.arp_ignore=1
	net.ipv4.conf.all.arp_announce=2
	net.ipv4.conf.lo.arp_ignore=1
	net.ipv4.conf.lo.arp_announce=2
[root@realserver2 ~]# sysctl --system   #反馈内容出现对应的即可
[root@realserver2 ~]# vi /etc/sysconfig/network-scripts/ifcfg-lo  #跟realserver1一样的操作。
[root@realserver2 ~]# systemctl restart network
测试:[root@k1 ~]#  ipvsadm -Ln出现对应的ip就没问题了。如果没有就看看主配置文件有没有问题,可以关掉其中一台的web服务,看策略,应该是没有。
1.报错方法

如果一直没有对应东西出来,以下是检测的地方。

十一.实现其它应用的高可用性 VRRP Script

keepalived利用 VRRP Script 技术,可以调用外部的辅助脚本进行资源监控,并根据监控的结果实现优先 动态调整,从而实现其它应用的高可用性功能。

1.利用脚本实现主从角色切换
bash 复制代码
[root@k1 ~]# vim /etc/keepalived/test1.sh 
#!/bin/bash
[ ! -f /mnt/lee ]
[root@k1 ~]# sh test.sh
[root@k1 ~]# echo $?
0   
[root@k1 ~]# chmod +x /etc/keepalived/test1.sh 
[root@k1 ~]# vim /etc/keepalived/keepalived.conf
......
vrrp_script check_file {
	script "/etc/keepalived/test1.sh"
	interval 1
	weight -30
	fall 2
	rise 2
	timeout 2
}
vrrp_instance VI_1 {
	state MASTER
	interface ens33
	virtual_router_id 100
	priority 100
	advert_int 1
	authentication {
		auth_type PASS
		auth_pass 1111
	}
	virtual_ipaddress {
		172.25.254.100/24 dev eth0 label eeth0:1
	}
	unicast_src_ip 172.25.254.10
	unicast_peer {
		172.25.254.20
	}
	track_script {
		check_file    #后面的空格需要注意,不要有空格,
	}
}
测试:建立文件,查看vip在那个地方,在ka2就对了。
[root@k1 ~]# touch /mnt/lee
[root@k1 ~]# systemctl restart keepalived
[root@k1 ~]# ifconfig
2.实现HAProxy高可用
bash 复制代码
[root@k1 ~]# yum install haproxy -y   #
vim /etc/haproxy/haproxy.cfg
...   #文章末尾添加
listen webcluster
      bind 172.25.254.100:80
      mode http
      balance roundrobin
      server web1 172.25.254.110:80 check inter 3 fall 2 rise 5
      server web2 172.25.254.120:80 check inter 3 fall 2 rise 5
#在两个ka1和ka2两个节点启用内核参数
[root@k1 ~]#  vim /etc/sysctl.conf
net.ipv4.ip_nonlocal_bind = 1    #在文件末尾添加这行,表示本地没有ip也可以启动
[root@k1 ~]#  sysctl -p    #生效
#在ka1中编写检测脚本
[root@k1 ~]# vim /etc/keepalived/test.sh
#!/bin/bash
killall -0 haproxy   #如果没有指令,可以yum install psmisc 命令来安装
[root@k1 ~]# chmod +X /etc/keepalived/test.sh
#在ka1中配置keepalived
[root@k1 ~]# vim /etc/keepalived/keepalived.conf 
global_defs {
   ....
vrrp_script check_haproxy {
        script "/etc/keepalived/test.sh"
        interval 1
        weight -30
        fall 2
        rise 2
        timeout 2
}
vrrp_instance VI_1 {
   ....
    track_script {
        check_haproxy
    }
}
[root@k1 ~]#systemctl restart keepalived
[root@k1 ~]#systemctl restart haproxy
[root@realserver1 ~]# /etc/sysctl.d/arp.conf  #realserver2一样需要改为0
	net.ipv4.conf.all.arp_ignore=0
	net.ipv4.conf.all.arp_announce=0
	net.ipv4.conf.lo.arp_ignore=0
	net.ipv4.conf.lo.arp_announce=0
测试:做之前要注释lvs的配置。通过systemctl stop haproxy.service关闭haproxy服务,查看vip有没有到ka2端,有就对了,没有就有问题。
相关推荐
A小辣椒2 天前
TShark:Wireshark CLI 功能
linux
A小辣椒2 天前
TShark:基础知识
linux
AlfredZhao2 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334663 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪3 天前
linux 拷贝文件或目录到指定的位置
linux
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式