keepalived

Virtual Route Redundancy Protocol,即虚拟路由冗余协议。它主要是实现路由器可用的容错协议。也可以叫做备份路由协议

将多台路由器(主路由器,备路由器)组成路由器组(Router Group,组中包括MasterBackup,在外部看来就像一台路由器,拥有一个VIPMaster会发送组播消息,当Backup在指定的时间收不到vrrp包就会认为master宕掉。然后通过VRRP协议再次竞选新的路由器当Master,从而保证路由器的高可用。

image.png 

这个虚拟的路由器拥有自己的IP 地址10.100.10.1(这个IP 地址可以和备份组内的某个路由器的接口地址相同,相同的则称为ip拥有者),备份组内的路由器也有自己的IP 地址(如MasterIP 地址为10.100.10.2Backup IP 地址为10.100.10.3)。局域网内的主机仅仅知道这个虚拟路由器的IP 地址10.100.10.1,而并不知道具体的Master 路由器的IP 地址10.100.10.2 以及Backup 路由器的IP 地址10.100.10.3 [1]  它们将自己的缺省路由下一跳地址设置为该虚拟路由器的IP 地址10.100.10.1


工作原理:(报文转发权利的争夺)

路由器开启VRRP功能后,会根据优先级确定自己在备份组中的主备角色。主用路由器定期发送VRRP通告报文,通知备份组内的其他路由器自己工作正常;

备用路由器则启动定时器等待通告报文的到来。

VRRP在不同的主用抢占方式下,主用角色的替换方式不同:

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

l在非抢占方式下,只要主用路由器没有出现故障,备份组中的路由器即使随后被配置了更高的优先级也不会成为主用路由器。主路由器故障后,备用路由器会认为自己是主用路由器,并对外发送VRRP通告报文。备份组内的路由器根据优先级选举出主用路由器,承担报文的转发功能。

 

参考百度百科:

百度百科

现的是路由器的高可用 轻量级 不需要共享存储


VRRP周边技术:(主要是交换机中的vrrp)

VRRP,堆叠,端口聚合是三种不同的技术。堆叠和端口聚合差异巨大。

堆叠适用于接入交换机端口数量不够的情况,没有真正意义上的冗余效果。

端口聚合适用于单一设备使用多条线路连接的情况,实现线路级别的冗余。

VRRP适用于于多套相同设备连接的情况,实现设备级别的冗余。

 

堆叠简单粗暴最好啊(堆叠成本高,有钱玩堆叠,没钱vrrp都用不起。最少要两台核心交换机。)

能用堆叠就不要用 hsrp vrrp

能用端口聚合就不要用生成树。

能用防火墙就不要用路由器。

能在二层解决的问题就不要在三层解决。(能在低层解决的不要留在高层)

 

堆叠,思科vss,华为cssh3c irf等等,vrrp现在还是很常用的技术,在Linux中的keeplive也是用vrrp技术的。

CSS(Cluster Switch System),又被称为集×××换机系统(简称为CSS或堆叠)。

是将几台交换机通过专用的堆叠线缆链接起来,对外呈现为一台逻辑交换机。

IRF(Intelligent Resilient Framework,智能弹性架构)是H3C自主研发的软件虚拟化技术。它的核心思想是将多台设备通过IRF物理端口连接在一起

VSS(Virtual Switch SystemCisco将两台物理Catalyst 6500系列交换机虚拟成一台逻辑交换机的虚拟化技术叫做VSS(虚拟交换系统)。

一个VRRP路由器有唯一的标识:VRID,范围为0255


EXAMPLE1:场景说明

state】段无论写Master还是Backup其实都是其次的,是给人阅读的,主要优先级还是看【priority】段,

把nopreempt  设置为不抢夺VIP

修改MB服务器的  state BACKUP 都为【备】类型,同时设置 nopreempt  设置为不抢夺VIP

然后先启动M服务器,M服务器会成为【主】,然后启动B服务器,由于M的优先级高【priority 100 所以B不会抢夺VIP,这时M宕机,B成为【主】,接着M恢复正常,由于设置了nopreempt 所以M不会抢夺VIPB继续为【主】而M为【备】。


同时:



[s@S:/home/s]$cat /etc/keepalived/keepalived.conf

global_defs {

   router_id s_app_ha

}

 

vrrp_instance VI_1 {

    state BACKUP

    nopreempt 

    interface eth0

    virtual_router_id 9

    priority 99

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 0009

    }

    virtual_ipaddress {

        10.108.67.9/25

    }

    notify_master "/etc/keepalived/scripts/notify_s_master.sh"

    notify_backup "/etc/keepalived/scripts/notify_s_backup.sh"

}

 

[s@S:/home/s]$cat /etc/keepalived/scripts/notify_s_backup.sh

#!/bin/bash

export PATH=$PATH:/sbin:/bin:/usr/sbin:/usr/bin

LOG_FILE="/tmp/keepalived.log"

echo "`date '+%Y-%m-%d %T'`: start change role to backup" >> "${LOG_FILE}"

#run script

echo "`date '+%Y-%m-%d %T'`: change role to backup finish" >> "${LOG_FI

 

[s@S:/home/s]$cat /etc/keepalived/scripts/notify_s_master.sh

#!/bin/bash

export PATH=$PATH:/sbin:/bin:/usr/sbin:/usr/bin

LOG_FILE="/tmp/keepalived.log"

echo "`date '+%Y-%m-%d %T'`: start change role to master" >> "${LOG_FILE}"

#run script

su -l suser -c "/bin/sh /u/H/stop.sh" >> "${LOG_FILE}"

su -l suser -c "/bin/sh /u/H/start.sh" >> "${LOG_FILE}"

echo "`date '+%Y-%m-%d %T'`: change role to master finish" >> "${LOG_FILE}"


*********************************************************************************************************

 notify_master:当当前节点成为master时,通知脚本执行任务(一般用于启动某服务或者记录日志,比如nginx,haproxy等)

 notify_backup:当当前节点成为backup时,通知脚本执行任务(一般用于关闭某服务或者记录日志,比如nginx,haproxy等)

 notify_fault:当当前节点出现故障,执行的任务;


EXAMPLE2

KeepAlived+LVS(DR调度器)实现负载均衡的高可用。

KeepAlived的功能:

1. 实现调度器的HA

2. RealServer做健康检查

3. 动态维护IPVS路由表

 

LVS

lvs的持久连接。

ipvsadm -Ln -c

调度算法用于决定LVS如何选择后端的RealServer

1、轮叫调度(Round Robin(简称rr)

2、加权轮叫(Weighted Round Robin)(简称wrr)

3、最少链接(Least Connections(LC)


TIPS:

 su -l 和su -的意思一样(su为switch user)

应用故障的时候==通过执行外部脚本检查应用运行状态,如果异常则停止Keepaliced。

只有主机 keepalived 服务挂了才会漂移。也就是说重启keepalived服务会让vip漂移。