keepalived双机热备
一句话总结 Keepalived 是干嘛的
简单说,Keepalived 就像给你的两台服务器上了个“双保险”。它让一台主服务器干活,另一台备份服务器在旁边盯着。如果主服务器宕机了或者服务挂了,备份服务器能立马顶上去,自动接管工作,而且对用户来说,整个过程服务是不中断的。它对外暴露的是一个虚拟IP(VIP),用户只认这个IP,不关心具体是哪台服务器在背后工作。
核心概念(用比喻理解)
-
VRRP协议:这是 Keepalived 工作的基础协议,可以理解为一套“抢老大”的规则。一群路由器(服务器)通过这个协议,选出一个“老大”(Master),其他的是“小弟”(Backup)。“老大”拿着虚拟IP负责干活,“小弟”们随时准备上位。
-
虚拟IP(VIP):这是对外服务的唯一门牌号。用户只认这个IP。这个门牌号平时挂在“老大”身上,“老大”一倒,它立马被“小弟”抢过来挂在自己身上,所以用户始终能找到服务。
-
心跳检测:“老大”会不停地向“小弟”们发送“我还活着”的信号(心跳包)。如果“小弟”们一段时间没收到这个信号,就认为“老大”挂了,然后“小弟”们会根据优先级选出新的“老大”,并挂上VIP。
怎么安装和用起来(极简版)
-
安装:用
yum命令就能装,通常和 Nginx 一起装。bash
yum install keepalived nginx
-
配置:核心是改
/etc/keepalived/keepalived.conf这个配置文件。 -
启动:启动 Keepalived 和 Nginx 服务。
bash
systemctl start keepalived nginx
-
验证:用
ip a命令看VIP在哪个机器上。把主服务器的 Keepalived 停掉 (systemctl stop keepalived),再看VIP是不是飘到备服务器上去了。
配置文件里到底配了啥?(说人话版)
配置文件主要分几大块,我们用大白话解释一下关键部分:
-
全局定义 (
global_defs):就是一些全局设置,比如出事了往哪个邮箱发报警邮件,给这台机器起个名字(router_id)用来标识。 -
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地址。
-
-
应用服务监控 (
virtual_server或track_script):Keepalived 不光要保证机器活着,还要保证机器上的服务(比如Nginx、MySQL)也活着。-
track_script:可以调用一个自定义脚本,比如check_nginx.sh。这个脚本会定期检查Nginx进程是不是在运行。 -
virtual_server+real_server:这是配合LVS做负载均衡用的,可以定义一组真实服务器,并配置健康检查方式(比如TCP_CHECK检查端口通不通,HTTP_GET检查网页能不能正常返回)。
-
高级玩法(通知与健康检查)
-
状态变化时发通知:可以在配置里加上
notify_master、notify_backup、notify_fault,指定当服务器角色切换时,自动运行一个脚本(比如发一封邮件),告诉你“我变成老大了”或“我挂了”。 -
更精细的健康检查:
-
三层检查:就是
ping,看机器通不通。 -
四层检查:检查端口,比如
TCP_CHECK看 MySQL 的 3306 端口是否通。 -
七层检查:最智能,可以模拟用户请求,比如
HTTP_GET去访问一个网页,看返回的 HTTP 状态码是不是 200,或者网页内容对不对。如果不对,就认为服务挂了。
-
-
非抢占模式 (
nopreempt):-
默认情况下,原来的“老大”修好恢复后,会立马把VIP抢回来(抢占模式)。这可能会导致服务短暂中断。
-
配置
nopreempt可以改成“非抢占模式”。原来的“老大”修好后,会乖乖当“小弟”,不会去抢VIP,直到现在的“老大”再次宕机它才会上位。这样可以减少不必要的切换。这个参数通常配在BACKUP那台机器上。
-
总结一下
-
Keepalived = 心跳检测 + VIP漂移 + 健康检查。
-
主要用途:一是双机热备(比如两台Nginx,一台MySQL),确保服务高可用;二是配合 LVS 做负载均衡的高可用。
-
核心思想:用一个 VIP 对外提供服务,通过主备服务器之间的心跳来监控对方状态,并通过健康检查来监控业务服务状态,一旦发现异常,就自动将VIP和任务切换到健康的服务器上。整个过程对用户无感知。
更多推荐
所有评论(0)