说起keepalived,就不得不提vrrp协议了。
我相信很多网络工程师听到vrrp都会脑袋一激灵,想起年少时被“vrrp主备”和“vrrp负载冗余”支配的恐惧。
keepalived是一种高性能的服务器高可用或热备解决方案,其实是以vrrp协议(虚拟路由冗余协议)为基础而实现的。
所以配置keepalived 其实和路由器上配置vrrp是差不太多的,本文将大致说明配置方法和需要注意的地方。并在最后列举一个搭配nginx负载均衡的双主架构
内容大纲
1 keepalived 配置文件
keepalived 配置文件有以下个大段:
配置段 | 说明 |
---|---|
global_defs | 全局配置段 |
vrrp_instance | 实例配置段 |
vrrp_script | 健康检查脚本段 |
vrrp_sync_group | 绑定多个instance实例为一个组,同生共死 |
virtual_server | 用来搭配lvs(一种基于内核的四层负载均衡) |
1.1 global_defs
(很久之前做的笔记,域名还不是这个caojie.blog,请忽略)
注: 详细的配置参数还有很多,如 vrrp_garp_master_delay 等,若有需要可以去官方文档查看
1.2 vrrp_instance
上图中蓝色皆为可选配置项,黄色为应使用配置项
补充:
① vrrp_notify
vrrp_notify是在触发了keepalived状态切换之后,才会执行的操作。
可以编写一些邮件通知之类的,当keepalived状态变化之后,自动通知相关人员,并根据脚本自动启停一些服务等。
notify的具体用法:
notify_master:当前节点成为master时,执行脚本(一般用于启动某服务,比如nginx等)
notify_backup:当前节点成为backup时,执行脚本(一般用于关闭某服务,比如nginx等)
notify_fault:当前节点出现故障,执行的任务;
② track_script{}
用于启用已定义的检测动作(脚本),详见下文。
③ 虚拟mac:**
每个虚拟路由器都有一个虚拟mac地址,默认为 00-00-5e-00-01-virtual_router_id
1.3 vrrp_script
keepalived只能做到对网络故障和keepalived本身的监控,这些在实际中是远远不够的。
我们还需要监控keepalived所在服务器上的其他业务进程,根据业务进程的运行状态决定是否需要进行主备切换。
所以这个时候,一般都可以提前写好相关脚本,然后将脚本路径加入vrrp_script的配置中。这样的话,基本可以实现以下的功能:
服务器某种状态 –> 触发脚本 –> 触发keepalived主备切换
# 定义动作 “chk_mysql_port”
vrrp_script chk_mysql_port { #检测mysql服务是否在运行。有很多方式,比如进程,用脚本检测等等
script "/opt/chk_mysql.sh" #这里通过脚本监测
interval 2 #脚本执行间隔,每2s检测一次
weight -20 #脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -20
fall 2 #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)
rise 1 #检测1次成功就算成功。但不修改优先级
}
# 定义后需要在vrrp_instance配置段中启用,例如
track_script {
chk_mysql_port
}
此处详情可以参考我的另一篇文章
mysql 双主+keepalived +1从
1.4 vrrp_sync_group
如下图所示,主要用来绑定多个实例为一组。任何一个实例切换了状态,同组的其它实例也会改变状态。
(好兄弟就要同生共死)
1.5 virtual_server
lvs一般只有大型网站会用到。后续有时间再整理下相关实验截图,和lvs放在一起写个文章放上来。
这里暂时跳过,可以直接注释。
2 双主架构
这是之前做实验时,我自己画的架构图,确实丑了点,keepalived的漂移过程画的也不是很形象,先凑活着看吧~
按照这个架构配合nginx可以实现7层的负载均衡。有时间我会再重新搭实验,整理下配置等。