博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
keepalived高可用
阅读量:3963 次
发布时间:2019-05-24

本文共 4079 字,大约阅读时间需要 13 分钟。

第一章 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 keepalivedglobal_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.confglobal_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裂脑的脚本"

转载地址:http://zngzi.baihongyu.com/

你可能感兴趣的文章
64位int类型用printf输出问题
查看>>
进程的状态转换
查看>>
如何查看进程的信息(线程数)
查看>>
Linux中的chage命令
查看>>
linux-详细解析密码文件passwd与shadow
查看>>
su- 与su的区别
查看>>
linux下发邮件mail
查看>>
echo如何手动输出换行
查看>>
身份证的正确使用方法——非常重要的知识
查看>>
ExtJS & Ajax
查看>>
Tomcat在Windows下的免安装配置
查看>>
JMeter常用测试元件
查看>>
JMeter——使用技巧
查看>>
Hibernate 实体层设计--Table per subclass
查看>>
Ruby解决方案:The 'ffi' native gem requires installed build tools ; 含最新DevKit下载地址
查看>>
Python之操作MySQL数据库(二)
查看>>
简单介绍如何使用robotium进行自动化测试
查看>>
Python之操作XML文件
查看>>
eclipse+ADT 进行android应用签名详解
查看>>
Robotium只有apk文件例如Music.apk
查看>>