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群集,实现企业级服务的负载均衡和故障自动切换。

相关推荐
遇到困难睡大觉哈哈14 分钟前
Git推送错误解决方案:`rejected -> master (fetch first)`
大数据·git·elasticsearch
ON.LIN38 分钟前
Git提交本地项目到Github
git·github
uhakadotcom1 小时前
使用 Model Context Protocol (MCP) 构建 GitHub PR 审查服务器
后端·面试·github
九月镇灵将1 小时前
6.git项目实现变更拉取与上传
git·python·scrapy·scrapyd·gitpython·gerapy
wuyijysx1 小时前
ubuntu git cola gui
git·软件工具
uhakadotcom1 小时前
Apache Airflow入门指南:数据管道的强大工具
算法·面试·github
uhakadotcom1 小时前
Ruff:Python 代码分析工具的新选择
后端·面试·github
uhakadotcom1 小时前
Mypy入门:Python静态类型检查工具
后端·面试·github
uhakadotcom3 小时前
构建高效自动翻译工作流:技术与实践
后端·面试·github
九月镇灵将3 小时前
GitPython库快速应用入门
git·python·gitpython