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

news2024/11/14 5:24:10

目录

一.初识keepalived

二.VRRP工作模式

1.三种状态

2.选举机制

三.Keepalived 架构

四. Keepalived环境准备

五.KeepAlived 配置说明

1.配置文件组成部分

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

3.配置虚拟路由器

 4.启用keepalived日志功能

5.实现独立子配置文件

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

1.非抢占模式 nopreempt

2.抢占延迟模式 preempt_delay

七.IP单播配置

八.Keepalived 通知脚本配置

1.通知脚本类型

2.创建通知脚本

3.邮件配置

4.实现 Keepalived 状态切换的通知脚本

5.同步邮箱的时间

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

十.实现IPVS的高可用性

1.报错方法

十一.实现其它应用的高可用性 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看看挂载情况。

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.配置语法说明:全局配置
! 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.配置虚拟路由器
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日志功能
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 指令可以实现包含子配置文件。

[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。

#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

#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 时,不能启用单播

#在所有节点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.创建通知脚本
[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.邮件配置
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 状态切换的通知脚本
#在所有 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.同步邮箱的时间
yum install ntpdate -y  #下载软件包
ntpdate ntp.aliyun.com   #同步阿里云服务器时间
date  #查看时间

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

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

[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的高可用性

[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.利用脚本实现主从角色切换
[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高可用
[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端,有就对了,没有就有问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2038817.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

8月报名 | 海克斯康-MSC设计与仿真行业研讨会深圳站

您好&#xff01;感谢您长期以来对优飞迪科技与海克斯康的关注与支持。我们诚邀您参加8月23日的海克斯康-MSC设计与仿真行业研讨会深圳站活动&#xff0c;本次会议主要就目前大家所关注的电子热流体、电子电器噪声等热点仿真问题展开讨论&#xff0c;为大家提供工程实际问题的解…

BCNet

bilateral boundary extraction module (BBEM)&#xff0c;receptive field block (RFB). attention-driven cross-layer feature interaction modules (ACFIMs)&#xff0c;global feature integration modules (GFIMs) global max pooling (GMP) 作者未提供代码

input系统之InputReader

1.InputReader启动 InputReader和InputDispatcher是IMS中的两个重要的线程&#xff0c;InputReader主要负责从Eventhub获取事件&#xff0c;然后将事件进行处理&#xff0c;并将封装好的EventEntry事件交给InputDispatcher的去进行分发&#xff1b;InputDispatcher主要负责将输…

LeetCode 热题 HOT 100 (025/100)【宇宙最简单版】

【二叉树】No. 0124 二叉树中的最大路径和 【困难】&#x1f449;力扣对应题目指路 希望对你有帮助呀&#xff01;&#xff01;&#x1f49c;&#x1f49c; 如有更好理解的思路&#xff0c;欢迎大家留言补充 ~ 一起加油叭 &#x1f4a6; 欢迎关注、订阅专栏 【力扣详解】谢谢你…

12.C基础_字符串相关函数

字符串长度strlen 头文件 #include <string.h> 函数声明 size_t strlen(const char *s); 返回值&#xff1a;long型的字符串长度 s&#xff1a;要计算长度的字符串&#xff0c;必须以 \0 结尾 注意&#xff1a;strlen计算的长度是以 \0 为结尾&#xff0c;而sizeo…

【书生大模型实战营(暑假场)闯关材料】入门岛:第1关 Linux 基础知识

【书生大模型实战营&#xff08;暑假场&#xff09;闯关材料】入门岛&#xff1a;第1关 Linux 基础知识 1. 使用VScode进行SSH远程连接服务器2. 端口映射及实例参考文献 这一博客主要介绍使用VScode进行服务器远程连接及端口映射。 1. 使用VScode进行SSH远程连接服务器 安装V…

一个基于 vue 的强大表单和高性能表格组件,简洁API设计,支持虚拟树,列拖拽,懒加载,快捷菜单(附源码)

前言 在现代Web应用开发中&#xff0c;表单和表格是两个核心组件&#xff0c;它们对于数据展示和用户交互至关重要。然而&#xff0c;现有的解-决方案往往存在一些痛点&#xff0c;如不够灵活、性能问题、以及难以实现复杂功能等。这些问题限制了开发者的创造力&#xff0c;也…

树莓派开发相关知识二

1、相关术语 树莓派装载的芯片&#xff1a;BCM2835是一个MCU微处理器&#xff0c;它可以理解为CPU其它模块的组合。 GPIO&#xff1a;General-purpose input/output&#xff0c;通用型输入输出&#xff0c;其接脚可以供使用者由程控自由使用&#xff0c;PIN脚依现实考量可作为…

java或者sh脚本实现 实现 mysql 数据库指定表,定时导出并导入指定数据库并切换指定字段名(适合linux和windows)

定时导出指定数据库的指定表导出到指定数据库 一、Java实现 1、contronller Slf4j Controller public class BackupController {AutowiredBackupService backupService;// 备份 // ResponseBody // PostMapping("/backup/backupByfile")Scheduled(cron&quo…

音视频开发

通过多线程分别获取高分辨率(1920 * 1080)和低分辨率(1280 * 720) 初始化VI模块 初始化HIGH VENC模块 初始化LOW VENC模块 初始化RGA模块 绑定 VI和HIGH VENC 绑定 VI和RGA 创建线程 HIGH VENC处理 RGA处理 LOW VENC处理 销毁 QP原理的讲解 QP参数调节&#xff0c;指的是量化…

C:每日一题:二分查找

1、知识介绍&#xff1a; 1.1 概念&#xff1a; 二分查找是一种在有序数组中查找某一特定元素的搜索算法 1.2 基本思想&#xff1a; 每次将待查找的范围缩小一半&#xff0c;通过比较中间元素与目标元素的大小&#xff0c;来决定是在左半部分还是右半部分继续查找。 举个生…

进程状态和线程

一、wait&#xff08;阻塞调用&#xff09; pid_t wait(int *status); 1.功能&#xff1a;&#xff08;1&#xff09;获取子进程退出状态 &#xff08;2&#xff09;.回收资源 //会让僵尸态的子进程销毁 参数 int *status: 指向一个整数的指针&#xff0c;wait …

qtday01

实现一个登录窗口 #include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//设置标题this->setWindowTitle("小黑子登录器");//设置图标this->setWindowIcon(QIcon("E:\\qt\\day1_04\\pictrue\\cxk.gif"));//固定…

移动APP测试有哪些注意事项?专业APP测试报告如何获取?

移动APP在其生命周期中有不同的阶段&#xff0c;从开始到投入目标市场再到被淘汰。移动APP的成功有多种因素&#xff0c;例如创建、部署、推广、粘性等。但是&#xff0c;创建出色APP的关键在于它的测试&#xff0c;软件测试负责为客户提供安全有效的产品&#xff0c;因此移动A…

Haproxy实现https

haproxy可以实现https的证书安全,从用户到haproxy为https,从haproxy到后端服务器用http通信 &#xff0c;但是基于性能考虑,生产中证书都是在后端服务器比如nginx上实现。 配置HAProxy支持https协议&#xff0c;支持ssl会话&#xff1a; bind *:443 ssl crt /PATH/TO/SOME_PEM…

【C++ 面试 - 基础题】每日 3 题(十)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏&…

如何把命令行创建python虚拟环境与pycharm项目管理更好地结合起来

1. 问题的提出 我在linux或windows下的某个目录如“X”下使用命令行的方式创建了一个python虚拟环境&#xff08;参考文章&#xff09;&#xff0c;对应的目录为myvenv, 现在我想使用pycharm创建python项目myproject&#xff0c;并且利用虚拟环境myvenv&#xff0c;怎么办&…

搭建jenkins+k8s过程中遇到的问题

1、k8s地址配置导致的一些个问题 Still waiting to schedule task ‘Jenkins’ doesn’t have label ‘k8s-jenkins-slave’ 出现以上异常一般就是k8s地址配置不对或者地址不通导致的 配置完k8s地址以及命名空间等内容之后,在获取k8s下的token 1.查看sa # kubectl get sa…

我的第一个CUDA程序

MatAdd算法 实现两个矩阵对应元素相加 MatAdd算法的GPU实现 CPU端为输入矩阵A和B、输出矩阵C分配空间&#xff0c;并进行初始化CPU端分配设备端内存&#xff0c;并将A和B传输到GPU上定义数据和线程的映射关系&#xff0c;并确定线程的开启数量和组织方式 每个线程负责输出矩阵…

EasyX自学笔记3(割草游戏1)

割草游戏&#xff0c;有玩家&#xff08;上下左右控制移动&#xff09;周围围绕子弹&#xff0c;敌人&#xff08;随机刷新&#xff09;向玩家靠近&#xff0c;子弹打死敌人&#xff0c;玩家与敌人触碰游戏结束。 分析需求 1.有玩家、敌人、子弹三种对象 2.玩家上下左右控制…