KeepAlived介绍
keepalived:
vrrp协议的软件实现,原生设计目的为了高可用ipvs服务
vrrp协议:
Virtual Router Redundancy Protocol
功能:
vrrp协议完成地址流动
为vip地址所在的节点生成ipvs规则(在配置文件中预先定义)
为ipvs集群的各RS做健康状态检测
基于脚本调用接口通过执行脚本完成脚本中定义的功能,进而影响集群事务,以此支持nginx、haproxy等服务
术语:
虚拟路由器:Virtual Router
虚拟路由器标识:VRID(0-255),唯一标识虚拟路由器
物理路由器:
master:主设备
backup:备用设备
priority:优先级
VIP:Virtual IP
VMAC:Virutal MAC
通告:
心跳,优先级等;周期性
工作方式:
抢占式,非抢占式
安全工作:
认证:
无认证
简单字符认证:预共享密钥
MD5
工作模式:
主/备:单虚拟路径器
主/主:主/备(虚拟路径器1),备/主(虚拟路径器2)
核心组件:
vrrp stack
ipvs wrapper
checkers
控制组件:配置文件分析器
IO复用器
内存管理组件
安装
keepalived包,CentOS 6.4+ Base源
主配置文件:/etc/keepalived/keepalived.conf
主程序文件:/usr/sbin/keepalived
Unit File:/usr/lib/systemd/system/keepalived.service
Unit File的环境配置文件:/etc/sysconfig/keepalived,如需独立日志也在此文件配置
配置文件组件部分
TOP HIERACHY
GLOBAL CONFIGURATION
Global definitions
Static routes/addresses
VRRPD CONFIGURATION
VRRP synchronization group(s):vrrp同步组
VRRP instance(s):即一个vrrp虚拟路由器
LVS CONFIGURATION
Virtual server group(s)
Virtual server(s):ipvs集群的vs和rs
配置语法
配置虚拟路由器:
vrrp_instance {
…
}
专用参数:
state MASTER|BACKUP:当前节点在此虚拟路由器上的初始状态;只能有一个是MASTER,余下的都应该为BACKUP
interface IFACE_NAME:绑定为当前虚拟路由器使用的物理接口
virtual_router_id VRID:当前虚拟路由器惟一标识,范围是0-255
priority 100:当前物理节点在此虚拟路由器中的优先级;范围1-254
advert_int 1:vrrp通告的时间间隔,默认1s
authentication { #认证机制
auth_type AH|PASS
auth_pass 仅前8位有效
}
virtual_ipaddress { #虚拟IP
/ brd dev scope label
track_interface { #配置监控网络接口,一旦出现故障,则转为FAULT状态 实现地址转移
eth0
eth1
}
nopreempt:定义工作模式为非抢占模式
preempt_delay 300:抢占式模式,节点上线后触发新选举操作的延迟时长,默认模式
定义通知脚本:
当前节点成为主节点时触发的脚本
notify_master <STRING>|<QUOTED-STRING>
当前节点转为备节点时触发的脚本
notify_backup <STRING>|<QUOTED-STRING>
当前节点转为“失败”状态时触发的脚本
notify_fault <STRING>|<QUOTED-STRING>
通用格式的通知触发机制,一个脚本可完成以上三种状态的转换时的通知
notify <STRING>|<QUOTED-STRING>
配置示例
配置前准备:
1.各节点时间必须同步
ntp, chrony
2.确保iptables及selinux不会成为阻碍
3.各节点之间可通过主机名互相通信(对KA并非必须)建议使用/etc/hosts文件实现
4.各节点之间的root用户可以基于密钥认证的ssh服务完成互相通信(对KA并非必须)
单主配置示例
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id k1 #主机名,在另一结点为k2
vrrp_mcast_group4 224.0.0.100
}
vrrp_instance VI_1 {
state MASTER #在另一个节点上为BACKUP
interface eth0
virtual_router_id 10 #多个节点必须相同
priority 100 #在另一个结点上为50
advert_int 1 #通告间隔1s
authentication {
auth_type PASS #预共享密钥认证
auth_pass 123456
}
virtual_ipaddress {
172.168.1.10/