LVS + Keepalived 高可用集群部署

 

一、Keepalived工具

  • 集群需要满足的特点:负载均衡,健康检查,故障切换
  • 在应用中单台服务器承担负载应用存在单点故障的危险,一旦发生故障,企业服务将发生中断,造成损失
  • Keepalived工具专为LVS和HA(高可用)设计的一款健康检查工具

(1)支持故障自动切换(Failover)

(2)支持节点健康状态检查(Health Checking)

判断LVS负载调度器、节点服务器的可用性,当master主机出现故障即时切换到backup节点保证业务正常,当master故障主机恢复后将其重新加入群集并且业务重新切回master节点

(3)官方网站:http://www.keepalived.org/

 

二、Keepalived 及工作原理

Keepalived是一个基于底层协议是VRRP热备份协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。

1. 工作原理

在一个LVS服务集群中通常有主服务器 (MASTER)和备份服务器(BACKUP) 两种角色的服务器,但是对外表现为一个虚拟IP,主服务器会发送VRRP通告信息给备份服务器, 当备份服务器收不到VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。

2. Keepalived体系主要模块及其作用

  • keepalived体系架构中主要有三个模块,分别是core、check和vrrp。
  • core模块∶为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。
  • vrrp模块∶是来实现VRRP协议的。
  • check模块∶负责健康检查,常见的方式有端口检查及URIL检查。

3. VRRP(虚拟路由冗余协议)

  • 是针对路由器的一种备份解决方案
  • 多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务
  • 每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态
  • 若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务

工作原理

  • VRRP会把多台路由器组成一个虚拟路由器组vrid,VRRP会生成一个虚拟路由器 (包含虚拟IP和虚拟mac)
  • 局域网内的用户不关心哪个是主哪个是备,他们只用虚拟路由器的虚拟IP作为他们的网关实际上虚拟IP是承载在master路由器也就是说实际的数据包是通过master进行转发
  • masterbackup是通过优先级来决定哪个是master,优先级最大的那台就是 master其余小的都是backup
  • backup只是用来监听Master定时发来的vrrp报文,如果超时未收到 master 发来的vrrp报文backup就会抢占master地位虚拟IP也会一起漂移到backup 上

4. 故障转移机制

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

5. Keepalived 脑裂现象的产生,解决方法

1. 问题:

在一次故障切换后,原来的master并没有真正的挂掉 ,VIP还在而backup 则已经抢占master地位,并也在本地配置了VIP,本来为一整体、动作协调的HA系统,就分裂成为2个独立的个体。由于相互失去了联系,都以为是对方出了故障。两个节点上的HA软件像“裂脑人”一样,争抢“共享资源”、争起“应用服务”,就会发生严重后果——或者共享资源被瓜分、2边“服务”都起不来了;或者2边“服务”都起来了,但同时读写“共享存储”,导致数据损坏(常见如数据库轮询着的联机日志出错),这时客户端发送请求都能够做出响应造成资源的争夺

2. 解决方法:

(1)网络的层面来解决 再加一条链路需要一定的成本

(2)通过第三方监控软件的方式来解决 zabbix

监控服务器的状态,也监控网络的流量

(3)在本地通过脚本方式来解决

在master主机通过if判断是否能够ping通backup主机,ping不通2种可能性中间链路断掉了backup宕机再使用if判断使用ssh跳到某一台节点服务器ping backup主机 ,如果也ping 不通则判断backup宕机,如果Ping通则说明是中间链路问题链路问题就手动关闭maseter的keepalived工具,让backup主机顶上

(4)编写监控脑裂脚本

vim check_keepalived.sh

#!/bin/bash

state=$(ip addr show ens33 | grep 192.168.150.200 | wc -l)

while true

do

if [ $state -ne 0 ]

then

echo "建立VIP"

else

echo "未建立VIP"

fi

done

 

 

三、实验:LVS + Keepalived 高可用群集的搭建

LVS + Keepalived 高可用集群部署

上一篇:把参数用花括号括起来是什么意思


下一篇:.net 调用API并解析Json数据方法