keepalived高可用 原理 及 部署

keepalived使专门为lvs设计的 最初只有管理和监控两大功能后来才加入了vrrp功能

keepalived 原理故障切换转移原理

针对高可用网卡 以bond0形式实现两个网卡绑定 从而实现高可用 预防脑裂

keepalived的高可用是基于vrrp协议的  

keepalived在lvs上具有三大功能: 管理   监控  高可用

管理lvs  对lvs后方的节点健康检查功能 作为网络系统的高可用功能

但是在其他服务上比如nginx haproxy mysql 上只具备高可用功能

vrrp 虚拟路由器冗余协议:

多个路由器预防单点   

1主路由器在工作状态时会不断群发一个广播包 (内涵优先参数)

2其他路由器收到广播包以后会进行优先级参数的比对 如果参数比自己优先那么其他路由器什么都不做 如果发现没有自己的优先 其他路由器就会启动争抢机制  它要成为主 来接管 工作

3如果启动争抢机制他就会开始群发广播包 告诉其他路由器他是主路由器  

同网段内 只能有一对keepalived 同一网段内 多对keepalived可通过增加网卡 让其广播包走专用网卡 网卡直接连接心跳线以达到区分的目的 但是keepalived还有另一种办法 修改他的广播包地址以达到区分的目的 但是太麻烦

而hardbeat是必须要采取心跳连接的方式才可以用的

keepalived主要主要针对lvs的 而hardbeat主要针对drbd的

部署keepalived 主从nginx高可用

   主nginx     挂载光盘

yum -y install keepalived  #主 安装 && 直接启动 /etc/init.d/keepalived start

从nginx    改在光盘

yum -y installkeepalived  && /etc/init.d/keepalived start

测试

然后 ifconfig 你看 你会发现一个新起来的网卡eth0 :1

关闭keepalived 然后vim /etc/keepalived/keepalived.conf  这是keepalived的配置文件


 所以过程中 最应该注意的就是这个router_id

上图所示 可通过修改eth0部分来决定高可用走哪个网卡

每个keep alived真实路由名 必须唯一

每组keepalived高可用对之间 实例名和路由名是一样的

主备之间依靠优先级参数来决定谁是主 谁是从

配的ip就是192.168.92.0/24 就是我们的vip

dev eth0 在eth0网卡上 

lable 别名 eth0:1

以上就是keepalived的高可用部分

当你都配置完以后就可以启动了并ifconfig 查看新生成的eth0:1 而这个就是我们两台机子之间的vip

然后就可以去从机进行设置了 设置完以后就可以进行vip了

而这时 我们连接就是基于vip进行连接 而不是基于原有的nginx节点ip进行连接

 

接下来就是keepalived的裂脑问题

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

一般来说,裂脑的发生,有以下几种原因:

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

所以为解决以上所述我们就要在从机上运行一个脚本 首先让它抓取vip 如果抓取不到那么一切正常 如果抓取到了首先 通知运维管理人员进行检查 其次 ping主机如果ping不通那说明是连接异常那就是裂脑问题 再次通知运维 如果能ping通 那就应该是各项服务没有配置好的问题 再次通知运维 这样也可以减小运维排查范围

那么 keepalived是为了预防nginx单点故障的高可用服务 但是 如果服务器没坏 nginx掉线了 keepalived却不知道 nginx是否掉线 而它还在一直发送这心跳包 这就无法形成高可用 所以要在注记点上运行一个监测nginx服务的包 一旦检测不到nginx服务那就认为是nginx掉线了 就需要立即通知运维 并且强行关闭主keepalived 即使将工作转移到被服务器 所以 主脚本需要监测nginx 并关闭keepalieved

备脚本 需要抓取vip 通过抓取及脚本里的其他细化功能实现排错范围缩小化,

keepalived会对自身网卡健康监测 如果发现物理网卡出问题就不会在进行资源争抢 就会停止自己的vip

 

posted @ 2018-06-16 14:27  liangyawang  阅读(295)  评论(0编辑  收藏  举报