目录
Keepalived概述
? ? ? ? Keepalived功能
? ? ? ? Keepalived架构?
? ? ? ? keepalived的热备方式
? ? ? ? VRRP相关技术
? ? ? ? ? ? ? ? vrrp相关术语
?Keepalived相关文件
? ? ? ? 配置组成
具体实现
? ? ? ? ? ? ? ? 主备keepalived?
? ? ? ? ? ? ? ? ?节点配置
? ? ? ? 非抢占式
? ? ? ? 延迟抢占
??
脑裂现象
??
??????keepalived 起初是专门针对LVS设计的一款强大的辅助工具,主要用来提供故障切换(Failover)和健康检查(Health Checking)功能——判断LVS负载调度器、节点服务器的可用性,及时隔离并替换为新的服务器,当故障主机恢复后将其重新加入群集。
Keepalived概述
? ? ? ? Keepalived功能
? ? ? ? Keepalived架构?
官方网址:Keepalived for Linux
-
vrrp stack:VIP消息通告 -
checkers:监测real server(简单来说 就是监控后端真实服务器的服务) -
system call:实现 vrrp 协议状态转换时调用脚本的功能 -
SMTP:邮件组件(报警邮件) -
IPVS wrapper:生成IPVS规则(直接生成ipvsadm) -
Netlink Reflector:网络接口(将虚拟地址ip(vip)地址飘动)
WatchDog:监控进程(整个架构是否有问题)
?keeplive可以配合ngnix等软件,反向代理
? ? ? ? keepalived的热备方式
? ? ? ?keepalived采用VRRP(虚拟路由冗余协议)热备份协议,以软件的方式实现Linux服务器的多机热备功能。VRRP是针对路由器的一种备份解决方案——由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务:每个热备组内同一时刻只有一台主路由器提供服务,其他路由器处于冗余状态,若当前在线的路由器失效,则其他路由器会自动接替(优先级决定接替顺序)虚拟IP地址,以继续提供服务
?
? ? ? ? ?热备主内的每台路由器都可能成为主路由器,虚拟路由器的IP地址(VIP)可以在热备组内的路由器之间进行转移,所以也称为漂移IP地址。使用Keepalived时,漂移地址的实现不需要手动建立虚接口配置文件(如ens33:0),而是由Keepalived根据配置文件自动管理。
? ? ? ? VRRP相关技术
通告:心跳,优先级等;周期性
工作方式:抢占式,非抢占式,延迟抢占模式,
安全认证:
工作模式:
#通告: 是宣告自己的主权,不要妄想抢班夺权,不停的向外
#抢占式: 主服务器宕机,过了一段时间修好了,再把主权抢过来
#非抢占式: 主服务器宕机,过了一段时间修好了,原来的主就作为备了
#抢占式好还是非抢占式好?
非抢占式好
#安全认证: 如没有安全认证,不在集群中的keeplive服务器设置超高的优先级,会造成事故
#主/主:主/备(虚拟路由器1),备/主(虚拟路由器2)见下图: 环境: 有两台服务器 虚拟出两台虚拟路由器 第一台虚拟路由器中服务器1为主,服务器2为备,那么虚拟IP1就飘在服务器1上,真正工作的只有服务器1 第二台虚拟路由器中服务器2为主,服务器1为备,那么虚拟IP2就飘在服务器2上,真正工作的只有服务器2 优点: #提高了资源利用率: 这样主,备服务器同时干活,可以同时运行两个项目 #同样有备份功能: 如果服务器1坏了,服务器2 将同时拥有虚拟IP1和虚拟IP2
缺点: 虽然有备份冗余功能但是对机器的性能要求非常高,当其中一台出现故障,本来一台运行一个任务,现在所有的业务全部压在了一台上,有十分大的风险
? ? ? ? ? ? ? ? vrrp相关术语
?Keepalived相关文件
-
软件包名:keepalived -
主程序文件:/usr/sbin/keepalived -
主配置文件:/etc/keepalived/keepalived.conf -
配置文件示例:/usr/share/doc/keepalived/ -
Unit File:/lib/systemd/system/keepalived.service -
Unit File的环境配置文件: -
/etc/sysconfig/keepalived CentOS
? ? ? ? 配置组成
/etc/keepalived/keepalived.conf 配置组成
Global definitions(全局配置):定义邮件配置,route_id,vrrp配置,多播地址等
VRRP instance(s):定义vrrp协议中的每个vrrp虚拟路由器的规则,基本信息
Virtual server group(s)
Virtual server(s):LVS集群的VS和RS
具体实现
主keepalived:192.168.37.100 备keepalived:192.168.37.101 web1:192.168.37.103 web2:192.168.37.106 vip:192.168.91.11 客户机访问
? ? ? ? ? ? ? ? 主备keepalived?
?主备keepalived,安装ipvsadm软件包和keepalived软件包
[root@localhost ~]# yum install ipvsadm.x86_64 keepalived.x86_64 -y
加载模块
[root@localhost ~]# modprobe ip_vs
[root@localhost ~]# cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
keepalived配置文件做一个备份
[root@localhost ~]# cd /etc/keepalived/
[root@localhost /etc/keepalived]# ls
keepalived.conf
[root@localhost /etc/keepalived]# cp keepalived.conf keepalived.conf.bak
[root@localhost /etc/keepalived]# ls
keepalived.conf keepalived.conf.bak
编辑keepalived配置文件
[root@localhost /etc/keepalived]# vim keepalived.conf
?
?
?
?编辑/etc/systcl.conf文件
[root@localhost /etc/keepalived]# vim /etc/sysctl.conf
[root@localhost /etc/keepalived]# sysctl -p
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
?重启
[root@localhost /etc/keepalived]# ipvsadm-save >/etc/sysconfig/ipvsadm #先保存
[root@localhost /etc/keepalived]# systemctl start keepalived.service
[root@localhost /etc/keepalived]# systemctl start ipvsadm.service
[root@localhost /etc/keepalived]# systemctl restart keepalived.service
[root@localhost /etc/keepalived]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.37.11:80 rr
-> 192.168.37.102:80 Route 1 0 0
-> 192.168.37.106:80 Route 1 0 0
远程拷贝到备keepalived中
[root@localhost /etc/keepalived]# scp keepalived.conf root@192.168.37.101:/etc/keepalived/
The authenticity of host '192.168.37.101 (192.168.37.101)' can't be established.
ECDSA key fingerprint is SHA256:ohmukbizYYyd0RUPHVaJOvHzidcQS1AvBegZAWJ13zQ.
ECDSA key fingerprint is MD5:26:7d:45:4f:47:02:d7:7b:47:b1:7e:29:3d:46:c8:cd.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.37.101' (ECDSA) to the list of known hosts.
root@192.168.37.101's password:
keepalived.conf 100% 1155 2.7MB/s 00:00
[root@localhost /etc/keepalived]# scp /etc/sysctl.conf root@192.168.37.101:/etc/keepalived/
root@192.168.37.101's password:
sysctl.conf
已经拷贝过来了?
?修改keepalived.conf文件
[root@localhost keepalived]#vim keepalived.conf
保存?
[root@localhost keepalived]#ipvsadm-save >/etc/sysconfig/ipvsadm
[root@localhost keepalived]#
[root@localhost keepalived]#systemctl start ipvsadm.service
编辑/etc/sysctl.conf文件
[root@localhost keepalived]#vim /etc/sysctl.conf
?net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.ens33.send_redirects = 0
[root@localhost keepalived]#systemctl start keepalived.service
[root@localhost keepalived]#
[root@localhost keepalived]#ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.37.11:80 rr
-> 192.168.37.102:80 Route 1 0 0
-> 192.168.37.106:80 Route 1 0 0
?假如把主keepalived关掉
[root@localhost /etc/keepalived]# systemctl stop keepalived.service
?此时会跑到备keepalived上
比如抓个包
[root@localhost ~]# tcpdump -i ens33 host 224.0.0.18
?现在是主keepalived关闭
开启后看看
?
又变回到100了!!!
? ? ? ? ? ? ? ? ?节点配置
安装httpd服务
[root@localhost ~]#yum install httpd -y
设置虚拟网卡
[root@localhost ~]# ifconfig lo:0 192.168.37.11 netmask 255.255.255.255
修改/etc/sysctl.conf文件
[root@localhost /var/www/html]# vim /etc/sysctl.conf
[root@localhost /var/www/html]#
[root@localhost /var/www/html]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
设置路由
[root@localhost /var/www/html]# route add -host 192.168.37.11 dev lo:0
第二台节点服务器和第一台配置一样,不多赘述
测试
在网页输入192.168.37.11
等待一会刷新
?
以上就是抢占式的keepalived, 默认模式 使用的 抢占式 主节点会抢占回来,会造成 两次网络动荡。?
? ? ? ? 非抢占式
?主机一
主机二
?
?重启
[root@localhost /etc/keepalived]# systemctl restart keepalived.service
抓包
?关闭主机1
[root@localhost /etc/keepalived]# systemctl stop keepalived.service
还是可以访问
?
? ? ? ? 延迟抢占
主机1
?
主机2
?
关闭主机一再重启
[root@localhost /etc/keepalived]# systemctl stop keepalived.service
[root@localhost /etc/keepalived]# systemctl restart keepalived.service
抓包在13秒重启的从43秒开始变回100,
?
?
脑裂现象
什么是脑裂? 在高可用(HA)系统中,当联系2个节点的“心跳线”断开时,本来为一整体、动作协调的HA系统, 就分裂成为2个独立的个体。 由于相互失去了联系,都以为是对方出了故障。两个节点上的HA软件像“裂脑人”一样,争抢“共享 资源”、争起“应用服务”,就会发生严重后果。共享资源被瓜分、两边“服务”都起不来了;或者两边 “服务”都起来了,但同时读写“共享存储”,导致数据损坏
都有哪些原因导致脑裂? 高可用服务器对之间心跳线链路发生故障,导致无法正常通信。 因心跳线坏了(包括断了,老化)。 因网卡及相关驱动坏了,ip配置及冲突问题(网卡直连) 因心跳线间连接的设备故障(网卡及交换机) 因仲裁的机器出问题(采用仲裁的方案) 高可用服务器上开启了 iptables防火墙阻挡了心跳消息传输。 高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败 其他服务配置不当等原因,如心跳方式不同,心跳广插冲突、软件Bug等。
20. 如何解决keepalived脑裂问题? 在实际生产环境中,我们从以下方面防止脑裂: #同时使用串行电缆和以太网电缆连接、同时使用两条心跳线路,这样一条线路断了,另外一条还是好的,依然能传送心跳消息 #当检查脑裂时强行关闭一个心跳节点(这个功能需要特殊设备支持,如stonith、fence)相当于备节点接收不到心跳消息,通过单独的线路发送关机命令关闭主节点的电源
#做好对脑裂的监控报警解决常见方案: 如果开启防火墙,一定要让心跳消息通过,一般通过允许IP段的形式解决 可以拉一条以太网网线或者串口线作为主被节点心跳线路的冗余 开发检测程序通过监控软件检测脑裂
?
|