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

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

相关推荐
A小辣椒10 小时前
TShark:Wireshark CLI 功能
linux
A小辣椒14 小时前
TShark:基础知识
linux
AlfredZhao16 小时前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao1 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
大树882 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质2 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush42 天前
嵌入式linux学习记录十四、术语
linux·嵌入式