LVS+Keepalived 群集

1,778 阅读5分钟

Keepalived实现原理

实际应用中,单台服务器承担应用存在单点故障的危险。
单点故障一旦发生,服务将发生中断,造成极大的损失。 image.png

Keepalived工具介绍

专为LVS和HA设计的一款健康检查工具

  • 支持故障自动切换
  • 支持节点健康状态检查

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

一个合格的集群系统应该满足的条件

  1. 负教均衡
  2. 健康检查:及时的发现有异常的节点服务器或者调度器
  3. 故障切换:及时的进行服务器切换保证服务的正常运行

实现原理剖析

Keepalived采用VRRP热备份协议,实现Linux服务器的多机热备功能

VRRP(虚拟路由冗余协议)是针对路由器的一种备份解决方案

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

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

image.png

Keepalived体系主要模块及其作用

keepalived体系架构中主要有三个模块,分别是core、check和vrrp

  • core模块:为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。
  • vrrp模块:是来实现VRRP协议的。(调度器之间的健康检查和主备切换)
  • check模块:负责健康检查,常见的方式有端口检查及URL检查。(节点服务器的健康检查)

补充:常见的3种健康检查方式

  • 心跳检查(ping/pong):给对端发送ping请求报文,如果正常回复pong响应报文则认为正常,如没有回复或回复异常则认为健康检查失败
  • 端口检查:对socket套接字(ip:port)进行tcp连接测试(三次握手),如果tcp连接成功则认为正常,如果tcp连接异常则认为健康检查失败
  • URL检查:对http://URLhttps://URL 进行get方法请求,获取响应状态码,如果状态码为>=200且<400则认为正常,如果状态码为>=400的则认为异常

Keepalived的部署

  1. 主服务器yum安装keepalived image.png

  2. 先备份配置文件/etc/keepalived/keepalived.conf,然后修改配置文件 image.png image.png

  3. 备服务器yum安装keepalived

  4. 主服务器将keepalived.conf导入到备服务器 image.png

  5. 修改被服务器配置文件 image.png

  6. 两边关闭防火墙和selinux,启动keepalived服务 image.png

  7. ip addr查看虚拟IP地址(因为keepalived是通过ip生成地址) image.png image.png

  8. 关闭掉主的服务(或者主服务器关机),模拟主服务器挂掉,再查看虚拟IP地址 image.png image.png

LVS+Keepalived高可用集群部署

准备工作

  • 主 DR 服务器:192.168.44.20
  • 备 DR 服务器:192.168.44.30
  • Web 服务器1:192.168.44.40
  • Web 服务器2:192.168.44.50
  • vip:192.168.44.100
  • 客户端:192.168.44.60

步骤

  1. 配置负载调度器(主、备相同)

    • 关闭防火墙和selinux image.png

    • 安装ipvsadm和keepalived,加载LVS内核模块 image.png image.png

    • 配置keeplived(主、备DR 服务器上都要设置) image.png image.png image.png

    • 启动 ipvsadm 服务 image.png

    • 调整 proc 响应参数,关闭Linux 内核的重定向参数响应 image.png

  2. 配置节点服务器

    • 关闭防火墙和selinux image.png

    • 配置虚拟 IP 地址(VIP:192.168.44.100)
      此地址仅用作发送 Web响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器监听并分发)。因此使用虚拟接口 lo∶0 来承载 VIP 地址,并为本机添加一条路由记录,将访问 VIP 的数据限制在本地,以避免通信紊乱。 image.png image.png image.png

      • 如果需要开机自启,在/etc/rc.local加入执行命令,并赋予文件权限,就能开机自动执行。 image.png image.png
    • 调整内核的 ARP 响应参数以阻止更新 VIP 的 MAC 地址,避免发生冲突 image.png image.png

    • 安装httpd,准备好页面并开启服务 image.png image.png image.png image.png

    • 如果做了nfs,还需安装nfs-utils和 rpcbind,并挂载

  3. 客户机访问192。168.44.100测试验证

有关Keepalived的问题

Keepalived通过什么判断哪台主机为主服务器,通过什么方式配置浮动IP?

Keepalived首先做初始化先检查state状态,master为主服务器,backup为备服务器。
然后再对比所有服务器的priority,谁的优先级高谁是最终的主服务器。
优先级高的服务器会通过ip命令为自己的电脑配置一个提前定义好的浮动IP地址。

keepalived的抢占与非抢占模式

抢占模式即MASTER从故障中恢复后,会将VIP从BACKUP节点中抢占过来。非抢占模式即MASTER恢复后不抢占BACKUP升级为MASTER后的VIP。
非抢占式俩节点state必须为bakcup,且必须配置nopreempt。
注意:这样配置后,我们要注意启动服务的顺序,优先启动的获取master权限,与优先级没有关系了。

keepalived的脑裂现象

主备调度器都出现VTP(因为主备服务器之间的网络中断导致备服务器接收不到主服务器发送的vrrp通告报文。)

解决方案

  1. 主备服务器之间使用双链路通信
  2. 通过脚本来实时监控主备的网络状态,然后再根据脚本逻辑采取措施(关掉主服务器的keepalived服务器)
  3. 通过第三方监控系统来实时监控主备服务器及网络状态,然后再根据情况采取措施(关掉主服务器的keepalived服务器)