Keepalived高可用集群实践

运维笔记 948 Views 0 Comments

keepalived

1、keepalived初识

Keepalived软件起初是转为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个节点的状态,后来又加入了可以实现高可用的VRRPG功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx,Haproxy,MySQL等)的高可用解决方案软件。

Keepalived软件主要是通过VRRP协议实现高可用功能的。VRRP是Virtual Router Redundancy Protocol(虚拟路由冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行。所以,keepalived一方面具有配置管理LVS的功能,同时还具有对LVS下面的节点进行健康检查的功能,另一方面也可以实现系统网络服务的高可用功能。

keepalived软件的官网是:www.keepalived.org

2、keepalived服务的三个重要功能

  • 管理LVS负载均衡软件

早期的LVS软件,需要通过命令行或脚本实现管理,并且没有针对LVS节点的健康检查功能,为了解决LVS的这些使用不便的问题,keepalived就诞生了,可以说,Keepalived软件起初是专为解决LVS的问题而诞生的。因此,Keepalived和LVS的感情很深,它们的关系如夫妻一样,可以紧密的结合,愉快的工作。Keepalived可以通过读取自身的配置文件实现通过更底层的接口直接管理LVS的配置以及控制服务启动、停止等功能,这使得LVS的应用更加简单方便了。LVS和Keepalived的组合应用此文暂不讨论。

  • 实现对LVS集群节点健康检查功能(healthcheck)

Keepalived可以通过在自身的Keepalived.conf文件里配置LVS的节点IP和相关参数实现对LVS的直接管理;除此之外,当LVS集群中的某一个甚至是几个节点同时发生故障无法提供服务时,Keepalived服务会自动将失效的节点服务器从LVS的正常转发队列中清除出去,并将请求调度到别的正常节点服务器上,从而保证最终用户的访问不受影响;当故障的节点服务器被修复以后,Keepalived服务又会自动地把他们加入到正常转发队列中,对客户提供服务。

  • 作为系统网络服务的高可用功能(failover)

Keepalived可以实现任意两台主机之间,例如Master和Backup主机之间的故障转移和自动切换,这个主机可以是普通的不能停机的业务服务器,也可以是LVS负载均衡、Nginx反向代理这样的服务器。

Keepalived高可用功能实现的简单原理为,两台主机同时安装好Keepalived软件并启动服务,开始正常工作时,由角色为Master的主机获得所有资源并对用户提供服务,角色为Backup的主机作为Master主机的热备;当角色为Master的主机失效或出现故障时 ,角色为Backup的主机将自动接管Master主机的所有工作,包括接管VIP资源及相应资源服务;而当角色为Master的主机故障修复后,又会自动自动接管回它原来处理的工作,角色为Backup的主机则同时释放Master主机失效时它接管的工作,此时,两台主机将恢复到最初启动时各自的原始角色及工作状态。

3、Keepalived高可用故障切换转移原理

Keepalived高可用服务对之间的故障切换转移,是通过VRRP(Virtual Route Redundancy Protocol,虚拟路由冗余协议)来实现的。

在Keepalived服务正常工作时,主Master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备Backup节点自己还活着,当主Master节点发生故障时,就无法发送心跳消息,备节点 也就因此无法继续检测到来自主Master节点的心跳了,于是调用自身的接管程序,接管主Master节点的IP资源及服务。而当主Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。

那么什么是VRRP呢?

VRRP,全称为Virtual Router Redundancy Protocol,中文名为虚拟路由冗余协议,VRRP的出现就是为了解决静态路由的单点故障问题,VRRP是通过一种竞选机制来将路由的任务交给某台VRRP路由器的。

VRRP早期是用来解决交换机、路由器等设备单点故障的,下面是交换、路由的Master和Backup切换原理描述,同样也适用于Keepalived的工作原理。

在一组VRRP路由器集群中,有多台物理VRRP路由器,但是这多台物理的机器并不是同时工作的,而是由一台称为Master的机器负责路由工作,其他的机器都是Backup。Master角色并不是一成不变的,VRRP会让每个VRRP路由参与竞选,最终获胜的就是Master。获胜的Master有一些特权,比如拥有虚拟路由器的IP地址等,拥有系统资源的Master负责转发发送给网关地址的包和相应ARP请求。

VRRP通过竞选机制来实现虚拟路由的功能,所有的协议报文都是通过IP多播(Multicast)包(默认的多播地址为224.0.0.18)形式发送的。虚拟路由器由VRID(范围0-255)和一组IP地址组成,对外表现为一个众所周知的mac地址:00-00-5E-00-01-{VIDR}。所以,在一个虚拟路由器中,不管谁是Master,对外都是相同的MAC和IP(称之为VIP)。客户端主机并不需要因Master的改变而修改自己的路由配置。对他们来说,这种切换是透明的。

在一组虚拟路由器中,只有作为Master的VRRP路由器会一直发送VRRP广播包(VRRP Advertisement messages),此时Backup不会抢占Master。当Master不可用时,Backup就收不到来自Master的广播包了,此时多台Backup中优先级最高的路由器会抢占为Master。这种抢占是非常快速的(可能只有1s甚至更少),以保证服务的连续性。出于安全性考虑,VRRP数据包使用了加密协议进行了加密。

4、keepalived高可用服务单实例实战

配置keepalived主服务器lb01 Master


vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id <span style="color: #ff0000;">lb01</span>
}

vrrp_instance VI_1 {
    state <span style="color: #ff0000;">MASTER</span>
    interface eth0
    <span style="background-color: #00ffff;">virtual_router_id 51</span>
    priority <span style="color: #ff0000;">150</span>
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
	10.0.100.200/24 dev eth0 label eth0:1
    }
}

实战配置keepalived备服务器lb02 BACKUP

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id <span style="color: #ff0000;">lb02</span>
}

vrrp_instance VI_1 {
    state <span style="color: #ff0000;">BACKUP</span>
    interface eth0
    <span style="background-color: #00ffff;">virtual_router_id 51</span>
    priority <span style="color: #ff0000;">100</span>
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
	10.0.100.200/24 dev eth0 label eth0:1	
    }
}

5、关于Keepalived高可用服务器的“裂脑”问题
什么是裂脑:
由于某些原因,导致两台高可用服务器对在指定的时间内,无法检测到对方的心跳消息,各自取得资源及服务的所有权,而此时的两台高可用服务器对都还活着并且在正常运行,这样就会导致同一个IP或服务在两段同时存在而发生冲突,最严重的是两台主机占用同一个VIP地址,当用户写入数据时可能会分别写入到两端,这可能会导致服务器两段的数据不一致或造成数据丢失,这种情况就被成为裂脑。

导致裂脑的原因:

  1. 高可用服务器之间心跳线链路发生故障,导致无法正常通信。
  2. 高可用服务器上开启了iptables防火墙阻挡了心跳消息传输。
  3. 高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败。
  4. 其他服务配置不当等原因,如心跳方式不同,心跳广播冲突、软件bug等。

注意:Keepalived配置里同一VRRP实例如果virtual_route_id两端参数配置不一致,也会导致烈脑问题的发生。

转载请注明来源:joker的博客 » Keepalived高可用集群实践

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (2)

  1. I’ve been surfing online more than 4 hours today,
    yet I never found any interesting article like yours. It’s
    pretty worth enough for me. In my opinion, if
    all site owners and bloggers made good content as you did, the internet will be much more useful than ever before. http://yahoo.co.uk

    Bill2016-08-06 21:25 回复
    • Thanks a lot for reading my blog,I will be appreciated that if you can give me some advice for my articles.

      zhixiangjoy2016-08-07 22:41 回复