简介
Keepalived 是一个用 C 语言编写的路由软件。基于linux的基础架构提供简单而强大的负载平衡和高可用性设施。
- 高可用性
基于VRRP(Virtual Router Redundancy Protocol,虚拟路由器冗余协议)协议实现高可用 - 负载均衡
基于Linux 虚拟服务器 (IPVS)内核模块提供第四层负载均衡
安装
yum install keepalived -y
#如果需要负载均衡,安装ipvs,ipvs是linux lvs的实现模块,ipvsadm是管理工具
yum install ipvsadm -y
配置文件
vim /etc/keepalived/keepalived.conf #默认配置文件
场景应用
典型的高可用场景是keepalived+vip,vip作为对外服务的ip,当vip所在服务器出现故障时(keepalived停止),vip会自动漂移到备服务器,从而保证服务的高可用,常用有 Nginx+keepalived 双机主从模式, Nginx+keepalived 双机主主模式,Mysql+Keepalived 双击主从模式等,负载均衡方案采用LVS目前比较少,大部分都是采用nginx或者HAProxy,所以LVS配置就不往下说了
HA模式
Keepalived 模式分为非抢占模式和抢占模式
非抢占模式(推荐)
两台都是BACKUP,master从故障恢复后变成backup
- 两节点vrrp_instance中添加 nopreempt 参数配置
- 两节点state 都要配置成BACKUP,用优先级区分
初始化启动,优先启动主节点(优先级比较高的),确保vip绑定到高优先级的节点,推荐使用非抢占模式,防止故障恢复,vip出现漂移
抢占模式
MASTER从故障中恢复后,会将VIP从BACKUP节点中抢占过来
- 设置vrrp_instance中priority
设定keepalived的master和backup值主要是在priority(优先级)相同的前提下才有意义,如果优先级不同的话,不管其设定了master还是backup,最终vip漂移的位置都是优先级比较高的机器,因此我们两个节点最好指定不同的优先级
Nginx+keepalived 双机主从模式
主机器172.31.22.30 配置如下:
# 全局定义
global_defs {
router_id vip_nginx #名称
}
vrrp_script nginx_check#自定义脚本进行业务监控
{
script "/usr/local/bin/nginx_check.sh" #探测脚本,如果当前机器是主,并且脚本执行失败(成功退出状态码为0,失败为非0),则转化为备,集群重新选主
interval 5 #指定脚本执行的间隔,默认为1s
fall 3 #失败多少次才认为失败
rise 2 #成功多少次才认为是成功
}
vrrp_instance VI_51 #监控一个对象(比如nginx)需要定义一个虚拟路由,保持唯一
{
state BACKUP #当前节点在此虚拟路由器上的初始状态(MASTER|BACKUP);
nopreempt #定义工作模式为非抢占模式;
interface eth0 #绑定网卡;
virtual_router_id 51 #当前虚拟路由器的惟一标识,范围是0-255;
priority 100 #当前主机在此虚拟路径器中的优先级;范围1-254;
advert_int 1 #MASTER与BACKUP节点间同步检查的时间间隔,单位为秒;
authentication { #安全认证,同一vrrp_instance使用相同的密码才能正常通信;
auth_type PASS #类型主要有 PASS、AH 两种,通常使用PASS类型;
auth_pass 1024
}
track_script { #引用上面定义名称叫other_check的vrrp脚本,进行主备切换
nginx_check
}
virtual_ipaddress { #虚拟IP地址池,可以有多个IP,每个IP占一行
172.31.0.100
}
#以下脚本可以作为后置动作
notify_master /usr/local/bin/nginx_master.sh #当前节点成为主节点时触发的脚本
notify_backup /usr/local/bin/nginx_backup.sh #当前节点转为备节点时触发的脚本
notify_fault /usr/local/bin/nginx_fault.sh #当前节点转为fault状态时触发的脚本
notify_stop /usr/local/bin/nginx_stop.sh #当前节点转为stop状态时触发的脚本
}
vim nginx_check.sh
#!/bin/bash
ALIVE=`ps -ef | grep "nginx: master process"| grep -v grep`
if [ "$ALIVE" == "" ]; then
exit 1
else
exit 0
fi
备机器172.31.22.31 配置如下:
#一样配置,只需修改优先级
priority 50
Nginx+Keepalived 双机主主模式
只需要增加一个vip 172.31.0.101,172.31.22.30绑定vip(172.31.0.100),172.31.22.31绑定vip(172.31.0.101)
备机器172.31.22.31 增加配置如下
vrrp_instance VI_52 #监控一个对象(比如nginx)需要定义一个虚拟路由,保持唯一
{
state BACKUP #当前节点在此虚拟路由器上的初始状态(MASTER|BACKUP);
nopreempt #定义工作模式为非抢占模式;
interface eth0 #绑定网卡;
virtual_router_id 52 #当前虚拟路由器的惟一标识,范围是0-255;
priority 150 #当前主机在此虚拟路径器中的优先级;范围1-254;
advert_int 1 #MASTER与BACKUP节点间同步检查的时间间隔,单位为秒;
authentication { #安全认证,同一vrrp_instance使用相同的密码才能正常通信;
auth_type PASS #类型主要有 PASS、AH 两种,通常使用PASS类型;
auth_pass 1024
}
track_script { #引用上面定义名称叫other_check的vrrp脚本,进行主备切换
nginx_check
}
virtual_ipaddress { #虚拟IP地址池,可以有多个IP,每个IP占一行
172.31.0.101
}
#以下脚本可以作为后置动作
notify_master /usr/local/bin/nginx_master.sh #当前节点成为主节点时触发的脚本
notify_backup /usr/local/bin/nginx_backup.sh #当前节点转为备节点时触发的脚本
notify_fault /usr/local/bin/nginx_fault.sh #当前节点转为fault状态时触发的脚本
notify_stop /usr/local/bin/nginx_stop.sh #当前节点转为stop状态时触发的脚本
}
主机器172.31.22.30 增加配置如下
#增加和上面一样配置,只需修改优先级
priority 50
Mysql+Keepalived 双击主从模式
配置与Nginx+keepalived 双机主从模式相似(略)
网友评论