暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Keepalived

成为DBA 2021-07-30
401

Keepalived介绍

keepalived是集群管理中保证集群高可用的一个服务软件,主要是防止单点故障问题。它与HeartBeat RoseHA 实现相同类似的功能,都可以实现服务或者网络的高可用,但是又有差别,HeartBeat是一个专业的、功能完善的高可用软件,它提供了HA 软件所需的基本功能,比如:心跳检测、资源接管,检测集群中的服务,在集群节点转移共享IP地址的所有者等等。HeartBeat功能强大,但是部署和使用相对比较麻烦。

Keepalived主要是通过虚拟路由冗余来实现高可用功能,虽然它没有HeartBeat功能强大,但是Keepalived部署和使用非常的简单,所有配置只需要一个配置文件即可以完成。

Keepalived工作原理

Keepalived 以 VRRP 协议为实现基础,用VRRP 协议来实现高可用性(HA)。VRRP(VirtualRouter Redundancy Protocol)协议是用于实现路由器冗余的协议,VRRP 协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器 IP(一个或多个)。

VRRP(虚拟路由冗余协议工作原理)

VRRP可以将两台或者多台物理路由器设备虚拟成一个虚拟路由,这个虚拟路由器通过虚拟IP(一个或者多个)对外提供服务,而在虚拟路由器内部十多个物理路由器协同工作,同一时间只有一台物理路由器对外提供服务,这台物理路由设备被成为:主路由器(Master角色),一般情况下Master是由选举算法产生,它拥有对外服务的虚拟IP,提供各种网络功能,如:ARP请求,ICMP数据转发等,而且其它的物理路由器不拥有对外的虚拟IP,也不提供对外网络功能,仅仅接收MASTER的VRRP状态通告信息,这些路由器被统称为“BACKUP的角色”,当主路由器失败时,处于BACKUP角色的备份路由器将重新进行选举,产生一个新的主路由器进入MASTER角色,继续提供对外服务。

Keepalived除了构建一个虚拟路由之外,还能检测集群中各节点的健康状况。Keepalived工作在网络层、传输层、应用层。

网络层:在网络层Keepalived在网络层采用最常见的工作方式是通过ICMP协议向服务器集群中的每一个节点发送一个ICMP数据包,如果某个节点没有返回响应数据包,那么认为该节点发生了故障,Keepalived将报告这个节点失效,并从服务器集群中剔除故障节点。

传输层:提供了两个主要的协议:传输控制协议TCP和用户数据协议UDP,传输控制协议TCP可以提供可靠的数据输出服务、IP地址和端口,代表TCP的一个连接端,要获得TCP服务,需要在发送机的一个端口和接收机的一个端口上建立连接,而Keepalived在传输层里利用了TCP协议的端口连接和扫描技术来判断集群节点的端口是否正常,比如对于常见的WEB服务器80端口。或者SSH服务22端口,Keepalived一旦在传输层探测到这些端口号没有数据响应和数据返回,就认为这些端口发生异常,然后强制将这些端口所对应的节点从服务器集群中剔除掉。

应用层:用户可以通过编写程序或者脚本来运行Keepalived,而Keepalived将根据用户的设定参数检测各种程序或者服务是否允许正常,如果Keepalived的检测结果和用户设定的不一致时,Keepalived将把对应的服务器从服务器集群中剔除

Keepalived配置文件

global_defs{

   notification_email {

     [email protected]          #设置报警邮件地址,每行一个

                              #需开启本机sendmail服务

   }

   notification_email_from [emailprotected]  #设置邮件发送地址

   smtp_server 192.168.200.1  #设置smtp server 地址

   smtp_connect_timeout 30    #设置连接 smtp server超时时间

   router_id LVS_DEVEL        #表运行Keepalived服务器的一个标志,邮件主题中显示

}

# vrrp实例定义部分

vrrp_instanceVI_1 {

    state MASTER              #指定keepalived的角色,MASTER表示此主机是主服器,BACKUP表示是备用服务器

    interface eth0              #指定HA监测网络的接口

    virtual_router_id 51         #虚拟路由标志,同一个vrrp实例使用一个唯一标志

                              #即同一个vrrp_instance下,MASTER和BACKUP一致

    priority 100               #优先级,数字越大优先级越高,MASTER必须大于BACKUP

    advert_int 1              #MASTER和BACKUP同步检查间隔,秒

    authentication {           #设定验证类型和密码

        auth_type PASS        #验证类型,PASS和HA

        auth_pass 1111        #验证密码,MASTER和BACKUP密码相同才能进行通信

    }

    virtual_ipaddress {        #虚拟ip地址

        192.168.200.16

        192.168.200.17

        192.168.200.18

    }

}

# 虚拟服务器定义部分

virtual_server192.168.200.100 443 {  #设定虚拟服务器,指定IP和端口

    delay_loop 6              #设置运行情况检查时间,秒

    lb_algo rr                #设置负载调度算法,rr--轮询算法

    lb_kind NAT               #设置LVS实现负载均衡机制  NAT/TUN/DR

    nat_mask 255.255.255.0    #

    persistence_timeout 50    #会话保持时间,秒,在50秒内用户无操作,接下来的请求

                              #将被分发到另外节点

    protocol TCP              #指定转发协议类型,TCP/UDP

 

    real_server 192.168.201.100 443 { #配置服务节点1,指定真实ip和端口

        weight 1              #服务节点的权值,数字越大权值越高

        TCP_CHECK {           #realserve的状态检测设置,秒

            connect_timeout 3  #3秒无反应超时

            nb_get_retry 3     #重试次数

            delay_before_retry 3  #重试间隔

        }

    }

}

 

出现的故障及其解决措施

脑裂故障:

当联系2节点的心跳线断裂,本来为一个整体、动作协调的HA 系统,分裂为两个个体,由于失去了联系,都认为对方出现了故障,从而开始争夺资源,就像脑裂一样,最终两个节点的服务都起不来(常见的数据库轮询着的联机日志出错)。

解决方案:

1、双线条线,减少‘脑裂’发生几率;

2.启用磁盘锁,当正在服务的一方发现心跳线全部断开时开启磁盘锁,(锁住共享磁盘),平时不上锁;

3.设置仲裁机制;

4.裂脑的监控报警。


文章转载自成为DBA,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论