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

相关推荐
涵信1 小时前
Windows11 安装 Ubuntu-20.04,同时安装配置 zsh shell,配置 git 别名(alias),大大提高开发效率
linux·git·ubuntu·bash
张国荣家的弟弟1 小时前
【Yonghong 企业日常问题04】永洪BI可视化工具Linux部署全攻略(部署详解版)
linux·运维·github
油泼辣子多加2 小时前
2024年12月23日Github流行趋势
github
喝鸡汤4 小时前
一起学Git【第五节:git版本回退】
git
lsalp4 小时前
OpenAI于2024年12月21日在GitHub上正式发布了实时嵌入式SDK。支持ESP32-S3
物联网·github·esp32-s3
web Rookie5 小时前
Git的简介
git
诸神缄默不语6 小时前
如何在服务器上克隆、pull、push GitHub私有项目
运维·github
dami_king7 小时前
项目开源能够带来什么?从中得到了什么?
开源·gitlab·github
沉默王二9 小时前
虾皮开的很高,还有签字费。
后端·面试·github
苏三有春9 小时前
五分钟学会如何在GitHub上自动化部署个人博客(hugo框架 + stack主题)
git·go·github