概念
Keepalived概述
Keepalived起初是专门针对LVS设计的一款强大的辅助工具,主要用来提供故障切换和健康检查功能-----判断LVS负载调度器,节点服务器的可用性,及时隔离并替换为新的服务器,当故障主机恢复后将其重新加入群集中
Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
1.1Keepalived的工作原理
Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。
在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器,但是对外表现为一个虚拟IP,主服务器会发送VRRP通告信息给备份服务器,当备份服务器收不到VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。
1.2Keepalived体系主要模块及其作用
keepalived体系架构中主要有三个模块,分别是core、check和vrrp。
core模块:为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。
vrrp模块:是来实现VRRP协议的。
check模块:负责健康检查,常见的方式有端口检查及URL检查。
1.3 VRRP (虚拟路由冗余协议)
vrrp会把多台路由器组成一个虚拟路由组vrid,VRRP会生成一个虚拟路由(包含虚拟IP和虚拟MAC,局域网内用户不关心哪个是主哪个是备,他们只用虚拟路由器的的虚拟IP作为他们的网关)实际上虚拟IP是承载再master路由器,也就是说实际的数据通过master进行转发,backup是通过优先级来决定哪个是master路由,优先级最大的那台就是master,backup只是用来监听master定时发来的vrrp报文,如果超时未收到master发来的vrrp报文 backup就会抢占master 虚拟IP也就会一漂移到backup上
实例部署
2.1部署准备
centos 7.6
虚拟VIP:172.18.1.88
主服务器:172.18.1.29
被服务器:172.18.1.30
后端服务器1:172.18.1.67(主)
后端服务器2:172.18.1.68(备)
关闭防火墙
systemctl stop firewalld
关闭selinux
使用root用户
vi /etc/sysconfig/selinux
将SELINUX=enforcing修改成SELINUX=disabled
或直接执行
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
临时关闭selinux的
setenforce 0
查看
sestatus
安装keepalived服务
yum -y install keepalived ipvsadm
2.2主服务器配置
/etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lvs01 #router_id 机器标识,通常为hostname,但不一定非得是hostname。故障发生时,邮件通知会用到。
#指定发送VRRP组播消息使用的IPV4组播地址。默认是224.0.0.18
vrrp_mcast_group4 224.0.0.136
}
vrrp_instance VI_1 { #vrrp实例定义部分
state MASTER #设置lvs的状态,MASTER和BACKUP两种,必须大写
interface ens192 #设置对外服务的接口
virtual_router_id 100 #设置虚拟路由标示,这个标示是一个数字,同一个vrrp实例使用唯一标示
priority 100 #定义优先级,数字越大优先级越高,在一个vrrp——instance下,master的优先级必须大于backup
advert_int 1 #设定master与backup负载均衡器之间同步检查的时间间隔,单位是秒
authentication { #设置验证类型和密码
auth_type PASS #主要有PASS和AH两种
auth_pass 5Ne4c$&g #验证密码,同一个vrrp_instance下MASTER和BACKUP密码必须相同
}
virtual_ipaddress { #设置虚拟ip地址,可以设置多个,每行一个
172.18.1.88
}
}
virtual_server 172.18.1.88 15566 { #设置虚拟服务器,需要指定虚拟ip和服务端口
delay_loop 6 #健康检查时间间隔
lb_algo rr #负载均衡调度算法
lb_kind DR #负载均衡转发规则
persistence_timeout 50 #设置会话保持时间,对动态网页非常有用
protocol TCP #指定转发协议类型,有TCP和UDP两种
real_server 172.18.1.28 15566 { #配置服务器节点1,需要指定real server的真实IP地址和端口
weight 1 #设置权重,数字越大权重越高
TCP_CHECK { #realserver的状态监测设置部分单位秒
connect_timeout 10 #连接超时为10秒
retry 3 #重连次数
delay_before_retry 3 #重试间隔
connect_port 15566 #连接端口为80,要和上面的保持一致
}
}
real_server 172.18.1.29 15566 { #配置服务器节点1,需要指定real server的真实IP地址和端口
weight 1 #设置权重,数字越大权重越高
TCP_CHECK { #realserver的状态监测设置部分单位秒
connect_timeout 10 #连接超时为10秒
retry 3 #重连次数
delay_before_retry 3 #重试间隔
connect_port 15566 #连接端口为80,要和上面的保持一致
}
}
}
virtual_server 172.18.1.88 15566 { #设置虚拟服务器,需要指定虚拟ip和服务端口
delay_loop 6 #健康检查时间间隔
lb_algo rr #负载均衡调度算法
lb_kind DR #负载均衡转发规则
persistence_timeout 50 #设置会话保持时间,对动态网页非常有用
protocol UDP #指定转发协议类型,有TCP和UDP两种
real_server 172.18.1.28 15566 { #配置服务器节点1,需要指定real server的真实IP地址和端口
weight 1 #设置权重,数字越大权重越高
UDP_CHECK { #realserver的状态监测设置部分单位秒
connect_timeout 10 #连接超时为10秒
retry 3 #重连次数
delay_before_retry 3 #重试间隔
connect_port 15566 #连接端口为80,要和上面的保持一致
}
}
}
virtual_server 172.18.1.88 15566 { #设置虚拟服务器,需要指定虚拟ip和服务端口
delay_loop 6 #健康检查时间间隔
lb_algo rr #负载均衡调度算法
lb_kind DR #负载均衡转发规则
persistence_timeout 50 #设置会话保持时间,对动态网页非常有用
protocol UDP #指定转发协议类型,有TCP和UDP两种
real_server 172.18.1.29 15566 { #配置服务器节点1,需要指定real server的真实IP地址和端口
weight 1 #设置权重,数字越大权重越高
UDP_CHECK { #realserver的状态监测设置部分单位秒
connect_timeout 10 #连接超时为10秒
retry 3 #重连次数
delay_before_retry 3 #重试间隔
connect_port 15566 #连接端口为80,要和上面的保持一致
}
}
2.3备服务器配置
/etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lvs01 #router_id 机器标识,通常为hostname,但不一定非得是hostname。故障发生时,邮件通知会用到。
#指定发送VRRP组播消息使用的IPV4组播地址。默认是224.0.0.18
vrrp_mcast_group4 224.0.0.136
}
vrrp_instance VI_1 { #vrrp实例定义部分
state MASTER #设置lvs的状态,MASTER和BACKUP两种,必须大写
interface ens192 #设置对外服务的接口
virtual_router_id 100 #设置虚拟路由标示,这个标示是一个数字,同一个vrrp实例使用唯一标示
priority 90 #定义优先级,数字越大优先级越高,在一个vrrp——instance下,master的优先级必须大于backup
advert_int 1 #设定master与backup负载均衡器之间同步检查的时间间隔,单位是秒
authentication { #设置验证类型和密码
auth_type PASS #主要有PASS和AH两种
auth_pass 5Ne4c$&g #验证密码,同一个vrrp_instance下MASTER和BACKUP密码必须相同
}
virtual_ipaddress { #设置虚拟ip地址,可以设置多个,每行一个
172.18.1.88
}
}
virtual_server 172.18.1.88 15566 { #设置虚拟服务器,需要指定虚拟ip和服务端口
delay_loop 6 #健康检查时间间隔
lb_algo rr #负载均衡调度算法
lb_kind DR #负载均衡转发规则
persistence_timeout 50 #设置会话保持时间,对动态网页非常有用
protocol TCP #指定转发协议类型,有TCP和UDP两种
real_server 172.18.1.28 15566 { #配置服务器节点1,需要指定real server的真实IP地址和端口
weight 1 #设置权重,数字越大权重越高
TCP_CHECK { #realserver的状态监测设置部分单位秒
connect_timeout 10 #连接超时为10秒
retry 3 #重连次数
delay_before_retry 3 #重试间隔
connect_port 15566 #连接端口为80,要和上面的保持一致
}
}
real_server 172.18.1.29 15566 { #配置服务器节点1,需要指定real server的真实IP地址和端口
weight 1 #设置权重,数字越大权重越高
TCP_CHECK { #realserver的状态监测设置部分单位秒
connect_timeout 10 #连接超时为10秒
retry 3 #重连次数
delay_before_retry 3 #重试间隔
connect_port 15566 #连接端口为80,要和上面的保持一致
}
}
}
virtual_server 172.18.1.88 15566 { #设置虚拟服务器,需要指定虚拟ip和服务端口
delay_loop 6 #健康检查时间间隔
lb_algo rr #负载均衡调度算法
lb_kind DR #负载均衡转发规则
persistence_timeout 50 #设置会话保持时间,对动态网页非常有用
protocol UDP #指定转发协议类型,有TCP和UDP两种
real_server 172.18.1.28 15566 { #配置服务器节点1,需要指定real server的真实IP地址和端口
weight 1 #设置权重,数字越大权重越高
UDP_CHECK { #realserver的状态监测设置部分单位秒
connect_timeout 10 #连接超时为10秒
retry 3 #重连次数
delay_before_retry 3 #重试间隔
connect_port 15566 #连接端口为80,要和上面的保持一致
}
}
}
virtual_server 172.18.1.88 15566 { #设置虚拟服务器,需要指定虚拟ip和服务端口
delay_loop 6 #健康检查时间间隔
lb_algo rr #负载均衡调度算法
lb_kind DR #负载均衡转发规则
persistence_timeout 50 #设置会话保持时间,对动态网页非常有用
protocol UDP #指定转发协议类型,有TCP和UDP两种
real_server 172.18.1.29 15566 { #配置服务器节点1,需要指定real server的真实IP地址和端口
weight 1 #设置权重,数字越大权重越高
UDP_CHECK { #realserver的状态监测设置部分单位秒
connect_timeout 10 #连接超时为10秒
retry 3 #重连次数
delay_before_retry 3 #重试间隔
connect_port 15566 #连接端口为80,要和上面的保持一致
}
}
2.4配置 Real Server
在 Real Server 2台服务器的网卡上配置 lo 为 VIP。配置脚本如下
SNS_VIP和keepalived中的VIP保持一至,255.255.255.255不要修改就这样
vim /etc/keepalived/lvs-dd
#!/bin/sh
VIP=172.18.1.88
. /etc/rc.d/init.d/functions
case $1 in
start)
echo "lo:0 port starting"
# 为脕脧应lvs碌梅梅垄鹿媒眉卤戮碌脴o陆涌脷习贸ip
ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
# 脧脰arp脟脟
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
;;
stop)
echo "lo:0 port closing"
ifconfig lo:0 down
echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
;;
*)
echo "Usage: $0 {start | stop}"
exit 1
esac
测试:
因为后台程序并不是nginx活tomcat界面,故使用命令telnet和nc测试
telnet 172.18.1.88 15566
nc -uzv 172.18.1.88 15566
注:
1.在VIP设备不会监听15566端口
2.后台服务器不可与keepalived同一台设备
总结:
通过搭建Keepalived+LVS(DR)这两个服务,可以进一步健康检查、持久化、连接超时等参数来优化负载均衡和故障恢复。无论是Keepalived双机热备还是Keepalived+LVS(DR),都需要确保网络配置正确、Keepalived服务正常运行以及实时监控服务状态。这样可以实现高可用性和负载均衡,提高系统的稳定性和可靠性。