Keepalived备忘录
1.Docker备忘录2.Linux备忘录3.nginx备忘录4.ansible备忘录5.PostgreSQL备忘录6.运维脚本备忘录7.Redis备忘录8.RabbitMQ备忘录9.ELK(Elasticsearch、Kibana、Filebeat、Metricbeat、Logstash、Elastic Agent、Fleet Server、APM)备忘录
10.Keepalived备忘录
11.LVS(Linux Virtual Server)备忘录12.bash备忘录13.文本处理备忘录(grep、sed、awk、find)14.数据处理备忘录(rsync、scp)15.进程管理备忘录(supervisor)16.网络服务备忘录(vsftpd、nfs、samba)17.自动化编写备忘录18.Kubernetes架构、部署、应用备忘录(241230)
基础内容
Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。
在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器,但是对外表现为一个虚拟IP,主服务器会发送VRRP通告信息给备份服务器,当备份服务器收不到VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。
keepalived体系架构中主要有三个模块,分别是core、check和vrrp。
- core模块为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。
- vrrp模块是来实现VRRP协议的。
- check负责健康检查,常见的方式有端口检查及URL检查。
Keepalived工作在TCP/IP模型的第三、四和五层,即网络层、传输层和应用层。
- 网络层,Keepalived采用ICMP协议向服务器集群中的每个节点发送一个ICMP的数据包,如果某个节点没有返回响应数据包,则认为此节点发生了故障,Keepalived将报告次节点失效,并从服务器集群中剔除故障节点。
- 传输层,Keepalived利用TCP的端口连接和扫描技术来判断集群节点是否正常。如常见的web服务默认端口80,ssh默认端口22等。Keepalived一旦在传输层探测到相应端口没用响应数据返回,则认为此端口发生异常,从而将此端口对应的节点从服务器集群中剔除。
- 应用层,可以运行FTP、telnet、smtp、dns等各种不同类型的高层协议,Keepalived的运行方式也更加全面化和复杂化,用户可以通过自定义Keepalived的工作方式,来设定监测各种程序或服务是否正常,若监测结果与设定的正常结果不一致,将此服务对应的节点从服务器集群中剔除。
Keepalived配置文件
配置文件是etc/keepalived/keepalived.conf,该文件主要由global_defs、vrrp_instance和virtual_server三个模块构成。global_defs:全局配置;vrrp_instance:可配置虚拟路由,可以用来做高可用;virtual_server:虚拟服务器,可以用来做负载均衡
global_defs {
router_id MyRouter
log_file /var/log/keepalived.log
log_detail
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 101
advert_int 1
virtual_ipaddress {
192.168.1.100/24
}
track_script {
check_http
}
notify /usr/local/bin/notify_admin.sh # 故障时执行通知脚本
}
vrrp_instance VI_2 {
state BACKUP
interface eth0
virtual_router_id 52
priority 90
advert_int 1
virtual_ipaddress {
192.168.1.101/24
}
track_script {
check_http
}
}
global_defs 全局配置
- router_id:指定 Keepalived 实例的唯一标识符,用于在 VRRP 协议中识别每个实例,通常设置为主机名或自定义字符串。
- log_file:指定日志文件的路径,所有的 Keepalived 日志将记录到该文件。
- log_detail:启用详细的日志记录,记录更多的调试信息,帮助在排查问题时使用。
vrrp_instance 配置路由
- state:指定当前节点在 VRRP 实例中的状态,通常分为 MASTER(主节点)和 BACKUP(备份节点)。主节点持有虚拟 IP 地址。
- interface:指定 VRRP 实例绑定的网络接口。通常是物理网卡的名称(如 eth0)。
- virtual_router_id:为每个 VRRP 实例分配一个唯一的 ID,范围为 1 到 255。多个节点使用相同的 virtual_router_id 来共享虚拟 IP 地址。
- priority:设置节点的优先级,默认值为 100。主节点的优先级通常设置为比备份节点更高的值(如 101)。
- advert_int:设置 VRRP 广播间隔,单位为秒。这个值决定了 VRRP 广播的频率以及主备切换的响应速度。默认值为 1 秒,通常不需要修改,除非需要更快速的故障转移。
- virtual_ipaddress:虚拟 IP 地址,主节点会将这个虚拟 IP 地址绑定到它的网络接口上。备份节点会在主节点失效时接管该 IP 地址。
- track_script:用于指定需要健康检查的脚本,确保在主节点失败时进行故障转移。
track_script 健康检查
- check_http:引用http健康检查
virtual_ipaddress 虚拟IP地址
notify 和 notify_script 全局监控配置
real_servers 真实服务器:用于配置与 LVS (Linux Virtual Server) 配合的虚拟服务器池。
高可用配置文件
# 全局配置
global_defs {
# 接收邮件
notification_email {
example@mail.com # 修改为目标邮件地址
}
# 发送的邮箱
notification_email_from example@mail.com # 修改为目标邮件地址
# 邮件服务器
smtp_server 127.0.0.1
# 邮件服务器超时时间
smtp_connect_timeout 30
# 路由id,唯一的
! router_id LVS_DEVEL
! vrrp_skip_check_adv_addr
# 开启了此项后没有设置vrrp_iptables则会自动开启iptables防火墙规则,导致VIP地址无法访问,建议不加此项
! vrrp_strict
# 与vrrp_strict同时设置时可禁止iptables规则的生成,注释或者无vrrp_strict时可不加此项
! vrrp_iptables
# 设置ARP接口之间发送报文的延迟时间,可以精确到毫秒,默认是0
! vrrp_garp_interval 0
# 设置非请求消息的发送延迟时间,默认为0
! vrrp_gna_interval 0
# 指定要在其下运行脚本的默认用户名/组名,如果未指定此选项,则如果该用户存在,则用户默认为keepalived_script,否则为root,如果未指定groupname,则默认为用户的组。
script_user root
}
# 配置虚拟路由器
vrrp_instance VIP_1 {
# 设置此虚拟路由器的初始状态,可选择MASTER或者BACKUP
state MASTER
# 绑定当前虚拟路由器所使用的物理接口,如eth0、lo等
interface eth0
# 设置虚拟路由器的唯一标识,取值范围为0-255,每个虚拟路由器的该项值必须是唯一的,否则无法启动服务,并且同属一个虚拟路由器的多个keepalived节点必须相同,务必要确认在同一网络中此值必须唯一
virtual_router_id 51
# 设置当前物理节点在此虚拟路由器中的优先级,优先级取值范围为1-254,值越大优先级越高,每个keepalived节点取值不同
priority 100
# 设置VRRP通告的时间间隔,默认为1秒
advert_int 1
# 设置认证机制
authentication {
# 认证类型,可选择AH和PASS两种,AH为IPSC互联网安全协议认证,PASS为简单密码认证,推荐PASS认证
auth_type PASS
# 预共享秘钥设置,仅前8位有效,同一虚拟路由器的多个keepalived节点auth_pass值必须保持一致
auth_pass 1111
}
# 添加虚拟路由器的IP,并可设置IP对应的子网掩码、网卡和标签等,生产中可能会在同一个虚拟路由器上添加上百个IP,不同的IP分行隔开,不指定网卡时默认添加在eth0上,不设置子网掩码时默认为32位。在添加IP地址时,需确保将要使用的IP不存在
virtual_ipaddress {
10.211.55.11
}
#指定当切换到master时,执行的脚本
notify_master /opt/keepalived/etc/script/notify_fifo.sh
#指定当切换到backup时,执行的脚本
notify_backup /opt/keepalived/etc/script/notify_fifo.sh
#故障时执行的脚本
notify_fault /opt/keepalived/etc/script/notify_fifo.sh
# 通知
notify /opt/keepalived/etc/script/notify_fifo.sh
#使用global_defs中提供的邮件地址和smtp服务器发送邮件通知
smtp_alert
}
配置邮箱服务器
# 卸载 sendmail(如果已经安装)
# 首先检查是否有 sendmail 安装,如果安装了就卸载它
dpkg -l | grep -i sendmail
if [ $? -eq 0 ]; then
echo "Sendmail 已安装,准备卸载"
sudo apt-get remove -y sendmail
else
echo "Sendmail 未安装,跳过卸载"
fi
# 如果系统中安装了 mail 或 mailx,也卸载它,避免抢占邮件服务器端口
dpkg -l | grep -i mailx
if [ $? -eq 0 ]; then
echo "mailx 已安装,准备卸载"
sudo apt-get remove -y mailx
else
echo "mailx 未安装,跳过卸载"
fi
# 安装 mailx(作为邮件发送工具)
sudo apt-get install -y mailutils # mailx 的安装包为 mailutils
# 安装 sendmail
sudo apt-get install -y sendmail
# 查看 sendmail 服务状态,确认其是否已启动
systemctl status sendmail
# 如果 sendmail 服务没有启动,则启动它
sudo systemctl start sendmail
# 重启 sendmail 服务
sudo systemctl restart sendmail
# 停止 sendmail 服务
sudo systemctl stop sendmail
# 查看 25 端口是否被占用,确认 sendmail 是否绑定在 25 端口
sudo netstat -tunlp | grep :25
keepalived日志文件
默认的日志位置在/var/log/message,修改日志文件etc/default/keepalived里的KEEPALIVED_OPTIONS
可以自定义路径。
etc/default/keepalived
# Options for keepalived. See `keepalived --help' output and keepalived(8) and
# keepalived.conf(5) man pages for a list of all options. Here are the most
# common ones :
#
# --vrrp -P Only run with VRRP subsystem.
# --check -C Only run with Health-checker subsystem.
# --dont-release-vrrp -V Dont remove VRRP VIPs & VROUTEs on daemon stop.
# --dont-release-ipvs -I Dont remove IPVS topology on daemon stop.
# --dump-conf -d Dump the configuration data.
# --log-detail -D Detailed log messages.
# --log-facility -S 0-7 Set local syslog facility (default=LOG_DAEMON)
#
KEEPALIVED_OPTIONS="-D"
(Debian12.8版本)
# 编辑启动参数,加入-S 0,使用0用户输出日志信息
vim /etc/default/keepalived
KEEPALIVED_OPTIONS="-D -S 0"
# 编辑rsyslog配置文件,定制rsyslog的用户自定义日志功能
vim /etc/rsyslog.conf
local0.* /var/log/keepalived.log
# 重启rsyslog服务
systemctl restart rsyslog
# 重启keepalived服务
systemctl restart keepalived
# 查看日志
tail -f /var/log/keepalived.log
notify通知
示例
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100
}
# 通用通知配置
notify /etc/keepalived/notify_generic.sh
# VRRP 特定通知配置
vrrp_notify_fifo /var/log/vrrp_notify_fifo
vrrp_notify_fifo_script /etc/keepalived/vrrp_notify_script.sh
# 当节点变为主节点时执行的脚本
notify_master /etc/keepalived/notify_master.sh
# 当节点变为备份节点时执行的脚本
notify_backup /etc/keepalived/notify_backup.sh
# 当节点发生故障时执行的脚本
notify_fault /etc/keepalived/notify_fault.sh
# 通知 FIFO 文件
notify_fifo /var/log/keepalived_notify_fifo
# 通知 FIFO 文件脚本
notify_fifo_script /etc/keepalived/notify_event.sh
}
- notify_fifo 是一个 FIFO(First In, First Out) 文件,用于在 Keepalived 进程之间传递通知事件。当 Keepalived 实例接收到通知事件时,它会将事件写入该 FIFO 文件中。其他程序或脚本可以读取该文件,从中获取通知事件。
用途:用于跨进程或跨服务传递事件信息。 - notify_fifo_script 是一个脚本路径,当 Keepalived 实例接收到通知事件时,它会执行这个脚本。脚本的输出会被写入到 notify_fifo 文件中,格式通常是:INSTANCE "VI_x" MASTER yyyy,其中 x 是虚拟路由器的 ID,yyyy 是当前虚拟路由器的优先级值。
用途:通过执行指定脚本处理通知事件。 - vrrp_notify_fifo:指定用于 VRRP 通知的 FIFO 文件。
- vrrp_notify_fifo_script:指定用于 VRRP 通知的脚本路径。
- notify_master 配置项用于指定当 Keepalived 实例从备份节点切换到主节点时执行的脚本或通知操作。当某个节点变为主节点时,系统会触发该配置项指定的脚本或动作。
用途:当 Keepalived 变为 MASTER 状态时触发通知。 - notify_backup 配置项用于指定当 Keepalived 实例从主节点切换到备份节点时执行的脚本或通知操作。通常,这在故障转移时触发,即当原主节点不可用时,备份节点接管为主节点。
用途:当 Keepalived 变为 BACKUP 状态时触发通知。 - notify_fault 配置项用于指定当 Keepalived 实例出现故障时执行的脚本或通知操作。当一个节点(如主节点或备份节点)故障时,系统会触发该配置项指定的脚本或动作。
用途:当节点出现故障时,触发通知。 - notify 是一个通用的通知配置项,用于指定 Keepalived 实例状态发生变化时需要执行的脚本或操作。与 notify_master、notify_backup 和 notify_fault 类似,notify 用于处理任意的状态变化通知。
用途:处理所有状态变化的通知。
合集:
备忘录
标签:
Keepalived
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)