keepalived 介绍
vrrp 协议的软件实现,原生设计目的为了高可用 ipvs服务
功能:
- 基于vrrp协议完成地址流动
- 为vip地址所在的节点生成ipvs规则(在配置文件中预先定义)
- 为ipvs集群的各RS做健康状态检测
- 基于脚本调用接口完成脚本中定义的功能,进而影响集群事务,以此支持nginx、haproxy等服务
keepalived 架构
官方文档:
https://keepalived.org/doc/
http://keepalived.org/documentation.html
keepalived 相关文件
- 软件包名:keepalived
- 主程序文件:/usr/sbin/keepalived
- 主配置文件:/etc/keepalived/keepalived.conf
- 配置文件示例:/usr/share/doc/keepalived/
- Unit File:/lib/systemd/system/keepalived.service
- Unit File的环境配置文件:
/etc/sysconfig/keepalived CentOS
/etc/default/keepalived Ubuntu
注意:centos7上有bug,可能会出现以下情况
systemctl restart keepalived #新配置可能无法生效
systemctl stop keepalived;systemctl start keepalived #无法停止进程,需要 kill 停止
keepalived的安装
包安装:
#CentOS
[root@centos ~]#yum install keepalived
#Ubuntu
[root@ubuntu1804 ~]#apt -y install keepalived
示例:Ubuntu2004 安装 keepalived
root@ubuntu2004:~# apt install -y keepalived
#默认没有配置文件无法启动
root@ubuntu2004:~# systemctl status keepalived.service
● keepalived.service - Keepalive Daemon (LVS and VRRP)
Loaded: loaded (/lib/systemd/system/keepalived.service; enabled; vendor preset: enabled)
Active: inactive (dead)
Condition: start condition failed at Wed 2023-04-19 16:49:14 CST; 15s ago
4月 19 16:49:14 ubuntu2004 systemd[1]: Condition check resulted in Keepalive Daemon (LVS and VRRP) being skipped.
#利用范例生成配置文件
root@ubuntu2004:~# cp /usr/share/doc/keepalived/samples/keepalived.conf.sample /etc/keepalived/keepalived.conf
#修改配置文件中的网卡名称与配置文件内的名称一致
......
vrrp_instance VI_1 {
interface ens33 #注意修改这里网卡名称与本机的保持一致
virtual_router_id 50
nopreempt
priority 100
advert_int 1
virtual_ipaddress {
192.168.200.11
192.168.200.12
192.168.200.13
}
}
......
root@ubuntu2004:~# systemctl daemon-reload
root@ubuntu2004:~# systemctl start keepalived.service
配置文件组成部分
配置文件
/etc/keepalived/keepalived.conf
配置文件组成
- GLOBAL CONFIGURATION
Global definitions:定义邮件配置,route_id,vrrp配置,多播地址等 - VRRP CONFIGURATION
VRRP instance(s):定义每个vrrp虚拟路由器 - LVS CONFIGURATION
Virtual server group(s)
Virtual server(s):LVS集群的VS和RS
配置语法说明
帮助
man keepalived.conf
全局配置
# /etc/keepalived/keepalived.conf
global_defs {
notification_email {
root@localhost #keepalived 发生故障切换时邮件发送的目标邮箱,可以按行区分写多个
root@qingtongqingc.com
xxxxxxxx@qq.com #生产中请填写真实邮箱地址
}
notification_email_from Alexandre.Cassen@firewall.loc #发邮件的地址
smtp_server 192.168.200.1 #邮件服务器地址
smtp_connect_timeout 30 #邮件服务器连接timeout
router_id 2004_1-1 #每个keepalived主机唯一标识,建议使用当前主机名,如果多节点重名可能会影响切换脚本呢的执行
}
vrrp_skip_check_adv_addr #对所有通告报文都检查,会比较消耗性能,启用此配置后,如果收到的
通告报文和上一个报文是同一个路由器,则跳过检查,默认值为全检查
vrrp_strict #严格遵守VRRP协议,启用此项后以下状况将无法启动服务:1.无VIP地址 2.配置了单播邻
居 3.在VRRP版本2中有IPv6地址,开启动此项并且没有配置vrrp_iptables时会自动开启iptables防火
墙规则,默认导致VIP无法访问,建议不加此项配置
vrrp_garp_interval 0 #gratuitous ARP messages 报文发送延迟,0表示不延迟
vrrp_gna_interval 0 #unsolicited NA messages (不请自来)消息发送延迟
vrrp_mcast_group4 224.0.0.18 #指定组播IP地址范围:224.0.0.0到239.255.255.255,默认
值:224.0.0.18
vrrp_iptables #此项和vrrp_strict同时开启时,则不会添加防火墙规则,如果无配置
vrrp_strict项,则无需启用此项配置
}