keepalived高可用与负载均衡

Keepalived 双机热备基础

Keepalived 核心作用
  • 专为 LVS 设计的辅助工具,提供故障切换(Failover)**与**健康检查(Health Checking)

  • 主节点故障时自动切换至备用节点,主节点恢复后重新接管业务。

  • 非 LVS 环境可独立作为热备软件使用。

热备原理:VRRP 协议
  • 虚拟路由冗余协议,以软件实现 Linux 服务器多机热备。

  • 多台服务器组成热备组,共享 ** 虚拟 IP(VIP / 漂移 IP)** 对外提供服务。

  • 同一时刻仅主节点提供服务,备用节点冗余;主节点失效,备用节点按优先级接替 VIP。

  • Keepalived 自动管理 VIP,无需手动配置虚接口。

Keepalived 安装与服务
  • 安装:OpenEuler24 系统用 DNF/YUM 安装keepalivedipvsadm(LVS 环境必需)、nginx

  • 服务控制:设置开机自启systemctl enable keepalived

双机热备核心配置规则
  • 配置文件:/etc/keepalived/keepalived.conf
  • 全局配置global_defs:指定router_id(本服务器名称)。
  • VRRP 实例vrrp_instance
    • state:MASTER(主)/BACKUP(备)。
    • priority:优先级,数值越高越优先,主节点优先级高于备节点。
    • interface:承载 VIP 的物理网卡。
    • virtual_router_id:热备组内一致。
    • advert_int:心跳通告间隔。
    • authentication:热备组内认证信息一致。
    • virtual_ipaddress:漂移 VIP 地址。
  • 主备节点差异:router_idstatepriority不同,其余配置一致。
双机热备验证逻辑
  • 连通性:ping VIP,主节点宕机仅丢 1-2 个包即恢复。

  • 服务访问:主节点正常访问主节点服务,主节点故障切换至备节点服务。

  • 日志查看:/var/log/messages记录 MASTER/BACKUP 状态切换。

LVS+Keepalived 高可用集群

核心优势
  • 实现 LVS 负载调度器热备切换,提升可用性。

  • 自动对后端节点健康检查,移除失效节点,恢复后重新加入。

  • 无需手动执行ipvsadm,Keepalived 自动管理 LVS 规则。

集群架构(DR 模式)
  • 至少 2 台热备负载调度器(主 + 从)。

  • 3 台及以上后端节点服务器,搭配 NFS 共享保证页面一致。

  • 统一 VIP 对外提供服务。

Keepalived 配置 LVS 核心段
  • virtual_server VIP 端口:定义虚拟服务器。

  • delay_loop:健康检查间隔。

  • lb_algo:负载调度算法(如 rr 轮询)。

  • lb_kind:集群模式(DR 直接路由)。

  • protocol:传输协议(TCP)。

  • real_server:后端真实节点,配置权重与 TCP 健康检查。

DR 模式节点服务器要求
  • 配置 ARP 内核参数:arp_ignore=1arp_announce=2

  • 环回口lo:0配置 VIP,添加本地路由指向 VIP。

集群验证逻辑
  • 客户端通过 VIP 正常访问 Web 服务。

  • 主 / 从调度器任一故障,服务不中断。

  • ipvsadm -ln/ipvsadm -lnc查看负载分配。

实验案例

一、Keepalived 双机热备实验步骤

1. 基础环境准备(主、备服务器均执行)

①关闭 NetworkManager、防火墙

复制代码
systemctl stop NetworkManager
systemctl stop firewalld

②关闭 SELinux

复制代码
setenforce 0

③安装 Keepalived 与 ipvsadm 并设置开机自启

复制代码
yum -y install keepalived ipvsadm
systemctl enable keepalived

2. 主服务器配置

①备份配置文件

复制代码
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak

②编辑 keepalived.conf 配置文件

复制代码
vi keepalived.conf

配置内容

复制代码
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_01
   vrrp_skip_check_adv_addr
#  vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
​
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 1
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.10.172
    }
}

③启动 Keepalived 服务

复制代码
systemctl start keepalived

④查看 VIP 是否绑定成功

复制代码
ip add show dev ens33

3. 备用服务器配置

①执行与主服务器相同的基础环境准备

②备份配置文件

复制代码
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak

③编辑 keepalived.conf 配置文件

复制代码
vim keepalived.conf

配置内容

复制代码
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_02
}
​
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 1
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.10.172
    }
}

④启动 Keepalived 服务

复制代码
systemctl start keepalived

4. 功能测试

①客户端执行 ping 测试

复制代码
ping 192.168.10.172

②断开主服务器网络,观察 ping 连通性,验证 VIP 自动漂移

③恢复主服务器网络,验证 VIP 自动切回

二、LVS+Keepalived 高可用实验步骤

1. 主调度器配置

①基础环境准备(同双机热备)

②备份配置文件

复制代码
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak

③编辑 keepalived.conf 配置文件

复制代码
vim keepalived.conf

④配置内容

复制代码
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_01
}
​
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.10.172
    }
}
​
virtual_server 192.168.10.172 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0
!    persistence_timeout 50
    protocol TCP
​
    real_server 192.168.10.103 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.10.104 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

⑤配置内核参数

复制代码
vi /etc/sysctl.conf

添加内容:

复制代码
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

⑥生效内核参数

复制代码
sysctl -p

⑦启动 Keepalived 服务

复制代码
systemctl start keepalived

2. 从调度器配置

①基础环境准备(同主调度器)

②备份配置文件

复制代码
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak

③编辑 keepalived.conf 配置文件

复制代码
vim keepalived.conf

配置内容

复制代码
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_02
}
​
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.10.172
    }
}
​
virtual_server 192.168.10.172 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0
!    persistence_timeout 50
    protocol TCP
​
    real_server 192.168.10.101 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.10.102 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

④配置与主调度器相同的内核参数并生效

⑤启动 Keepalived 服务

复制代码
systemctl start keepalived

3. Web 节点服务器(web1、web2)配置

①关闭防火墙

复制代码
systemctl stop firewalld

②配置 lo 接口 VIP

复制代码
ip addr add 192.168.10.172/32 dev lo label lo:0
nmcli c reload
nmcli c up lo

③添加本地路由

复制代码
ip route add local 192.168.10.172/32 dev lo

④配置开机自启 VIP 与路由

复制代码
vi /etc/rc.local

添加内容:

复制代码
ip addr add 192.168.10.172/32 dev lo label lo:0
ip route add local 192.168.10.172/32 dev lo

⑤给 rc.local 添加执行权限

复制代码
chmod +x /etc/rc.local

⑥配置 ARP 内核参数

复制代码
vi /etc/sysctl.conf

添加内容:

复制代码
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

⑦生效内核参数

复制代码
sysctl -p

⑧安装 httpd 并配置测试页面

  • web1:

    yum -y install httpd
    echo "test web01" > /var/www/html/index.html
    systemctl start httpd

  • web2:

    yum -y install httpd
    echo "test web02" > /var/www/html/index.html
    systemctl start httpd

相关推荐
大树882 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质2 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工2 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智2 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_2 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉2 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
AC赳赳老秦2 天前
用 OpenClaw 搭建服务器故障应急响应系统,自动处理 80% 常见运维故障
android·运维·服务器·python·rxjava·deepseek·openclaw
java_cj2 天前
深入kube-apiserver认证机制:从Bearer Token到mTLS的完整认证链解析
linux·运维·服务器·云原生·容器·kubernetes
lsyeei2 天前
linux 系统目录详解
linux·运维·服务器