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

相关推荐
weixin_457260501 小时前
Linux 命令精讲(博客案例)
linux·运维·服务器
Elendill2 小时前
【Ubuntu】Mihomo 安装、systemd 托管、TUN 配置、API 测速与切换节点
linux·运维·ubuntu
姜太小白2 小时前
【Linux】CentOS 7 XRDP 远程桌面配置
linux·运维·centos
信创DevOps先锋2 小时前
DevOps工具链选型新趋势:本土化适配与安全可控成企业核心考量
运维·安全·devops
Warren982 小时前
Windows 本地安装 Jenkins 教程
linux·运维·windows·功能测试·mysql·jenkins
习惯就好zz2 小时前
RK3588 Android 12 修改 NTP 服务器:从资源覆盖到时间同步验证
android·运维·服务器·aosp·ntp
SPC的存折8 小时前
1、Redis数据库基础
linux·运维·服务器·数据库·redis·缓存
爱学习的小囧9 小时前
VMware ESXi 6.7U3v 新版特性、驱动集成教程和资源包、部署教程及高频问答详情
运维·服务器·虚拟化·esxi6.7·esxi蟹卡驱动
小疙瘩9 小时前
只是记录自己发布若依分离系统到linux过程中遇到的问题
linux·运维·服务器