KEEPALIVED
Keepalived本质上就是解决调度器单点失败问题时,针对VIP进行浮动变换,从而实现多个调度器之间主从或者主主的HA
Keepalived是基于VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议进行工作
Keepalived本身可以直接定义LVS策略,进行健康性检查
Keepalived配合LVS实现原理:
将多个LVS服务器集成为一个虚拟的路由器Virtual Router,虚拟路由设定VIP连接外部网络,根据自行设定的每个LVS的优先级高低,来决定哪个LVS服务器绑定VIP提供调度服务,若出现故障,则自动按照优先级顺序进行VIP地址转移,继续实现LVS调度,实现HA
其中每个LVS之间需要通过多播地址,将自己的优先级顺序通知给其他LVS服务器,多播地址是D类:前八位224~239
单个VR,是LVS主/备的工作模式
多个VR,则可实现LVS主/主的工作模式,原理是VR-1中LVS的主/备关系,在VR-2中进行反转,可充分利用LVS服务器
Keepalived的程序软件是keepalived,主配置文件/etc/keepalived/keepalived.conf,主要分为以下三部分:
1.Global 全局配置
global_defs {
notification_email {
acassen@firewall.loc (自定义当keepalived出现故障时,接收信息的邮箱地址)
}
notification_email_from Alexandre.Cassen@firewall.loc (自定义发邮件的信息地址,需配合邮件服务)
smtp_server IP (填写发送邮件的IP)
smtp_connect_timeout 30 (定义邮件发送的超时时长)
router_id LVS_DEVEL (定义keepalived的编号标识)
vrrp_mcast_group4 D类地址 (定义多播地址)
}
2.VRRP 虚拟路由配置
vrrp_instance VI_1 { (自定义虚拟路由器实例的名称)
state MASTER (定义虚拟路由器下节点的主/备工作模式,注意大写)
interface DEVICE (定义VIP的绑定接口)
virtual_router_id ID (虚拟路由器的ID号,用来区分节点所属的集群组)
priority 100 (主/备节点的优先级)
advert_int 1 (发多播的时间间隔)
authentication {
auth_type PASS
auth_pass 1111 (通过密码验证是否属于同一个集群组)
}
virtual_ipaddress {
VIP (被绑定的VIP)
}
}
3.LVS 结合LVS的相关配置
virtual_server VIP PORT {
delay_loop 6
lb_algo rr (LVS的调度算法,可自定义)
lb_kind NAT (LVS的工作模式,可自定义,大写)
persistence_timeout 50 (持久连接时长,根据不同算法来定义,轮询算法下忽略)
protocol TCP (服务协议,只支持TCP)
sorry_server IP PORT (在所有RS宕机后,备用服务地址)
real_server RIP PORT {
weight 1
HTTP_GET {
url {
path /
status_code 200 (定义访问成功的响应吗)
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
Keepalived主备模型的基本实现示例
1.前提,调度器的HA Cluster 的配置准备:
各节点之间的时间必须需要同步
通过主机名(/etc/hosts)相互通信、可基于ssh的kye验证互相通信(这两者在KA中不是必须,但是为方便通信,可以设置)
确保iptables和selinux不会阻碍通信
2. vim /etc/keepalived/keepalived.conf
主: ka1 备:ka2 只需更改以下位置段信息
global_defs {
notification_email {
root@localhost
}
notification_email_from ka@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id ka1--------------------------------------------------------------router_id ka2
vrrp_mcast_group4 230.10.10.10
}
vrrp_instance VI_1 {
state MASTER------------------------------------------------------------state BACKUP
interface eth0
virtual_router_id 50
priority 100-----------------------------------------------------------------priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
10.0.0.100/24
}
}
Keepalived实现主备模式下LVS的DR模型的HA示例
在上述Keepalived主备模型的基础上,加入RS的定义规则
主: ka1 备:ka2只需变换如下位置
virtual_server 10.0.0.100 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
protocol TCP
sorry_server 127.0.0.1 80
real_server 192.168.31.27 80 {
weight 1----------------------------------------------------------------weight 2
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
Keeoalived主主模型的基本实现示例
在上述Keepalived主备模型的基础上,另外再分别加上第二个VRRP的配置,并将其中的主/备关系设置成与第一个VRRP配置相反,以及指定新VIP-2
ka1: ka2:
vrrp_instance VI_2 {
state BACKUP------------------------------------------------------------state MASTER
interface eth0
virtual_router_id 60
priority 80------------------------------------------------------------------priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 654321
}
virtual_ipaddress {
10.0.0.200/24 (VIP-2)
}
}
Keepalived实现主主模式下LVS的DR模型的HA示例
在上述主备模式下LVS的DR模型的HA示例、Keeoalived主主模型的基本实现示例下,另外添加RS-2的定义规则
ka1: ka2:
virtual_server 10.0.0.200 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
#persistence_timeout 50
protocol TCP
sorry_server 127.0.0.1 80
real_server 192.168.31.37 80 {
weight 2----------------------------------------------------------------weight 10
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
在上述实验中
RS服务器可根据实际情况进行增加
若是keepalived节点需要充当sorry_server,则必须自身启用web服务功能
Keepalived可基于防火墙iptables设置的标签来实现LVS高可用集群http、https
只需将指定VIP PORT改为 标签 即可:
iptables -t mangle -A PREROUTING -d 10.0.0.100 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 6
virtual_server fwmark 6 {
内容信息不变,与上述实验中定义一样
}