keepalived工作原理_keepalived

2d9df82a69389570bbeabf530116b1ce.png

keepalived

lvs负责负载均衡;而keepalived如其名就是“保持存活”,keepalived就是要实现服务高可用性;

常见的lvs+keepalived组合:lvs给服务提供负载均衡,keepalived负责负载均衡的高可用

keepalived启动后会有三个进程,分别为:

父进程:内存管理,子进程管理

子进程:VRRP子进程,实现vrrp协议

子进程:healthchecker子进程,实现健康检查

两个子进程都被系统WatchDog看管,两个子进程各自负责自己的事,healthchecker子进程负责检查各自服务器的健康程度,例如HTTP,如果healthchecker子进程检查到MASTER上服务不可用了,就会通知本机上的VRRP子进程,让他删除通告,并且去掉虚拟IP,转换为BACKUP状态

在学习keepalived之前,需要了解一下vrrp协议,vrrp协议也是keepalived实现的基础。

vrrp

vrrp把几台路由器联合组成一台虚拟的路由设备,通过一定的机制保证当主机的下一跳路由器出现故障时,及时把业务切换到备份路由器,保障业务的连续性。

vrrp中包含的一些概念:

1、VRID:虚拟路由器ID
2、Virtual IP addr:虚拟路由器IP地址
3、Virtual Mac addr:虚拟路由器Mac地址,根据VRID生成的
4、master、slave:主备路由器
5、抢占、非抢占:在抢占模式下,如果slave优先级高于master,则主动将自己切换成
master;而非抢占模式下则相反,就算slave优先级高于master,也不会成为master

vrrp协议报文

了解vrrp作用及相关概念后,vrrp报文是非常重要的,主要有两个作用:

1、Master通过这个报文来通告其他slave的机器"自己还存活"的。

2、通过vrrp报文的交互,实现Master的选举

master向224.0.0.18的组播地址发送vrrp报文,报文源地址是接口的主IP地址,目的地址是224.0.0.18。

vrrp报文是封装在IP报文中的,所以支持所有的上层协议。

vrrp协议工作原理

1、所有设备开始都是initialize状态,当接口UP后,如果优先级(0-255)为255,则直接进入master状态;如果小于255,则先进入backup状态,待MasterDownInterval定时器超时后才进入master状态

2、第一个切换至master状态的设备通过vrrp报文(包含优先级)的交互,进行Master的选举

3、选举为master后,master需要周期性地向各个backup发送vrrp通告报文(包含优先级),backup以此来判断master是否有正常工作;

ps:master退出vrrp组,则发送一个priority为0的vrrp通告,backup收到不等超时时间直接切成master;当在超时时间内没有收到vrrp通告则根据情况是否要切换为master

4、当backup切换为master后,需要通过免费arp报文,以此来将VIP和mac地址映射关系通告给其所有相连的设备

总结:

Master工作:1、给backup广播vrrp通告 2、响应arp包来通告VIP和mac地址映射关系

backup工作:1、监听Master发出的通告

keepalived原理

keepalived也是模块化设计的,主要包括下面五个模块:

1、core:核心模块,负责主进程的启动和维护,全局配置文件的加载解析等

2、check:检查模块,负责healthchecker

3、vrrp:vrrp模块,负责实现vrrp协议

4、libipfwc:iptables库,在LVS会用到

5、libipvs:配置LVS会用到

keepalived配置

主要是配置三个区域:

全局配置(全局定义和静态路由配置)

VRRPD配置(VRRP同步组合、VRRP实例和VRRP脚本)

LVS配置

全局配置:
global_defs
{
notification_email
{
admin@example.com
}
notification_email_from admin@example.com
smtp_server 127.0.0.1
stmp_connect_timeout 30
router_id node1
}
notification_email
{
admin@example.com
admin@ywlm.net
}
static_ipaddress
{
192.168.1.1/24 brd + dev eth0 scope global
192.168.1.2/24 brd + dev eth1 scope global
}
static_routes
{
src $SRC_IP to $DST_IP dev $SRC_DEVICE
src $SRC_IP to $DST_IP via $GW dev $SRC_DEVICE
}

VRRPD配置:
vrrp_sync_group VG_1 {
group {
http
mysql
}
notify_master /path/to/to_master.sh
notify_backup /path_to/to_backup.sh
notify_fault "/path/fault.sh VG_1"
notify /path/to/notify.sh
smtp_alert
}
group {
http
mysql
}
vrrp_script check_running {
   script "/usr/local/bin/check_running"
   interval 10
   weight 10
}

VRRP实例:
vrrp_instance http {
state MASTER
interface eth0
dont_track_primary 忽略VRRP的interface错误
track_interface {
eth0
eth1
}
mcast_src_ip <IPADDR>
garp_master_delay 10
virtual_router_id 51
priority 100
advert_int 1 检查间隔
authentication {
auth_type PASS
autp_pass 1234
}
virtual_ipaddress {  设置VIP
#<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPT> label <LABEL>
192.168.200.17/24 dev eth1
192.168.200.18/24 dev eth2 label eth2:1
}
virtual_routes { 
# src <IPADDR> [to] <IPADDR>/<MASK> via|gw <IPADDR> dev <STRING> scope <SCOPE> tab
src 192.168.100.1 to 192.168.109.0/24 via 192.168.200.254 dev eth1
192.168.110.0/24 via 192.168.200.254 dev eth1
192.168.111.0/24 dev eth2
192.168.112.0/24 via 192.168.100.254
}
track_script {
check_running weight 20
}
nopreempt   设置抢占
preemtp_delay 300
debug
}

vrrp脚本:
virtual_server_group <STRING> {
# VIP port
<IPADDR> <PORT>
<IPADDR> <PORT>
fwmark <INT>
}
virtual_server 192.168.1.2 80 {
delay_loop 3
lb_algo rr|wrr|lc|wlc|lblc|sh|dh
lb_kind NAT|DR|TUN   LVS集群模式
persistence_timeout 120
persistence_granularity <NETMASK>
protocol TCP
ha_suspend
virtualhost <string>
sorry_server <IPADDR> <PORT>
real_server <IPADDR> <PORT>
{
weight 1
inhibit_on_failure 
notify_up <STRING> | <QUOTED-STRING>
notify_down <STRING> | <QUOTED-STRING>
#HTTP_GET方式
HTTP_GET | SSL_GET
{
url { 
path / 
digest <STRING>                                            
status_code 200
}
connect_port 80 
bindto <IPADD>
connect_timeout   3
nb_get_retry 3
delay_before_retry 2
} 
}
}

参考:

https://my.oschina.net/piorcn/blog/404644

http://blog.jobbole.com/110200/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值