Keepalived是一个免费开源的,用C编写的,具备第3层、第4层和第7层交换机的功能。主要提供loadbalancing(负载均衡)和 high-availability(高可用)功能,负载均衡实现需要依赖Linux的虚拟服务内核模块(ipvs),而高可用是通过VRRP协议实现多台机器之间的故障转移服务。
上图是Keepalived的功能体系结构,大致分两层:用户空间(user space)和内核空间(kernel space)。 内核空间:主要包括IPVS(IP虚拟服务器,用于实现网络服务的负载均衡)和NETLINK(提供高级路由及其他相关的网络功能)两个部分。
用户空间:
WatchDog:负载监控checkers和VRRP进程的状况
VRRP Stack:负载负载均衡器之间的失败切换FailOver,如果只用一个负载均稀器,则VRRP不是必须的。
Checkers:负责真实服务器的健康检查healthchecking,是keepalived最主要的功能。换言之,可以没有
VRRP Stack,但健康检查healthchecking是一定要有的。
IPVS wrapper:用户发送设定的规则到内核ipvs代码
Netlink Reflector:用来设定vrrp的vip地址等。
Keepalived的所有功能是配置keepalived.conf文件来实现的。
安装
[root@localhost ~]# yum install keepalived ipvsadm
[root@localhost ~]# rpm -ql keepalived
/etc/keepalived/keepalived.conf 主配置文件
/etc/sysconfig/keepalived
/usr/bin/genhash
/usr/lib/systemd/system/keepalived.service 启动脚本
配置文件说明
[root@localhost ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id maiya #路由id,不能重复
}
vrrp_instance lvs_inst { #定义vrrp实例名
state BACKUP #定义vrrp角色,分为MASTER/BACKUP两种
interface ens33 #指定网络接口名
virtual_router_id 51 #同一组的vrrp成员,该id需要一致
priority 150 #优先级,范围(0-255)
nopreempt #不抢占(只针对BACKUP生效)
advert_int 1 #发送hello的时间间隔
authentication { #通过密码身份验证
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #定义虚拟IP(VIP)
10.18.42.123
}
}
virtual_server 10.18.42.123 80 { #定义VIP相关配置
delay_loop 6
lb_algo rr #使用rr调度算法(rr|wrr|lc |wlc|lblc|sh|dh)
lb_kind DR #使用DR模式 (DR/NAT/TUN)
persistence_timeout 50 #定义persistence保持时间
protocol TCP #tcp协议
real_server 10.18.42.42 80 { #定义real_server
weight 1 #weight权重为1
TCP_CHECK { #定义checker的方法(TCP/HTTP/SSL/MISC)
connect_port 80 #定义tcp的port
connect_timeout 3 #定义本次连接的超时时长为3s
nb_get_retry 3 #定义尝试3次,如果3次都失败则宣告本real_server失效
delay_before_retry 3 #定义重连接间隔时间为3s