Keepalived 的高可用配置与使用

bt365最新网址 📅 2025-11-07 03:45:11 👤 admin 👁️ 4821 ❤️ 122
Keepalived 的高可用配置与使用

Keepalived 是一个免费开源的,用C编写的类似于layer3, 4 & 7交换机制软件,具备我们平时说的第3层、第4层和第7层交换机的功能。主要提供 loadbalancing(负载均衡)和 high-availability(高可用)功能,负载均衡实现需要依赖Linux的虚拟服务内核模块(ipvs),而高可用是通过VRRP协议实现多台机器之间的故障转移服务。

Keepalived 是一款专注于提升网络服务可靠性的开源软件,特点如下:

核心功能:提供负载均衡和高可用性服务,适用于基于 Linux的系统和网络架构。

编程语言:Keepalived 采用 C 语言编写,保证了其高性能和稳定性。

负载均衡:基于 Linux内核模块技术(IPVS, IP Virtual Server),实现第四层(传输层)的负载均衡,有效分配网络流量。

健康检查:内置多种健康检查机制,能够实时监控后端服务器的运行状态,通过预设的检查策略来确保服务的稳定性。

高可用性:通过实现虚拟路由冗余协议(VRRP),Keepalived 能够在主备服务器之间实现快速的故障转移,保障网络服务的连续性。

故障检测:集成了边界网关检测协议(BFD, Bidirectional Forwarding Detection),用于快速检测网络故障,并触发 VRRP 状态转换,以实现更快的故障恢复。

灵活性:Keepalived 的架构设计模块化,各个功能模块可以独立使用,也可以组合使用,以适应不同的网络环境和需求。

扩展性:提供了钩子机制,允许用户自定义脚本和程序,以扩展和定制 VRRP 的行为。

一、安装

Keepalived支持源码安装,同时也可以通过不同操作系统安装工具进行安装。

1.1 在线安装(yum安装)

此处以 CentOS 的 yum工具为例进行安装介绍。

yum install -y keepalived

1.2 离线安装(编译安装)

下载安装包

Keepalived 官网下载地址

解压并安装

#1. 解压:将安装包上传到服务器的 $HOME 目录,并解压

tar -zxvf $HOME/keepalived-2.0.18.tar.gz

#2. 安装配置:使用 configure命令配置"安装目录"与"核心配置文件"所在位置

cd $HOME/keepalived-2.0.18/ #进入解压目录

./configure --prefix=/usr/local/keepalived --sysconf=/etc

#--prefix:指定 keepalived 的安装位置

#--sysconf:指定 keepalived 核心配置文件所在位置(固定位置,只能使用/etc)

#如果出现安装 libnl/libnl-3 的警告,则安装 `yum -y install libnl libnl-devel`后,重新在 configure一下。

#3. 编译并安装 keepalived

make && make install

#4. 系统服务配置:把 Keepalived 注册为系统服务

#4.1 将 Keepalived 的系统配置文件,拷贝至系统 /etc 目录

cp $HOME/keepalived-2.0.18/keepalived/etc/init.d/keepalived /etc/init.d/

cp $HOME/keepalived-2.0.18/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

#4.2 刷新系统服务,加载新添加的 Keepalived 服务

sudo systemctl daemon-reload

二、配置

配置文件 /etc/keepalived/keepalived.conf 中主要由全局段、VRRP实例段、脚本段组成

配置文档:https://keepalived.org/manpage.html

2.1 全局配置(global_defs)

允许用户设置全局相关信息,例如邮件通知信息、关键参数配置等,该段配置在Master节点和Backup节点上应当一致。

! Configuration File for keepalived

global_defs { #全局配置标识(如果下面的配置都不用,此模块也可以删除)

notification_email { #设置报警的邮件地址(依赖本机的 sendmail服务)

acassen@firewall.loc #keepalived 发生故障切换时邮件发送的目标邮箱,可以按行区分写多个

failover@firewall.loc

sysadmin@firewall.loc

}

notification_email_from Alexandre.Cassen@firewall.loc #邮件的发送地址

smtp_server 192.168.31.1 #邮件SMTP服务器地址

smtp_connect_timeout 30 #连接超时时间(邮件SMTP服务器)

router_id LVS_DEVEL #标识此节点机器的字符串(不必是主机名,默认:本地主机名)

vrrp_skip_check_adv_addr #对所有通告报文都检查,会比较消耗性能(启用后,如果收到的通告报文和上一个报文是同一个路由器,则跳过检查,默认值为全检查)

vrrp_strict #严格遵守VRRP协议,默认会导致 VIP 无法访问(建议注释此项配置)

vrrp_garp_interval 0 #报文发送延迟,0表示不延迟

vrrp_gna_interval 0 #消息发送延迟

}

vrrp_strict (建议不加此项配置):严格遵守VRRP协议,启用此项后以下状况,将无法启动服务:

无 VIP 地址

配置了单播邻居

在VRRP版本2中有IPv6地址,开启动此项并且没有配置vrrp_iptables时会自动开启iptables防火墙规则,默认导致VIP无法访问

如果不配置邮件报警,主备主机名不重复时,可以省略 global_defs 块,router_id 默认使用本机主机名。

2.2 虚拟路由配置(vrrp_instance)

此部分主要用来定义具体服务的实例配置,包括 Keepalived主备状态、接口、优先级、认证方式和 VIP信息等

1. 每个 VRRP实例可以认为是 Keepalived服务的一个实例, 或作为一个业务服务,在一组 Keepalived服务配置中,VRRP实例可以有多个。

2. 存在于 Master节点中的 VRRP实例配置在 Backup节点中也要有一致的配置(除了节点角色、优先级不同),这样才能实现故障切换转移

vrrp_instance VI_1 { #VRRP实例名并设定实例名称(一般为业务名称)

state MASTER #设定初始VRRP实例角色,表示主机初始状态名称是MASTER(主机 MASTER/备机 BACKUP)

interface eth0 #该实例绑定的网卡名称

virtual_router_id 51 #虚拟路由ID标识,范围 0-255;同一VRRP实例中主备设置必须一致,否则将出现脑裂问题;

priority 100 #优先级设定,权重值范围 1-254,数字越大,表示实例优先级越高;同一个VRRP实例中,Master节点优先级要高于Backup节点;

advert_int 1 #主备之间同步检查时间间隔,单位秒

authentication { #认证机制,防止非法节点进入(同一个VRRP实例的MASTER和BACKUP使用相同的密码才能正常通信)

auth_type PASS #认证类型有PASS(Simple Passwd)和AH(IPSEC),官方推荐PASS,验证密码为明文方式,最多8位

auth_pass 1111

}

virtual_ipaddress { #虚拟IP,可以有多个(vip),VIP将绑定至interface参数配置的网络接口上

192.168.31.116 #指定VIP,不指定网卡,默认eth0;不指定/prefix, 默认/32

192.168.31.117/24 dev eth1 #指定VIP,网卡

192.168.31.118/24 dev eth2 label eth2:1 #指定VIP,网卡,label

#/ brd dev scope label

}

track_script { #根据 vrrp_script 的结果,去调整资源优先级

check_haproxy #调用脚本

}

nopreempt #非抢占模式(默认为抢占模式),同一VRRP实例中主备设置必须一致。

preempt_delay 2 #抢占模式的延迟时间,单位秒,范围0~1000;发现低优先级MASTER后,多少秒开始抢占。

notify_master