keepalived高可用

第一章 keepalived介绍

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

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

第二章 keepalived服务的重要功能

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

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

keepalived高可用功能实现的基本原理为:
两台主机同时安装好keepalived软件并启动服务,开始正常工作时
角色为Master的主机获得所有资源并对用户提供服务
角色为Backup的主机作为Master主机的热备;

当角色为Master的主机失效或出现故障时
角色为Backup的主机将自动接管Master主机的所有工作,包括接管VIP资源及相应资源服务

而当角色为Master的主机故障修复后,又会自动接管回他原来处理的工作
角色为Backup的主机则同时释放Master主机失效时他接管的工作
此时,两台主机将恢复到启动时各自的原始角色及工作状态

2.2 什么是VRRP

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

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

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

**

3.4 keepalived配置文件说明

**

! 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 LVS_DEVEL    #本服务器的名称,若环境中有多个keepalived时,此名称不能一致
}

vrrp_script chk_web{
	script "/usr/local/sbin/check_ng.sh"  --定义需要监控的脚本(脚本是执行权限)
	interval 3                            --执行脚本的间隔时间	
	weigth 2
}

vrrp_instance VI_1 {               #vrrp协议家族,主备要一致
    state MASTER                   #标识所在家族的身份
    interface ens33                #承载VIP地址的物理接口
    virtual_router_id 51           #标识家族身份信息, 虚拟路由器的ID号,(主备要一致)每一个keep组都不同
    priority 100                   #优先级,数值越大优先级越高
    advert_int 1
    authentication {               #通讯需要认证
        auth_type PASS             ##认证类型
        auth_pass 1111             ##密码字串
    }
    virtual_ipaddress {
        192.168.8.100 
    }
	
	track_script {     ---调用执行脚本信息 

chk_web
}
}

设置主恢复不强占vip

描述:主服务器有问题,虚拟ip会切换到从服务器上,如果主恢复了,会把vip强占过来,这边设置不强占

主库 配置

[root@mysqltest ~]# more /etc/keepalived/keepalived.conf

global_defs {
    router_id mysqlmha
}

vrrp_script check_run {
   script "/etc/keepalived/check_mysql.sh"
   interval 1
}

vrrp_instance VI_1 {
    state BACKUP     --这里状态指定为backup
    interface eth0
    virtual_router_id 151
    priority 100
    advert_int 1
    nopreempt         --设置 nopreempt 防止抢占资源
    authentication {
        auth_type PASS
        auth_pass 1111
    }

    track_script {
        check_run
    }
    virtual_ipaddress {
        192.168.66.53
    }
}		

keepalived高可用服务器的裂脑问题

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

5.2 导致裂脑发生的原因
一般来说,裂脑的发生,有以下几种原因
 高可用服务器对之间心跳线链路发生故障,导致无法正常通信
 心跳线坏了(包括断了,老化)
 网卡及相关驱动坏了,IP配置及冲突问题(网卡直连)
 心跳线之间连接的设备故障(网卡及交换机)
 仲裁的机器出问题了(采用总裁的方案)
 高可用服务器上开启了iptables防火墙阻挠了心跳信息传输
 高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败
 其他服务配置不当等原因,如心跳方式不同,心跳广播冲突,软件bug等.

5.3 解决裂脑的常见方法
在实际成产环境中,我们可以从以下几个方面来防止裂脑问题发生:

同时使用串行电缆和以太网电缆连接,同时用两条心跳线,这样一条线路坏了,另一个还是好的,依然能传送心跳信息.

当检测到裂脑时强行关闭一个心跳节点(这个功能需要特殊设备支持,如stonith,fence)相当于备节点接收不到心跳信息,通过单独的线路发送命令关闭主节点的电源.

做好对裂脑的监控报警(如邮件及手机短信等或值班),在问题发生时人为第一时间介入仲裁,降低损失.

5.4 解决keepalived裂脑的常见方案
作为互联网应用服务器的高可用,特别是前端web负载均衡器的高可用,裂脑的问题对普遍业务的影响是可容忍的,如果是数据库或者存储的业务,一般出现裂脑问题就非常严重了.因此,通过增加冗余心跳线来避免裂脑问题发生,同时加强了对系统的监控.

如果开启防火墙,一定要让心跳消息通过.一般通过允许IP段的形式解决
可以拉一条以太网网线或者串口线作为主备节点心跳线路的冗余
开发检测程序通过监控软件检测裂脑,如zabbix检测如果主备都有VIP就报警.
比较严谨的判断,备节点出现对应VIP,并且主节点及对应服务(如果能远程连接主节点看是否有VIP就更好了)还活着,就说明发生裂脑了.
具体监控系统裂脑的脚本见文章结尾"开发检测keepalived裂脑的脚本"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值