HA&负载均衡—keepalived(vrrp部分)

VRRP介绍

协议介绍:虚拟路由冗余协议(Virtual Router Redundancy Protocol,简称VRRP)是由IETF提出的解决局域网中配置静态网关出现单点失效现象的路由协议(摘自百度百科)
  • ipv4协议字段:

    • Source Address:vrrp组播报文的源ip地址
    • Destination Address:vrrp组播报文的目的ip地址,IANA分配给vrrp的地址为224.0.0.18
    • TTL:固定为255,如果vrrp接收端程序收到的TTL不为255,将丢弃这个包
    • Protocol:vrrp协议的协议号是112
  • vrrp协议字段,如图:

    • version:vrrp协议版本,keepalived用的是版本2
    • type:vrrp包的类型,目前只有一种类型(ADVERTISEMENT),值为1
    • Virtual Rtr ID (VRID):虚拟路由id的值(1-255),无默认值,主备机进行高可用对外提供的虚拟路由器的id(主备机虚一致)
    • Priority:虚拟路由器的优先级(8bit),更高的值表示更高的优先级
    • Count IP Addrs:vrrp通告报文中通告的ip数量
    • Authentication Type:认证类型
    • Advertisement Interval (Adver Int):通告间隔,默认是1s
    • Checksum:校验和
    • Authentication Data:认证的数据
    • IP Address(es):虚ip(1个或者多个)
      vrrp报文字段
      wireshark抓包vrrp报文
协议状态机
  • 状态描述,如图:
    vrrp状态描述
    vrrp状态描述2

Keepalived介绍

什么是keepalived?

这个项目的主要目标是为Linux系统和基于Linux的基础设施提供简单、健壮的负载平衡和高可用性。负载平衡框架依赖于众所周知的和广泛使用的Linux虚拟服务器(IPVS)内核模块,它提供了Layer4负载均衡。Keepalived实现了一组动态的、自适应地维护和管理负载平衡服务器池的检查器。另一方面,高可用性是通过VRRP协议实现的。VRRP是路由器故障转移的基础。此外,Keepalived基于VRRP有限状态机,提供低级别和高速的协议交互。Keepalived框架可以单独使用或全部使用,以提供弹性的基础结构。

Keepalived软件架构,如图:

Keepalived软件架构
* Configure file parser:配置文件检测,主进程负责分析配置文件
* I/O Multiplexer :io多路复用
* watchdog : 监控两个进程健康状态,负责启动,重启两个子进程
* 两个子进程:真正工作的子进程
* Checkers:自身的IPVS的后端服务器的健康状态
* VRRP

Keepalived中vrrp模块工作原理
  • vrrp状态

    VRRP路由器在运行过程中有三种状态:

    • Initialize状态: 系统启动后就进入Initialize,此状态下路由器不对VRRP报文做任何处理,可以理解为初始化
    • Master状态: 路由器会发送VRRP通告,发送免费ARP报文。
    • Backup状态: 接受VRRP通告。

一般主路由器处于Master状态,备份路由器处于Backup状态

  • vrrp选举机制

    • VRRP组中IP拥有者。如果虚拟IP地址与VRRP组中的某台VRRP路由器IP地址相同,则此路由器为IP地址拥有者,这台路由器将被定位主路由器。
    • 比较优先级。如果没有IP地址拥有者,则比较路由器的优先级,优先级的范围是0~255,大的作为主路由器
    • 比较IP地址。在没有Ip地址拥有者和优先级相同的情况下,IP地址大的作为主路由器。
      如下图所示: 虚拟IP为10.1.1.254,在VRRP组中没有IP地址拥有者,则比较优先级,很明显RB和RA的优先级要大于RC,则比较RA和RB的IP地址,RB的IP地址大。所以RB为组中的主路由器。
      路由器组
  • vrrp定时器

    • VRRP通告报文时间间隔定时器

      • VRRP备份组中的Master路由器会定时发送VRRP通告报文,通知备份组内的路由器自己工作正常
      • 用户可以通过设置VRRP定时器来调整Master路由器发送VRRP 通告报文的时间间隔
      • 如果Backup路由器在等待了3个间隔时间后,依然没有收到VRRP 通告报文,则认为自己是Master路由器,并对外发送VRRP通告报文,重新进行Master路由器的选举
    • VRRP抢占延迟时间定时器

      • 为了避免备份组内的成员频繁进行主备状态转换,让Backup路由器有足够的时间搜集必要的信息(如路由信息),Backup 路由器接收到优先级低于本地优先级的通告报文后,不会立即抢占成为Master
      • 而是等待一定时间——抢占延迟时间后,才会对外发送VRRP通告报文取代原来Master路由器
  • VRRP工作过程总结

    • 路由器使能VRRP 功能后,会根据优先级确定自己在备份组中的角色。优先级高的路由器成为Master 路由器,优先级低的成为Backup 路由器。Master 路由器定期发送VRRP告报文,通知备份组内的其他设备自己工作正常;Backup 路由器则启动定时器等待通告报文的到来。
    • 抢占方式下,当Backup 路由器收到VRRP 通告报文后,会将自己的优先级与通告报文中的优先级进行比较。如果大于通告报文中的优先级,则成为Master 路由器;否则将保持Backup状态
    • 在非抢占方式下,只要Master 路由器没有出现故障,备份组中的路由器始终保持Master 或Backup 状态,Backup 路由器即使随后被配置了更高的优先级也不会成为Master 路由器

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

keepalived做单点故障的HA(实验)

实验环境介绍
  • 两台Centos7.4作为路由器备份组,如图,master端和backup端的ens37、ens38接口都配置有ip(在keepalived-3.x版本中已经不支持接口没有ip的情况
    )。master端管理口ip(ens33):192.168.137.140,backup端管理口ip(ens33):192.168.137.141
    实验环境
    实验环境master
    实验环境standby
  • 配置、编译、安装到/root/keepalived_install
    安装
抢占模式下的HA
  • master端配置如图:
    master

  • backup端配置如图:
    backup

  • master端和backup端分别启动keepalived:
    启动keepalived
    启动keepalived
  • 查看master端和backup端的vip信息:
    master vrrp log
    standby vrrp log

  • down掉master端的ens37接口,查看master端和backup端的vip信息,此时backup端变成了master状态,master端进入fault状态:
    down mater接口
    master状态
    standby状态

  • up掉master端的ens37接口,查看master端和backup端的vip信息,此时backup端变成了backup状态,master端抢占为master状态:
    up mater接口
    master状态
    standby状态
非抢占模式下的HA
  • master端的配置如图3-3-1:
    master配置

  • backup端的配置如图:
    standby配置

  • 分别运行keepalived后如图:
    master vrrp log
    standby vrrp log

  • down掉master端的ens37接口,查看master端和backup端的vip信息,此时backup端变成了master状态,master端进入fault状态:
    down master接口
    master vrrp log
    standby vrrp log

  • up掉master端的ens37接口,查看master端和backup端的vip信息,此时backup还是master状态,master端成为backup状态:
    up mater接口
    master vrrp log
    standby vrrp log

总结

keepalived这款开源程序能够自动实现将用户访问的ip转移的方法,故障重启,故障,恢复切换,故障报警。此外keepalived还能基于lvs实现服务级别的负载均衡,keepalived也可以结合HAproxy、nginx、httpd实现高可用解决方案。

猜你喜欢

转载自blog.csdn.net/u012570105/article/details/80796223