LVS+Keepalived 高可用群集

一、Keepalived双机热备基础知识

1. Keepalived概述及安装

Keepalived 是一个基于 VRRP(Virtual Router Redundancy Protocol)协议的开源软件,用于实现服务器的高可用性(HA)。它通过虚拟 IP 地址(VIP)在主备服务器之间切换,确保服务在单点故障时自动恢复。Keepalived 还支持负载均衡功能,常与 LVS(Linux Virtual Server)结合使用。

(1) Keepalived的热备方式

Keepalived 采用 VRRP 协议实现双机热备。VRRP 允许多个服务器共享一个虚拟 IP 地址,其中一台服务器作为主服务器(Master),其他作为备用服务器(Backup)。主服务器负责处理流量,备用服务器监控主服务器状态。当主服务器故障时,备用服务器通过选举机制(基于优先级)接管虚拟 IP,实现无缝切换。这种方式确保了服务的高可用性和连续性。

(2) Keepalived的安装与服务控制

Keepalived 的安装通常通过 Linux 包管理器完成。以下是常见安装步骤和服务控制命令(以 Ubuntu 或 CentOS 为例):

  • 安装命令

    bash 复制代码
    # Ubuntu/Debian
    sudo apt update
    sudo apt install keepalived
    
    # CentOS/RHEL
    sudo yum install epel-release  # 如果需要
    sudo yum install keepalived
  • 服务控制

    • 启动服务:sudo systemctl start keepalived
    • 停止服务:sudo systemctl stop keepalived
    • 重启服务:sudo systemctl restart keepalived
    • 设置开机自启:sudo systemctl enable keepalived
    • 查看状态:sudo systemctl status keepalived

安装后,配置文件位于 /etc/keepalived/keepalived.conf。编辑此文件进行配置。

2. 使用Keepalived实现双机热备

实现双机热备需配置主服务器和备用服务器,确保它们共享同一虚拟 IP。以下是详细步骤。

(1) 主服务器的配置

主服务器配置文件示例(/etc/keepalived/keepalived.conf):

conf 复制代码
global_defs {
    router_id master_node  # 唯一标识符
}

vrrp_instance VI_1 {
    state MASTER           # 设置为MASTER
    interface eth0         # 网络接口名
    virtual_router_id 51   # 虚拟路由器ID,需与备用服务器一致
    priority 100           # 优先级,值越高越优先(主服务器设置较高)
    advert_int 1           # 心跳间隔(秒)
    authentication {
        auth_type PASS     # 认证类型
        auth_pass 1234     # 认证密码,需与备用服务器一致
    }
    virtual_ipaddress {
        192.168.1.100      # 虚拟IP地址
    }
}

配置后重启服务:sudo systemctl restart keepalived

(2) 备用服务器的配置

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

conf 复制代码
global_defs {
    router_id backup_node  # 唯一标识符
}

vrrp_instance VI_1 {
    state BACKUP           # 设置为BACKUP
    interface eth0         # 网络接口名
    virtual_router_id 51   # 与主服务器一致
    priority 90            # 优先级低于主服务器
    advert_int 1           # 心跳间隔
    authentication {
        auth_type PASS
        auth_pass 1234     # 与主服务器一致
    }
    virtual_ipaddress {
        192.168.1.100      # 虚拟IP地址
    }
}

重启服务:sudo systemctl restart keepalived

(3) 测试双机热备功能

测试步骤确保故障切换正常:

  • 验证虚拟IP :在主服务器上运行 ip addr show eth0,确认虚拟 IP(192.168.1.100)绑定。
  • 模拟故障 :停止主服务器服务:sudo systemctl stop keepalived
  • 检查切换 :在备用服务器上运行 ip addr show eth0,确认虚拟 IP 已接管。
  • 恢复测试:重启主服务器服务,检查虚拟 IP 是否回切。
  • 日志监控 :查看日志:journalctl -u keepalived,确认切换事件。

测试成功标准:虚拟 IP 在主服务器故障时自动切换到备用服务器,服务不中断。

二、使用Keepalived实现双机热备

此部分基于 LVS+Keepalived 实现高可用群集,适用于 Web 服务负载均衡。假设环境:两台调度器(主和从)、多台 Web 节点服务器。

1. 基础环境配置

前提条件:

  • 网络设置 :所有服务器在同一局域网,分配静态 IP。例如:

    • 主调度器:192.168.1.10
    • 从调度器:192.168.1.11
    • Web 节点:192.168.1.20, 192.168.1.21
    • 虚拟 IP:192.168.1.100
  • 软件安装

    • 调度器:安装 Keepalived 和 IPVS(LVS 内核模块)。

      bash 复制代码
      sudo apt install keepalived ipvsadm  # Ubuntu
      sudo yum install keepalived ipvsadm  # CentOS
    • Web 节点:安装 Web 服务器(如 Nginx 或 Apache)。

      bash 复制代码
      sudo apt install nginx  # Ubuntu
      sudo yum install httpd  # CentOS
  • 防火墙配置:开放相关端口(如 VRRP 协议端口 112,HTTP 端口 80)。

2. 配置主调度器

编辑 Keepalived 配置文件 (/etc/keepalived/keepalived.conf),结合 LVS 设置:

conf 复制代码
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 NAT                     # NAT 模式
    protocol TCP

    real_server 192.168.1.20 80 {   # Web 节点1
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
        }
    }
    real_server 192.168.1.21 80 {   # Web 节点2
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
        }
    }
}

重启服务:sudo systemctl restart keepalived

3. 配置从调度器

配置文件类似主调度器,但状态改为 BACKUP,优先级降低:

conf 复制代码
global_defs {
    router_id lvs_backup
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 90
    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 NAT
    protocol TCP

    real_server 192.168.1.20 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
        }
    }
    real_server 192.168.1.21 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
        }
    }
}

重启服务:sudo systemctl restart keepalived

4. 配置Web节点服务器

在每个 Web 节点上配置 Web 服务:

  • 安装并启动 Nginx(示例):

    bash 复制代码
    sudo apt install nginx
    sudo systemctl start nginx
    sudo systemctl enable nginx
  • 创建测试页面:编辑 /var/www/html/index.html,添加内容如 "Server 1" 或 "Server 2" 以区分节点。

  • 确保 Web 服务监听 80 端口。

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

测试包括负载均衡和故障切换:

  1. 负载均衡测试
    • 从客户端访问虚拟 IP:curl http://192.168.1.100,多次请求应轮询到不同 Web 节点。
    • 使用 ipvsadm 查看连接状态:sudo ipvsadm -ln,确认流量分布。
  2. 高可用测试
    • 模拟主调度器故障:停止主调度器服务:sudo systemctl stop keepalived
    • 检查虚拟 IP:在从调度器上运行 ip addr show eth0,确认 IP 接管。
    • 客户端访问:服务应不中断,流量由从调度器处理。
    • 恢复主调度器:重启服务,检查 IP 回切。
  3. 日志验证 :查看 Keepalived 日志:journalctl -u keepalived,确认切换和健康检查事件。

成功标准:群集在故障时自动切换,负载均衡均匀分配请求。

相关推荐
Mapleay15 小时前
ALSA 专业术语 和 dai_link 分析
linux
我不是立达刘宁宇15 小时前
基础文件操作
运维
青梅橘子皮15 小时前
Linux---权限
linux·运维·服务器
gQ85v10Db16 小时前
Redis分布式锁进阶第十五篇:全系列终极收官复盘 + 全站锁规范归档 + 生产零故障长期运维兜底总方案
运维·redis·分布式
lzh2004091916 小时前
深入学习Linux进程间通信:解析消息队列
linux·c++
苏宸啊16 小时前
进程替换库函数
linux
智能化咨询16 小时前
(112页PPT)德勤制造业企业数据治理平台规划方案(附下载方式)
大数据·运维·人工智能
时光之源16 小时前
安装WSL2后在其中安装Ubuntu24.04.4再安装OpenClaw全流程傻瓜式教学:WSL2 + Ubuntu 24.04 + OpenClaw
linux·运维·ubuntu·openclaw·龙虾
eastyuxiao17 小时前
流程图 + 配置清单 在团队 / 公司项目管理场景的落地应用
大数据·运维·人工智能·流程图
大袁同学17 小时前
【进程信号】:溯源硬件起中断,掌舵内核控信号
linux·信号处理