Keepalived与LVS高可用群集部署指南

文章目录

Keepalived与LVS高可用群集部署指南

在企业级应用中,高可用性和负载均衡是确保服务稳定性的重要保障。本文将详细介绍Keepalived的工作原理、主要模块及其作用,并通过实际部署示例讲解如何使用Keepalived与LVS搭建高可用群集。

一、Keepalived的工作原理

Keepalived 是一个基于 VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)协议实现的高可用方案,主要用于解决 LVS 服务集群中的单点故障问题。在 LVS 服务集群中,通常配置一台主服务器(MASTER)和一台或多台备份服务器(BACKUP)。这些服务器对外提供统一的虚拟IP(VIP)地址。

1.1 Keepalived的工作机制

  • 主备切换:主服务器会定期发送 VRRP 通告信息给备份服务器,告知其自身的正常状态。当备份服务器未收到主服务器的 VRRP 信息时,即认为主服务器故障,会自动接管虚拟IP,继续对外提供服务,从而确保服务的高可用性。

1.2 Keepalived的主要模块

Keepalived 的体系架构主要由以下三个模块组成:

  • core模块:Keepalived 的核心模块,负责主进程的启动、维护,以及全局配置文件的加载和解析。
  • vrrp模块:实现 VRRP 协议,用于主备切换和虚拟IP地址的管理。
  • check模块:负责对后端服务器进行健康检查,常见的检查方式包括端口检查和 URL 检查。

二、LVS+Keepalived高可用群集部署

接下来,我们将通过一个实际案例,演示如何配置和部署一个基于 LVS 和 Keepalived 的高可用群集。

2.1 环境说明

  • 主DR服务器192.168.10.80 (VIP:192.168.10.180
  • 备DR服务器192.168.10.23 (VIP:192.168.10.180
  • Web服务器1192.168.10.16
  • Web服务器2192.168.10.17
  • 客户端192.168.10.100

2.2 配置负载调度器

在主、备DR服务器上进行相同的配置。

  1. 安装必要软件并加载模块

    bash 复制代码
    systemctl stop firewalld.service
    setenforce 0
    yum -y install ipvsadm keepalived
    modprobe ip_vs
    cat /proc/net/ip_vs  # 确认ip_vs模块已加载
  2. 配置Keepalived

    • /etc/keepalived/keepalived.conf中进行如下配置:

      bash 复制代码
      global_defs {
          smtp_server 127.0.0.1
          router_id LVS_01  # 主服务器为LVS_01,备服务器为LVS_02
          # vrrp_strict  # 注释掉此行以避免VIP无法连接
      }
      
      vrrp_instance VI_1 {
          state MASTER  # 主服务器为MASTER,备服务器为BACKUP
          interface ens33
          virtual_router_id 10
          priority 100  # 主服务器优先级为100,备服务器为90
          advert_int 1
          authentication {
              auth_type PASS
              auth_pass abc123
          }
          virtual_ipaddress {
              192.168.10.180
          }
      }
      
      virtual_server 192.168.10.180 80 {
          delay_loop 6
          lb_algo rr
          lb_kind DR
          persistence_timeout 50
          protocol TCP
          real_server 192.168.10.16 80 {
              weight 1
              TCP_CHECK {
                  connect_port 80
                  connect_timeout 3
                  nb_get_retry 3
                  delay_before_retry 3
              }
          }
          real_server 192.168.10.17 80 {
              weight 1
              TCP_CHECK {
                  connect_port 80
                  connect_timeout 3
                  nb_get_retry 3
                  delay_before_retry 3
              }
          }
      }
  3. 配置VIP(虚拟IP)

    • 编辑 /etc/sysconfig/network-scripts/ifcfg-ens33:0

      bash 复制代码
      DEVICE=ens33:0
      ONBOOT=yes
      IPADDR=192.168.10.180
      NETMASK=255.255.255.255
    • 启用虚拟网卡:

      bash 复制代码
      systemctl restart network
      ifup ens33:0
  4. 启动 ipvsadm 服务

    • 在主、备DR服务器上分别执行:

      bash 复制代码
      ipvsadm-save > /etc/sysconfig/ipvsadm
      systemctl start ipvsadm
      ipvsadm -C
      ipvsadm -A -t 192.168.10.180:80 -s rr
      ipvsadm -a -t 192.168.10.180:80 -r 192.168.10.16:80 -g
      ipvsadm -a -t 192.168.10.180:80 -r 192.168.10.17:80 -g
      ipvsadm -ln  # 查看配置
  5. 调整系统参数

    • 修改 /etc/sysctl.conf 关闭Linux 内核的重定向参数响应:

      bash 复制代码
      net.ipv4.conf.all.send_redirects = 0
      net.ipv4.conf.default.send_redirects = 0
      net.ipv4.conf.ens33.send_redirects = 0
    • 应用配置:

      bash 复制代码
      sysctl -p

2.3 配置Web节点服务器

在两台 Web 服务器上进行以下操作:

  1. 安装并启动HTTP服务

    bash 复制代码
    systemctl stop firewalld
    setenforce 0
    yum -y install httpd
    systemctl start httpd
  2. 配置虚拟IP

    • 编辑 /etc/sysconfig/network-scripts/ifcfg-lo:0

      bash 复制代码
      DEVICE=lo:0
      ONBOOT=yes
      IPADDR=192.168.10.180
      NETMASK=255.255.255.255
    • 启用虚拟网卡:

      bash 复制代码
      systemctl restart network
      ifup lo:0
      route add -host 192.168.10.180 dev lo:0
  3. 调整ARP响应参数

    • 修改 /etc/sysctl.conf,添加以下内容:

      bash 复制代码
      net.ipv4.conf.lo.arp_ignore = 1
      net.ipv4.conf.lo.arp_announce = 2
      net.ipv4.conf.all.arp_ignore = 1
      net.ipv4.conf.all.arp_announce = 2
    • 应用配置:

      bash 复制代码
      sysctl -p
  4. 配置Web页面内容

    • 192.168.10.16上执行:

      bash 复制代码
      echo 'this is kgc web!' > /var/www/html/index.html
    • 192.168.10.17上执行:

      bash 复制代码
      echo 'this is benet web!' > /var/www/html/index.html

2.4 测试与验证

  1. 在客户端浏览器中访问 http://192.168.10.180/,可以看到通过LVS+Keepalived的负载均衡效果。

  2. 关闭主服务器的Keepalived服务后,再次访问,确保备服务器自动接管虚拟IP,继续提供服务:

    bash 复制代码
    systemctl stop keepalived

2.4 测试与验证

  1. 在客户端浏览器中访问 http://192.168.10.180/,可以看到通过LVS+Keepalived的负载均衡效果。

  2. 关闭主服务器的Keepalived服务后,再次访问,确保备服务器自动接管虚拟IP,继续提供服务:

    bash 复制代码
    systemctl stop keepalived

通过上述步骤,您可以成功搭建一个高可用的LVS+Keepalived群集,实现企业级服务的负载均衡和故障自动切换。

相关推荐
xuhe21 小时前
[全流程详细教程]Docker部署ClawBot, 使用GLM4.7, 接入TG Bot实现私人助理. 解决Docker Openclaw Permission Denied问题
linux·docker·ai·github·tldr
先跑起来再说1 小时前
Git 入门到实战:一篇搞懂安装、命令、远程仓库与 IDEA 集成
ide·git·后端·elasticsearch·golang·intellij-idea
宇宙帅猴1 小时前
GitHub 私有仓库认证完整指南:告别密码错误,使用 PAT 令牌
github
前端市界4 小时前
用 React 手搓一个 3D 翻页书籍组件,呼吸海浪式翻页,交互体验带感!
前端·架构·github
happyprince4 小时前
2026年02月07日热门github项目
github
承渊政道4 小时前
Linux系统学习【Linux系统的进度条实现、版本控制器git和调试器gdb介绍】
linux·开发语言·笔记·git·学习·gitee
Doro再努力4 小时前
【Linux操作系统12】Git版本控制与GDB调试:从入门到实践
linux·运维·服务器·git·vim
CoderJia程序员甲5 小时前
GitHub 热榜项目 - 日榜(2026-02-06)
人工智能·ai·大模型·github·ai教程
荔枝吻6 小时前
忘记服务器密码,在Xshell7中查看已保存密码
运维·服务器·github
摇滚侠7 小时前
MAC IDEA GIT 提交区显示了几个不存在的目录
git·idea