介绍
-
Keepalived软件起初是专门为LVS负载均衡软件设计的用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务的高可用解决方案软件。
-
Keepalived软件主要是通过VRRP协议实现高可用功能的,VRRP是Virtual Router Redundancy Protocol(虚拟路由器冗余协议)的缩写.VRRP出现的目的就是为了解决静态路由单点故障问题的.
VRRP原理
- master在工作状态会不断群发一个广播包(内涵优先参数)
- 其他路由收到收到广播后会和自己的优先参数作对比,如果优先参数小于自己则什么都不执行,如果优先参数大于自己则开启争抢机制
- 如果启动了争抢机制,他就会群发自己的优先参数,最终优先参数最小的称为master路由.
- keepalived的三个核心模块
- core核心模块
- chech健康监测
- vrrp虚拟路由冗余协议
Keepalived服务的三个重要功能
- 管理LVS
- 对LVS集群节点检查
- 作为系统网络服务的高可用功能
Keepalived高可用故障切换转移原理
-
Keepalived高可用故障切换,是通过VRRP虚拟路由器冗余协议来实现的。
-
在Keepalived服务正常工作时,主Master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备Backup节点自己还活着,当主Master节点发生故障时,就无法发送心跳消息,备节点无法检测到来自主Master节点心跳了,于是调用自身的接管程序,接管主Master节点的IP资源及服务。而当主Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。
-
主路由器(MASTER):虚拟路由器通过虚拟IP对外提供服务,而在虚拟路由器内部同一时间只有一台物理路由器对外提供服务,这台提供服务的物理路由器被称为主路由器。一般情况下Master是由选举算法产生,它拥有对外服务的虚拟IP,提供各种网络功能,如:ARP请求,ICMP数据转发等。
-
备份路由器(BACKUP):虚拟路由器中的其他物理路由器不拥有对外的虚拟IP,也不对外提供网络功能,仅接受MASTER的VRRP状态通告信息,这些路由器被称为备份路由器。当主路由器失败时,处于BACKUP角色的备份路由器将重新进行选举,产生一个新的主路由器进入MASTER角色,继续提供对外服务,整个切换对用户来说是完全透明的。
keepalived搭建
#安装keepalived
yum -y install keepalived
#修改keepalived配置文件
vim /etc/keepalived/keepalived.conf
- 配置文件说明
! Configuration File for keepalived
global_defs { #全局定义部分
notification_email { #设置警报邮箱
acassen@firewall.loc #邮箱
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc #设置发件人地址
smtp_server 192.168.50.1 #设置smtp server地址
smtp_connect_timeout 30 #设置smtp超时连接时间 以上参数可以不配置
router_id LVS_DEVEL #是Keepalived服务器的路由标识在一个局域网内,这个标识(router_id)是唯一的
}
vrrp_instance VI_1 { #VRRP实例定义区块名字是VI_1
state MASTER #表示当前实例VI_1的角色状态这个状态只能有MASTER和BACKUP两种状态,并且需要大写这些字符ASTER为正式工作的状态,BACKUP为备用的状态
interface eth0
virtual_router_id 51 #虚拟路由ID标识,这个标识最好是一个数字,在一个keepalived.conf配置中是唯一的, MASTER和BACKUP配置中相同实例的virtual_router_id必须是一致的.
priority 100 #priority为优先级 越大越优先
advert_int 1 #为同步通知间隔。MASTER与BACKUP之间通信检查的时间间隔,单位为秒,默认为1.
authentication { #authentication为权限认证配置不要改动,同一vrrp实例的MASTER与BACKUP使用相同的密码才能正常通信。
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #设置虚拟IP地址
192.168.50.16 #此格式ip a显示 ifconfig不显示
192.168.50.17/24 dev eth0 label eth0:1 #绑定接口为eth0,别名为eth0:1
}
#至此为止以上为实现高可用配置,如只需使用高可用功能下边配置可删除
#以下为虚拟服务器定义部分
virtual_server 192.168.50.16 80 { #设置虚拟服务器,指定虚拟IP和端口
delay_loop 6 #健康检查时间为6秒
lb_algo rr #设置负载调度算法 rr算法
lb_kind DR #设置负载均衡机制 #有NAT,TUN和DR三种模式可选
nat_mask 255.255.255.0 #非NAT模式注释掉此行 注释用!号
persistence_timeout 50 #连接保留时间,50秒无响应则重新分配节点
protocol TCP #指定转发协议为TCP
real_server 192.168.5.150 80 { #RS节点1
weight 1 #权重
TCP_CHECK { #节点健康检查
connect_timeout 8 #延迟超时时间
nb_get_retry 3 #重试次数
delay_before_retry 3 #延迟重试次数
connect_port 80 #利用80端口检查
}
}
real_server 192.168.50.149 80 { #RS节点2
weight 1
TCP_CHECK {
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
lvs+keepalived集群架构服务
-
LVS负载均衡高可用防止单点故障
-
keepalived负责管理lvs,检查lvs节点,实现高可用
-
实验环境
-
四台虚拟机:rhel7.6(我在VMware下完成)
hostname;IPADDR
server1 192.168.43.1
server2 192.168.43.2
server3 192.168.43.3
server4 192.168.43.4 -
关闭 firewalld selinux ,配置好yum源,disable NetworkManager
-
server1和server2充当DS(Director Server)
-
server1为主路由器,server2为备路由器
-
server3和server4充当RS (Real Server)
-
DS负载均衡器端(server1和server2)中:
- yum -y install ipvsadm
- 添加绑定VIP
- ip addr add 192.168.0.89/24 dev ens33 label eth0:1
- 配置LVS-DR模式
- ipvsadm -A -t 192.168.43.100:80 -s rr #创建一个DR,并指定调度算法采用rr。
- ipvsadm -a -t 192.168.43.100:80 -r 192.168.43.3 -g #添加RS
- ipvsadm -a -t 192.168.43.100:80 -r 192.168.43.3 -g #添加RS
- RS配置(server3和server4)
yum install -y httpd
- systemctl enable --now httpd
- ip addr add 192.168.43.100/24 dev ens33
- yum install -y arptables
- arptables -A INPUT -d 192.168.43.100 -j DROP
- arptables -A OUTPUT -s 192.168.43.100 -j mangle --mangle-ip-s 192.168.43.3(这里修改为RS的实际地址)
- LVS负载均衡器主的keepalived配置文件(server1中)
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
#IP漂移协议
vrrp_instance VI_1 {
state MASTER#角色是master
interface ens33 #vip 绑定端口
virtual_router_id 51#让master 和backup在同一个虚拟路由里,id 号必须相同;
priority 100#优先级,谁的优先级高谁就是master
advert_int 1 #心跳间隔时间
authentication {
auth_type PASS#认证
auth_pass 1111#密码
}
virtual_ipaddress {
192.168.43.100#虚拟ip 绑定VIP
}
}
#只接收80端口过来的请求
virtual_server 192.168.43.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
#persistence_timeout 50
protocol TCP
#RS服务器1
##健康检查
real_server 192.168.43.3 80 {
weight 1
TCP_CHECK {
connect_timeout 3#连接超时时间
nb_get_retry 3#重连次数
delay_before_retry 3#重连间隔
}
}
#RS服务器2
##健康检查
real_server 192.168.43.4 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
- LVS负载均衡器备的keepalived配置文件(server2中)
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.43.100
}
}
virtual_server 192.168.43.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
#persistence_timeout 50
protocol TCP
real_server 192.168.46.3 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.43.4 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
- 上面配置的keepalived可以实现两个功能,健康检查和冗余检测
- 即当server3和server4(RS)其中挂掉一台时,就不进行轮询,直接访问痛的那一台后端服务器
- 当server1和server2(调度器)挂掉一台时,当master挂掉,backup会及时跟上,当master恢复,backup又自动退出。