LVS+Keepalived高可用群集

一、Keepalived 双机热备基础知识

1. Keepalived 概述及安装

Keepalived 是一个基于 VRRP协议的开源软件,用于实现服务器的高可用性。它通过主备模式自动切换,确保服务在故障时无缝转移。主要应用于负载均衡、Web 服务器等场景

(1) Keepalived 的热备方式

Keepalived 采用 VRRP 协议实现热备。在双机热备中:

主服务器(Master):承担服务流量,定期发送心跳包

备用服务器(Backup):监控主服务器状态。当主服务器故障时,备用服务器接管虚拟 IP(VIP),成为新的主服务器

虚拟路由器 ID(VRID):主备服务器需配置相同的 VRID,以标识同一个虚拟路由器组。

优先级机制:通过优先级值(如 100 为主,50 为备)决定切换顺序

切换过程可表示为: $$ \text{主服务器故障} \implies \text{备用服务器提升为主} \implies \text{服务恢复} $$

(2) Keepalived 的安装与服务控制
在 Linux 系统上安装 Keepalived,以 Ubuntu 为例:
bash 复制代码
# 安装 Keepalived
sudo apt-get update
sudo apt-get install keepalived -y

服务控制命令:

启动服务:sudo systemctl start keepalived

停止服务:sudo systemctl stop keepalived

重启服务:sudo systemctl restart keepalived

查看状态:sudo systemctl status keepalived

2. 使用 Keepalived 实现双机热备

(1) 主服务器的配置

编辑主服务器的配置文件 /etc/keepalived/keepalived.conf

plaintext 复制代码
global_defs {
    router_id LVS_MASTER  # 唯一标识
}

vrrp_instance VI_1 {
    state MASTER          # 角色为主
    interface eth0        # 网络接口
    virtual_router_id 51  # VRID,需一致
    priority 100          # 优先级,主高于备
    advert_int 1          # 心跳间隔(秒)
    authentication {
        auth_type PASS    # 认证类型
        auth_pass 1234    # 密码,需一致
    }
    virtual_ipaddress {
        192.168.1.100     # 虚拟 IP
    }
}

重启服务:sudo systemctl restart keepalived

(2) 备用服务器的配置

备用服务器配置文件类似,但修改状态和优先级:

plaintext 复制代码
global_defs {
    router_id LVS_BACKUP
}

vrrp_instance VI_1 {
    state BACKUP           # 角色为备
    interface eth0
    virtual_router_id 51
    priority 50            # 优先级低于主
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1234
    }
    virtual_ipaddress {
        192.168.1.100
    }
}

重启服务:sudo systemctl restart keepalived

(3) 测试双机热备功能
连通性测试

使用 ping 命令测试虚拟 IP 的连通性:

bash 复制代码
ping 192.168.1.100

如果主服务器故障,应能继续 ping 通,IP 切换到备服务器

Web 访问测试

假设虚拟 IP 指向 Web 服务:

bash 复制代码
curl http://192.168.1.100

在主服务器宕机时,服务应无中断

查看日志记录

检查 Keepalived 日志以验证切换:

bash 复制代码
tail -f /var/log/syslog | grep keepalived

日志中应有类似条目:

plaintext 复制代码
Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE

二、使用 Keepalived 实现双机热备

1. 基础环境配置

网络设置 :确保主备服务器在同一网段,虚拟 IP 为 192.168.1.100

Web 节点 :准备至少两台后端 Web 服务器(如 IP: 192.168.1.101, 192.168.1.102),安装 Nginx 或 Apache

防火墙:开放 VRRP 协议端口(如 UDP 112)和 Web 端口(如 TCP 80)

2. 配置主调度器

在主服务器上配置 Keepalived 和 LVS:

plaintext 复制代码
global_defs {
    router_id LVS_MASTER
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1234
    }
    virtual_ipaddress {
        192.168.1.100
    }
}

virtual_server 192.168.1.100 80 {
    delay_loop 6
    lb_algo rr           # 轮询算法
    lb_kind DR           # 直接路由模式
    protocol TCP

    real_server 192.168.1.101 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
        }
    }
    real_server 192.168.1.102 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
        }
    }
}

重启服务:sudo systemctl restart keepalived

3. 配置从调度器

在备用服务器上,使用类似配置,但修改为 state BACKUPpriority 50

4. 配置 Web 节点服务器

在每个 Web 节点上:

设置 ARP 抑制(避免 VIP 冲突):

bash 复制代码
echo "net.ipv4.conf.all.arp_ignore = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.arp_announce = 2" >> /etc/sysctl.conf
sysctl -p

配置 Web 服务(以 Nginx 为例):

bash 复制代码
sudo apt-get install nginx -y
echo "Server response from $(hostname)" > /var/www/html/index.html

5. 测试 LVS+Keepalived 高可用群集

模拟故障:手动停止主服务器的 Keepalived 服务:

bash 复制代码
sudo systemctl stop keepalived

测试切换

使用 curl 访问虚拟 IP:

bash 复制代码
curl http://192.168.1.100

应能获得 Web 响应,无中断

查看备用服务器日志:

bash 复制代码
tail -f /var/log/syslog | grep keepalived

应有提升为主服务器的记录

恢复测试:重启原主服务器,验证是否自动恢复为备角色

相关推荐
Yupureki5 小时前
《Linux网络编程》6.UDP原理
linux·运维·服务器·网络·udp
楼田莉子5 小时前
Linux网络:NAT_代理
linux·运维·服务器·开发语言·c++·后端
Harvy_没救了6 小时前
【网络运维】 WordPress 部署复盘
运维·网络
weixin_402278456 小时前
VS code 本地推送github添加SSH设置
运维·git·ssh
fish_xk6 小时前
Linux的权限
linux·运维·服务器
嵌入式×边缘AI:打怪升级日志8 小时前
Linux 驱动与应用开发核心自测题库(面试官问答完整版)
linux·运维·php
eastyuxiao9 小时前
企业 OpenClaw 文档自动化落地项目 - 思维导图范围拆解
运维·自动化
Sirens.9 小时前
Umami:从Cloud迁移到服务器
运维·服务器
练习时长一年9 小时前
分页插件冲突问题
服务器·前端·windows
zhangfeng113310 小时前
CI/CD 是软件开发中的两个核心实践,合起来指代一套自动化的软件交付流程
运维·ci/cd·自动化