Keepalived工具介绍
专为LVS和HA设计的一款健康检查工具
一个合格的集群应该具备的特性:
1.负载均衡 LVS Nginx HAProxy F5
2.健康检查(探针) for调度器/节点服务器 Keeplived Hearbeat
3.故障转移 通过VIP飘逸实现主备切换
健康检查(探针)的方式
1.发送心跳消息:ping/pong
2.TCP端口检查:向目标主机的ip:端口发起TCP连接请求,如果TCP连接成功(三次握手成功)则认为健康检查探测成功,反之认为健康检查失败
3.HTTP URL检查:向目标主机的http://ip:端口/URL路径 发送HTTP GET请求方法
如果响应返回2xx,3xx状态码则认为健康检查成功
如果响应返回4xx,5xx状态码,则认为健康检查失败
LVS+keepalived群集
Keepalived工作原理:
-
keepalived是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现单点故障问题。
-
Keepalived采用VRRP热备份协议,实现Linux服务器的多机热备
-
在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器,但是对外表现为一个虚拟IP,主服务器会发送VRRP通告信息给备份服务器,当备份服务器收不到VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性
Keepalived体系主要模块及其作用:
keepalived体系架构中主要有三个模块,分别是core、check和vrrp。 ●core模块:为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。 ●vrrp模块:是来实现VRRP协议的。(调度器之间的健康检查和主备切换) ●check模块:负责健康检查,常见的方式有端口检查及URL检查。(节点服务器的健康检查)
脑裂故障(现象、原因、解决、预防)
现象:主服务器和备服务器同时拥有VIP
原因:因为主服务器和备服务器之间的通信链路中断,导致备服务器无法收到主服务器发送的VRRP心跳通告消息
解决:关闭主服务器或者备份服务器其中一个的keepalived服务
预防:1.主服务器和备服务器之间添加双链路通信
2.在主服务器上添加脚本进行判断与备服务器通信链路是否终端,如果确实是链路中断则自行关闭 keepalived服务
3.利用第三方应用或监控系统检测是否发生脑裂故障,如果发生脑裂故障则通过第三方应用或监控系统来关闭主服务器或备服务器上的keepalived服务
部署LVS+Keepalived 高可用群集
主DR 服务器: 192.168.237.10
备DR 服务器: 192.168.237.40
Web 服务器1: 192.168.116.20
Web 服务器2: 192.168.116.30
nfs 服务器: 192.168.116.10
客户端:192.168.116.128
vip:192.168.116.200
配置负载调度器(主、备相同)
systemctl stop firewalld.service
setenforce 0
配置本地yum仓库
yum -y install keepalived
cd /etc/keepalived
vim keepalived.conf
1 ! Configuration File for keepalived
2
3 global_defs {
4 notification_email {
5 acassen@firewall.loc
6 failover@firewall.loc
7 sysadmin@firewall.loc
8 }
9 notification_email_from Alexandre.Cassen@firewall.loc
10 smtp_server 127.0.0.1
11 smtp_connect_timeout 30
12 router_id LVS_01
13 }
14
15 vrrp_instance VI_1 {
16 state MASTER
17 interface ens33
18 virtual_router_id 51
19 priority 100
20 advert_int 1
21 authentication {
22 auth_type PASS
23 auth_pass 1111
24 }
25 virtual_ipaddress {
26 192.168.116.200
27 }
28 }
~
主:
备:
systemctl start keepalived #开启
主:
备:
配置节点服务器
准备页面
cd /usr/share/nginx/html
echo '<h1>this is web01 test page</h1>' < test.html
配置内核
vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2sysctl -p
添加路由
route add -host 192.168.116.200 dev lo:0