专为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状态码,则认为健康检查失败
keepalived是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现单点故障问题。
Keepalived采用VRRP热备份协议,实现Linux服务器的多机热备
在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器,但是对外表现为一个虚拟IP,主服务器会发送VRRP通告信息给备份服务器,当备份服务器收不到VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性
keepalived体系架构中主要有三个模块,分别是core、check和vrrp。 ●core模块:为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。 ●vrrp模块:是来实现VRRP协议的。(调度器之间的健康检查和主备切换) ●check模块:负责健康检查,常见的方式有端口检查及URL检查。(节点服务器的健康检查)
现象:主服务器和备服务器同时拥有VIP
原因:因为主服务器和备服务器之间的通信链路中断,导致备服务器无法收到主服务器发送的VRRP心跳通告消息
解决:关闭主服务器或者备份服务器其中一个的keepalived服务
预防:1.主服务器和备服务器之间添加双链路通信
2.在主服务器上添加脚本进行判断与备服务器通信链路是否终端,如果确实是链路中断则自行关闭 keepalived服务
3.利用第三方应用或监控系统检测是否发生脑裂故障,如果发生脑裂故障则通过第三方应用或监控系统来关闭主服务器或备服务器上的keepalived服务
主DR 服务器: 192.168.237.10
备DR 服务器: 192.168.237.40
Web 服务器1: 192.168.116.20
Web 服务器2: 192.168.116.30
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 }
~ ? ? ? ? ? ?
?主:
添加真实服务器的配置:
? ? ?30 virtual_server 192.168.116.200 80 {
? ? ?31 ? ? delay_loop 6
? ? ?32 ? ? lb_algo rr
? ? ?33 ? ? lb_kind DR
? ? ?34 ? ? persistence_timeout 0
? ? ?35 ? ? protocol TCP
? ? ?36?
? ? ?37 ? ? real_server 192.168.116.20 80 {
? ? ?38 ? ? ? ? weight 1
? ? ?39 ? ? ? ? TCP_CHECK {
? ? ?40 ? ? ? ? ? ? connect_port 80
? ? ?41 ? ? ? ? ? ? connect_timeout 3
? ? ?42 ? ? ? ? ? ? nb_get_retry 3
? ? ?43 ? ? ? ? ? ? delay_before_retry 3
? ? ?44 ? ? ? ? }
? ? ?45 ? ? }
? ? ?46 ? ? real_server 192.168.116.30 80 {
? ? ?47 ? ? ? ? weight 1
? ? ?48 ? ? ? ? TCP_CHECK {
? ? ?49 ? ? ? ? ? ? connect_port 80
? ? ?50 ? ? ? ? ? ? connect_timeout 3
? ? ?51 ? ? ? ? ? ? nb_get_retry 3
? ? ?52 ? ? ? ? ? ? delay_before_retry 3
? ? ?53 ? ? ? ? }
? ? ?54 ? ? }
? ? ?55 }
? ? ?56?
将主的配置文件发送去备的当前位置,文件取名为pwd
scp keepalived.conf 192.168.116.40:'pwd'
?备:
systemctl start keepalived? ? ?#开启
ip add? ? ? ? ? ? #查看虚拟网卡vip
主:
备:
安装ipvsadm工具(两台都要安装)
yum install -y ipvsadm
ipvsadm-save > /etc/sysconfig/ipvsadm systemctl start ipvsadm
ipvsadm -ln 检查是否有策略
准备页面? ?
cd /usr/share/nginx/html
web1:echo '<h1>this is web01 test page</h1>' > test.html
web2:echo '<h1>this is web01 test page</h2>' > 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