一句话总结 Keepalived 是干嘛的

简单说,Keepalived 就像给你的两台服务器上了个“双保险”。它让一台主服务器干活,另一台备份服务器在旁边盯着。如果主服务器宕机了或者服务挂了,备份服务器能立马顶上去,自动接管工作,而且对用户来说,整个过程服务是不中断的。它对外暴露的是一个虚拟IP(VIP),用户只认这个IP,不关心具体是哪台服务器在背后工作。


核心概念(用比喻理解)

  • VRRP协议:这是 Keepalived 工作的基础协议,可以理解为一套“抢老大”的规则。一群路由器(服务器)通过这个协议,选出一个“老大”(Master),其他的是“小弟”(Backup)。“老大”拿着虚拟IP负责干活,“小弟”们随时准备上位。

  • 虚拟IP(VIP):这是对外服务的唯一门牌号。用户只认这个IP。这个门牌号平时挂在“老大”身上,“老大”一倒,它立马被“小弟”抢过来挂在自己身上,所以用户始终能找到服务。

  • 心跳检测:“老大”会不停地向“小弟”们发送“我还活着”的信号(心跳包)。如果“小弟”们一段时间没收到这个信号,就认为“老大”挂了,然后“小弟”们会根据优先级选出新的“老大”,并挂上VIP。


怎么安装和用起来(极简版)

  1. 安装:用 yum 命令就能装,通常和 Nginx 一起装。

    bash

    yum install keepalived nginx
  2. 配置:核心是改 /etc/keepalived/keepalived.conf 这个配置文件。

  3. 启动:启动 Keepalived 和 Nginx 服务。

    bash

    systemctl start keepalived nginx
  4. 验证:用 ip a 命令看VIP在哪个机器上。把主服务器的 Keepalived 停掉 (systemctl stop keepalived),再看VIP是不是飘到备服务器上去了。


配置文件里到底配了啥?(说人话版)

配置文件主要分几大块,我们用大白话解释一下关键部分:

  1. 全局定义 (global_defs):就是一些全局设置,比如出事了往哪个邮箱发报警邮件,给这台机器起个名字(router_id)用来标识。

  2. VRRP实例 (vrrp_instance):这是最核心的一块,定义了一个高可用小组。

    • state:你想让这台机器当“老大”(MASTER)还是“小弟”(BACKUP)?

    • interface:心跳检测和绑定VIP用哪块网卡?(比如 eth0)

    • virtual_router_id:这个组的ID(比如50),同一个组里的数字必须一样,用来标记这是一伙的。

    • priority:优先级,数字越大,越有可能当“老大”。Master一般设成100,Backup设成90。

    • advert_int:心跳检测的间隔时间(秒),也就是“老大”多久喊一声“我还活着”。

    • authentication:组内通信的密码,防止别人乱入。

    • virtual_ipaddress:最重要的VIP,就是对外服务的那个IP地址。

  3. 应用服务监控 (virtual_server 或 track_script):Keepalived 不光要保证机器活着,还要保证机器上的服务(比如Nginx、MySQL)也活着。

    • track_script:可以调用一个自定义脚本,比如 check_nginx.sh。这个脚本会定期检查Nginx进程是不是在运行。

    • virtual_server + real_server:这是配合LVS做负载均衡用的,可以定义一组真实服务器,并配置健康检查方式(比如 TCP_CHECK 检查端口通不通,HTTP_GET 检查网页能不能正常返回)。


高级玩法(通知与健康检查)

  1. 状态变化时发通知:可以在配置里加上 notify_master、notify_backup、notify_fault,指定当服务器角色切换时,自动运行一个脚本(比如发一封邮件),告诉你“我变成老大了”或“我挂了”。

  2. 更精细的健康检查:

    • 三层检查:就是 ping,看机器通不通。

    • 四层检查:检查端口,比如 TCP_CHECK 看 MySQL 的 3306 端口是否通。

    • 七层检查:最智能,可以模拟用户请求,比如 HTTP_GET 去访问一个网页,看返回的 HTTP 状态码是不是 200,或者网页内容对不对。如果不对,就认为服务挂了。

  3. 非抢占模式 (nopreempt):

    • 默认情况下,原来的“老大”修好恢复后,会立马把VIP抢回来(抢占模式)。这可能会导致服务短暂中断。

    • 配置 nopreempt 可以改成“非抢占模式”。原来的“老大”修好后,会乖乖当“小弟”,不会去抢VIP,直到现在的“老大”再次宕机它才会上位。这样可以减少不必要的切换。这个参数通常配在 BACKUP 那台机器上。

总结一下

  • Keepalived = 心跳检测 + VIP漂移 + 健康检查。

  • 主要用途:一是双机热备(比如两台Nginx,一台MySQL),确保服务高可用;二是配合 LVS 做负载均衡的高可用。

  • 核心思想:用一个 VIP 对外提供服务,通过主备服务器之间的心跳来监控对方状态,并通过健康检查来监控业务服务状态,一旦发现异常,就自动将VIP和任务切换到健康的服务器上。整个过程对用户无感知。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐