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,确认切换和健康检查事件。

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

相关推荐
Heart_to_Yang2 小时前
TPLink路由器虚拟专用网端口映射故障问题,端口转发无效
运维·服务器·网络
艾莉丝努力练剑2 小时前
【Linux线程】Linux系统多线程(六):<线程同步与互斥>线程同步(上)
java·linux·运维·服务器·c++·学习·线程
姚不倒2 小时前
构建高可用可观测性平台:VictoriaMetrics 集群 + VictoriaLogs 统一接入实践
运维·docker·微服务·云原生·架构
Gofarlic_OMS2 小时前
中小企业控制方法:中小型制造企业Creo许可证成本控制
java·大数据·运维·算法·matlab·制造
i建模2 小时前
在 Ubuntu 上安装 pnpm
linux·运维·ubuntu
江公望2 小时前
Linux kernel kfifo用法,10分钟讲清楚
linux
共享家95272 小时前
C++ 日志类设计
linux·c++·后端
Ops菜鸟(Xu JieHao)2 小时前
Linux快速生成测试日志flog
linux·运维·服务器·日志·log
云栖梦泽2 小时前
Linux内核与驱动:12.设备树实例分析
linux·c++·单片机