LVS+Keepalived 高可用

news2025/6/4 7:20:10

目录

一、核心概念

1. LVS(Linux Virtual Server)

2. Keepalived

二、高可用架构设计

1. 架构拓扑图

2. 工作流程

三、部署步骤(以 DR 模式为例)

1. 环境准备

2. 主 LVS 节点配置

(1)安装 Keepalived

(2)配置 Keepalived 主节点(/etc/keepalived/keepalived.conf)

(3)配置 LVS 内核参数(DR 模式需关闭 ARP 响应)

3. 备 LVS 节点配置

4. 后端服务器配置(以 Nginx 为例)

(1)绑定 VIP(lo 接口,避免响应 ARP 请求)

(2)关闭 IP 转发

(3)启动 Nginx 服务

四、验证与维护

1. 状态检查

2. 故障切换测试

五、注意事项

六、扩展场景

命令解析

全局配置部分

VRRP 实例配置

LVS 虚拟服务器配置

后端服务器配置

配置总结


一、核心概念
1. LVS(Linux Virtual Server)
  • 定义:基于 Linux 内核的负载均衡器,工作在 OSI 模型的第四层(传输层),通过 IP 和端口实现流量分发。
  • 工作模式
    • NAT 模式:客户端请求经 LVS 转发至后端服务器,响应流量需通过 LVS 返回(需配置 SNAT/DNAT)。
    • DR 模式(Direct Routing):LVS 仅转发请求,后端服务器直接响应客户端(需共享 VIP,配置路由或调整内核参数)。
    • TUN 模式(隧道模式):通过 IP 隧道封装技术将请求转发至后端服务器(适用于跨网段场景)。
  • 调度算法
    • 轮询(Round Robin)、加权轮询(Weighted RR)、最少连接(Least Connections)、加权最少连接(Weighted LC)等。
2. Keepalived
  • 定义:基于 VRRP(Virtual Router Redundancy Protocol)协议的高可用解决方案,用于监控 LVS 节点状态,实现主备切换。
  • 核心功能
    • 健康检查:通过 TCP、HTTP、SSL 等方式检测后端服务器和 LVS 节点的存活状态。
    • 虚拟路由冗余:多个 Keepalived 节点组成 VRRP 组,共享一个虚拟 IP(VIP),主节点故障时自动切换至备节点。
二、高可用架构设计
1. 架构拓扑图
客户端 <---- VIP ----> [主LVS+Keepalived] <---- 内网 ----> 后端服务器集群
               └---- VIP ----> [备LVS+Keepalived]

  • 关键组件
    • 主备 LVS 节点:运行 LVS 负载均衡服务,共享 VIP。
    • Keepalived 服务:部署在主备 LVS 节点上,通过心跳机制同步状态。
    • 后端服务器:处理实际业务请求,需配置为 LVS 的 Real Server。
2. 工作流程
  1. 正常状态
    • 主节点持有 VIP,接收客户端请求并通过 LVS 调度算法分发给后端服务器。
    • 备节点处于待命状态,定期监听主节点心跳。
  2. 主节点故障
    • 备节点检测到主节点心跳丢失,接管 VIP 并成为新的主节点,继续处理流量。
    • 原主节点恢复后,自动转为备节点(需配置抢占模式)。
三、部署步骤(以 DR 模式为例)
1. 环境准备
角色IP 地址软件组件
主 LVS 节点192.168.1.100LVS+Keepalived
备 LVS 节点192.168.1.101LVS+Keepalived
虚拟 IP(VIP)192.168.1.200-
后端服务器 1192.168.1.110Nginx+Keepalived(健康检查)
后端服务器 2192.168.1.111Nginx+Keepalived(健康检查)
2. 主 LVS 节点配置
(1)安装 Keepalived
yum install keepalived -y
(2)配置 Keepalived 主节点(/etc/keepalived/keepalived.conf)
global_defs {
   router_id LVS_MASTER  # 节点标识,主备需不同
}

vrrp_instance VI_1 {
    state MASTER          # 主节点状态(备节点为BACKUP)
    interface eth0        # 绑定VIP的网卡
    virtual_router_id 51  # VRRP组ID(主备需一致)
    priority 100          # 优先级(备节点设为90)
    advert_int 1          # 心跳间隔(秒)
    authentication {
        auth_type PASS
        auth_pass 1111    # 认证密码(主备需一致)
    }
    virtual_ipaddress {
        192.168.1.200/24  # 虚拟IP
    }
}

# LVS健康检查(监控后端服务器)
virtual_server 192.168.1.200 80 {
    delay_loop 6         # 健康检查间隔(秒)
    lb_algo rr           # 调度算法(轮询)
    lb_kind DR           # 工作模式(DR)
    protocol TCP         # 协议类型

    # 后端服务器配置
    real_server 192.168.1.110 80 {
        weight 1          # 服务器权重
        TCP_CHECK {       # TCP健康检查
            connect_port 80
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.1.111 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}
(3)配置 LVS 内核参数(DR 模式需关闭 ARP 响应)
echo "1" > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/eth0/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
3. 备 LVS 节点配置
  • Keepalived 配置:与主节点基本一致,需修改:
    state BACKUP          # 状态改为BACKUP
    priority 90           # 优先级低于主节点
    router_id LVS_BACKUP  # 节点标识不同
    
  • 内核参数配置:与主节点相同。
4. 后端服务器配置(以 Nginx 为例)
(1)绑定 VIP(lo 接口,避免响应 ARP 请求)
ifconfig lo:0 192.168.1.200 netmask 255.255.255.255 broadcast 192.168.1.200
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
(2)关闭 IP 转发
echo "0" > /proc/sys/net/ipv4/ip_forward
(3)启动 Nginx 服务
yum install nginx -y
systemctl start nginx
四、验证与维护
1. 状态检查
  • 查看 Keepalived 状态
    systemctl status keepalived
    # 主节点应显示"Master",备节点显示"Backup"
    
  • 查看 VIP 绑定情况
    ip addr show eth0 | grep 192.168.1.200  # 主节点应存在VIP
    
  • LVS 规则检查
    ipvsadm -L -n  # 应显示后端服务器列表
    
2. 故障切换测试
  1. 停止主节点 Keepalived 服务:
    systemctl stop keepalived
    
  2. 检查备节点是否接管 VIP,且 LVS 规则正常。
  3. 重启主节点 Keepalived,验证是否恢复为备节点(非抢占模式需手动切换)。
五、注意事项
  1. 网络互通性
    • 主备 LVS 节点需与后端服务器网络互通(DR 模式需共享 VIP 所在网段)。
    • 后端服务器响应流量需直接返回给客户端,避免经过 LVS(需配置路由或环回接口)。
  2. 健康检查优化
    • 根据业务类型选择检查方式(如 HTTP 检查需配置 URL 路径)。
    • 调整检查间隔(delay_loop)和重试次数,避免误判。
  3. 防火墙配置
    • 开放 Keepalived 心跳端口(UDP 112)和业务端口(如 80、443)。
    • 在 DR 模式中,确保后端服务器不响应 VIP 的 ARP 请求。
六、扩展场景
  • 多 VRRP 组:为不同业务配置独立的 VRRP 组,实现更细粒度的高可用。
  • 负载均衡与高可用分离:使用独立节点部署 Keepalived,避免与 LVS 共享资源。
  • 结合云平台:在云环境中通过浮动 IP(EIP)和私有网络实现 LVS+Keepalived 架构。

命令解析

全局配置部分

global_defs {
   router_id LVS_MASTER  # 节点标识,主备需不同
}

global_defs:定义全局参数

router_id:标识 Keepalived 实例的唯一名称,主备节点必须不同,用于区分不同的 Keepalived 节点

VRRP 实例配置

vrrp_instance VI_1 {
    state MASTER          # 主节点状态(备节点为BACKUP)
    interface eth0        # 绑定VIP的网卡
    virtual_router_id 51  # VRRP组ID(主备需一致)
    priority 100          # 优先级(备节点设为90)
    advert_int 1          # 心跳间隔(秒)
    authentication {
        auth_type PASS
        auth_pass 1111    # 认证密码(主备需一致)
    }
    virtual_ipaddress {
        192.168.1.200/24  # 虚拟IP
    }
}

  • vrrp_instance VI_1:定义 VRRP 实例,名称为 VI_1
  • state MASTER:当前节点的初始状态,主节点为 MASTER,备节点为 BACKUP
  • interface eth0:绑定虚拟 IP 的物理网卡
  • virtual_router_id 51:VRRP 组 ID,取值范围 1-255,主备节点必须相同
  • priority 100:节点优先级,数值越大优先级越高,主节点应高于备节点
  • advert_int 1:发送 VRRP 通告的时间间隔(心跳间隔)
  • authentication:VRRP 认证配置,防止非法节点加入
    • auth_type PASS:密码认证方式
    • auth_pass 1111:认证密码,主备必须一致
  • virtual_ipaddress:定义虚拟 IP 地址,可配置多个

LVS 虚拟服务器配置

virtual_server 192.168.1.200 80 {
    delay_loop 6         # 健康检查间隔(秒)
    lb_algo rr           # 调度算法(轮询)
    lb_kind DR           # 工作模式(DR)
    protocol TCP         # 协议类型

  • virtual_server:定义虚拟服务器,即负载均衡的 VIP 和端口
  • delay_loop 6:健康检查的时间间隔(秒)
  • lb_algo rr:负载均衡调度算法
    • rr:轮询(Round Robin)
    • wrr:加权轮询
    • lc:最少连接(Least Connections)
    • wlc:加权最少连接
  • lb_kind DR:LVS 工作模式
    • DR:直接路由模式(Direct Routing)
    • NAT:网络地址转换模式
    • TUN:IP 隧道模式
  • protocol TCP:使用 TCP 协议进行负载均衡

后端服务器配置

    real_server 192.168.1.110 80 {
        weight 1          # 服务器权重
        TCP_CHECK {       # TCP健康检查
            connect_port 80
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }

  • real_server:定义真实服务器(后端服务器)的 IP 和端口
  • weight 1:服务器权重,数值越大被分配的请求越多
  • TCP_CHECK:TCP 健康检查配置
    • connect_port 80:检查的端口
    • connect_timeout 3:连接超时时间(秒)
    • retry 3:重试次数
    • delay_before_retry 3:重试前的延迟时间(秒)

配置总结

这个配置文件实现了一个基于 DR 模式的 LVS 负载均衡器的高可用方案:

  1. 使用 Keepalived 实现主备节点自动切换
  2. 虚拟 IP 地址为 192.168.1.200,绑定在 eth0 网卡上
  3. 负载均衡采用轮询算法,工作在 DR 模式
  4. 对两个后端服务器(192.168.1.110 和 192.168.1.111)进行健康检查
  5. 当主节点出现故障时,备节点将接管虚拟 IP 继续提供服务

配置注意事项:

  • 主备节点的 virtual_router_id 和 auth_pass 必须相同
  • 主备节点的 state 和 priority 必须不同
  • 后端服务器需要配置 VIP 的回环地址,并设置合适的 ARP 参数
  • DR 模式下,后端服务器需要和 LVS 在同一个物理网段

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2396184.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux正则三剑客篇

一、历史命令 history 命令 &#xff1a;用于输出历史上使用过的命令行数量及具体命令。通过 history 可以快速查看并回顾之前执行过的命令&#xff0c;方便重复操作或追溯执行过程。 !行号 &#xff1a;通过指定历史命令的行号来重新执行该行号对应的命令。例如&#xff0c;若…

【计算机网络】第3章:传输层—可靠数据传输的原理

目录 一、PPT 二、总结 &#xff08;一&#xff09;可靠数据传输原理 关键机制 1. 序号机制 (Sequence Numbers) 2. 确认机制 (Acknowledgements - ACKs) 3. 重传机制 (Retransmission) 4. 校验和 (Checksum) 5. 流量控制 (Flow Control) 协议实现的核心&#xff1a;滑…

OpenCV CUDA模块直方图计算------在 GPU上执行直方图均衡化(Histogram Equalization)函数equalizeHist

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::cuda::equalizeHist 用于增强图像的对比度&#xff0c;通过将图像的灰度直方图重新分布&#xff0c;使得图像整体对比度更加明显。 这在医学…

构建系统maven

1 前言 说真的&#xff0c;我是真的不想看构建了&#xff0c;因为真的太多了。又多又乱。Maven、Gradle、Make、CMake、Meson、Ninja&#xff0c;Android BP。。。感觉学不完&#xff0c;根本学不完。。。 但是没办法最近又要用一下Maven&#xff0c;所以咬着牙再简单整理一下…

day13 leetcode-hot100-23(链表2)

206. 反转链表 - 力扣&#xff08;LeetCode&#xff09; 1.迭代 思路 这个题目很简单&#xff0c;最主要的就是了解链表的数据结构。 链表由多个节点构成&#xff0c;每个节点包括值与指针&#xff0c;其中指针指向下一个节点&#xff08;单链表&#xff09;。 方法就是将指…

代谢组数据分析(二十五):代谢组与蛋白质组数据分析的异同

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍蛋白质组定义与基因的关系蛋白质组学(Proteomics)检测技术蛋白质的鉴定与定量分析蛋白质“鉴定”怎么做蛋白质“定量”怎么做蛋白质鉴定与定量对比应用领域代谢组定义代谢组学(M…

002 flutter基础 初始文件讲解(1)

在学习flutter的时候&#xff0c;要有“万物皆widget”的思想&#xff0c;这样有利于你的学习&#xff0c;话不多说&#xff0c;开始今天的学习 1.创建文件 进入trae后&#xff0c;按住ctrlshiftP&#xff0c;输入Flutter&#xff1a;New Project&#xff0c;回车&#xff0c…

Launcher3体系化之路

&#x1f44b; 欢迎来到Launcher 3 背景 车企对于桌面的排版布局好像没有手机那般复杂&#xff0c;但也有一定的需求。部分场景下&#xff0c;要考虑的上下文比手机要多一些&#xff0c;比如有如下的一些场景&#xff1a; 手车互联。HiCar&#xff0c;CarPlay&#xff0c;An…

用wireshark抓了个TCP通讯的包

昨儿个整理了下怎么用wireshark抓包&#xff0c;链接在这里&#xff1a;捋捋wireshark 今天打算抓个TCP通讯的包试试&#xff0c;整体来说比较有收获&#xff0c;给大家汇报一下。 首先就是如何搞到可以用来演示TCP通讯的客户端、服务端&#xff0c;问了下deepseek&#xff0c;…

VR/AR 显示瓶颈将破!铁电液晶技术迎来关键突破

在 VR/AR 设备逐渐走进大众生活的今天&#xff0c;显示效果却始终是制约其发展的一大痛点。纱窗效应、画面拖影、眩晕感…… 传统液晶技术的瓶颈让用户体验大打折扣。不过&#xff0c;随着铁电液晶技术的重大突破&#xff0c;这一局面有望得到彻底改变。 一、传统液晶技术瓶颈…

Python使用

Python学习&#xff0c;从安装&#xff0c;到简单应用 前言 Python作为胶水语言在web开发&#xff0c;数据分析&#xff0c;网络爬虫等方向有着广泛的应用 一、Python入门 相关基础语法直接使用相关测试代码 Python编译器版本使用3以后&#xff0c;安装参考其他教程&#xf…

分类预测 | Matlab实现CNN-LSTM-Attention高光谱数据分类

分类预测 | Matlab实现CNN-LSTM-Attention高光谱数据分类 目录 分类预测 | Matlab实现CNN-LSTM-Attention高光谱数据分类分类效果功能概述程序设计参考资料 分类效果 功能概述 代码功能 该MATLAB代码实现了一个结合CNN、LSTM和注意力机制的高光谱数据分类模型&#xff0c;核心…

【解决方案-RAGFlow】RAGFlow显示Task is queued、 Microsoft Visual C++ 14.0 or greater is required.

目录 一、长时间显示&#xff1a;Task is queued 二、GraphRAG消耗大量Token 三、error: Microsoft Visual C 14.0 or greater is required. Get it with “Microsoft C Build Tools“ 四、ModuleNotFoundError: No module named infinity.common; infinity is not a package 五…

爬虫到智能数据分析:Bright Data × Kimi 智能洞察亚马逊电商产品销售潜力

前言 电商数据分析在现代商业中具有重要的战略价值&#xff0c;通过对消费者行为、销售趋势、商品价格、库存等数据的深入分析&#xff0c;企业能够获得对市场动态的精准洞察&#xff0c;优化运营决策&#xff0c;预测市场趋势、优化广告投放、提升供应链效率&#xff0c;并通…

高级前端工程师必备的 JS 设计模式入门教程,常用设计模式案例分享

目录 高级前端工程师必备的 JS 设计模式入门教程&#xff0c;常用设计模式案例分享 一、什么是设计模式&#xff1f;为什么前端也要学&#xff1f; 1、设计模式是什么 2、设计模式的产出 二、设计模式在 JS 里的分类 三、常用设计模式实战讲解 1、单例模式&#xff08;S…

2023年电赛C题——电感电容测量装置

一、赛题 二、题目分析——损耗角正切值 对于一个正常的正弦波信号&#xff0c;如果通过的是一个电阻或一条导线&#xff0c;那么它的电流信号和电压信号是一致的&#xff08;有电压才有电流&#xff09;&#xff0c;没有相位差。 但是如果正弦波经过了一个电感或电容&#xf…

pycharm打印时不换行,方便对比观察

原来&#xff1a; 优化&#xff1a; import torch torch.set_printoptions(linewidth200) 优化结果&#xff1a;

因泰立科技:镭眸T51激光雷达,打造智能门控新生态

在高端门控行业&#xff0c;安全与效率是永恒的追求。如今&#xff0c;随着科技的飞速发展&#xff0c;激光雷达与TOF相机技术的融合&#xff0c;为门控系统带来了前所未有的智能感知能力&#xff0c;开启了精准守护的新时代。因泰立科技的镭眸T51激光雷达&#xff0c;作为这一…

Microsoft Fabric - 尝试一下Data Factory一些新的特性(2025年5月)

1.简单介绍 Microsoft Fabric是微软提供的一个数据管理和分析的统一平台&#xff0c;感觉最近的新特性也挺多的。 Data Factory是Microsoft Fabric的一个功能模块&#xff0c;也是一个cloud service。Data Factory可以和多种数据源进行连接&#xff0c;同时提供了data movemen…

【前端】javascript和Vue面试八股

面试暂时没有遇到过考这么深的&#xff0c;一般还是问一些生命周期和性能相关。 Q&#xff1a;什么情况下“ a 1 && a 2 && a 3 ”同时成立 A&#xff1a;对象的valueOf与toString方法&#xff1a;当一个对象与一个原始值&#xff08;如数字&#xff09;进…