【网络知识】LVS+KeepAlived实现负载均衡+高可用

news/2024/10/17 2:41:26/

目录

  • 一、Linux Virtual Server (LVS):构建高性能负载均衡
    • 1. LVS 概述
    • 2. LVS 的工作原理
    • 3. LVS 的组件
      • 3.1 虚拟服务器 (Virtual Server)
      • 3.2 真实服务器 (Real Server)
      • 3.3 负载均衡器 (Load Balancer)
    • 4. LVS 的配置和管理
      • 4.1 安装 IPVS 模块
      • 4.2 配置虚拟服务器
      • 4.3 添加真实服务器
      • 4.4 查看 LVS 状态
    • 5. LVS 的优势
    • 6. LVS 的应用场景
    • 7. LVS结语
  • 二、什么是ipvsadm
    • 1、IPVS主要功能
    • 2、使用示例
  • 三、LVS+KeepAlived对系统进行了负载均衡+高可用架构的改造升级(两台实现高可用、四台实现负载均衡+高可用(先两两实现高可用再两两实现负载均衡))
    • 1、VRRP(Virtual Router Redundancy Protocol 虚拟路由冗余协议)
      • 1)什么是VRRP
      • 2)工作原理:
      • 3)应用场景:
    • 2、BFD(Bidirectional Forwarding Detection双向转发检测)
      • 1)工作原理:
      • 2)特点:
      • 3)优势:
    • 3、VRRPBFD相结合
    • 4、什么是Keepalived
  • 四、 LVS(Linux Virtual Server)和Nginx各自优势、区别及应用场景
    • 1、LVS的优势
    • 2、Nginx的优势
    • 3、LVS与Nginx 两者间的对比
    • 4、应用场景建议

一、Linux Virtual Server (LVS):构建高性能负载均衡

摘要:
Linux Virtual Server (LVS) 是一个强大的负载均衡解决方案,它集成在 Linux 内核中。LVS 工作在网络的第四层(传输层),能够高效地分发网络流量和请求到多个服务器,从而提高吞吐量和可用性。本文将详细介绍 LVS 的架构、组件、工作原理以及如何配置和使用 LVS 来构建一个高性能的负载均衡器。

关键词:
LVS, 负载均衡, Linux, IPVS,VRRPBFD, 网络性能


1. LVS 概述

Linux Virtual Server (LVS) 是一个基于 Linux 内核的负载均衡器,它使用内核模块 IPVS (IP Virtual Server) 来实现。LVS 可以在服务器负载较重时,将网络流量和用户请求分发到多个服务器上,以此来提高网络服务的可用性和可靠性。

2. LVS 的工作原理

LVS 工作在 OSI 模型的第四层,即传输层。它通过 IP 地址和端口号来识别传入的请求,并将这些请求分发到后端的真实服务器上。LVS 支持多种负载分发算法,包括轮询、最少连接、加权轮询和加权最少连接等。

3. LVS 的组件

3.1 虚拟服务器 (Virtual Server)

虚拟服务器是 LVS 的核心组件,它对外表现为一个或多个 IP 地址(VIPs),这些 IP 地址被客户端用来访问服务。虚拟服务器不处理任何实际的数据传输,而是将请求转发给后端的真实服务器。

3.2 真实服务器 (Real Server)

真实服务器是实际处理客户端请求的服务器。它们可以是 Web 服务器、数据库服务器或其他任何类型的服务器。真实服务器将处理请求的结果返回给客户端,而客户端通常不会意识到其请求已经被 LVS 分发。

3.3 负载均衡器 (Load Balancer)

在 LVS 中,负载均衡器是运行在 Linux 内核中的 IPVS 模块。它负责接收传入的请求,根据配置的规则和算法将请求分发到不同的真实服务器上。

4. LVS 的配置和管理

LVS 的配置通常使用 ipvsadm 命令行工具来完成。通过 ipvsadm,管理员可以添加或删除虚拟服务器和真实服务器,配置负载均衡算法,以及查看当前的负载均衡状态。

4.1 安装 IPVS 模块

在大多数现代 Linux 发行版中,IPVS 模块已经包含在内核中,无需额外安装。

4.2 配置虚拟服务器

配置虚拟服务器通常涉及以下步骤:

  1. 定义虚拟 IP 地址和端口。
  2. 选择负载均衡算法。
  3. 添加真实服务器及其权重。
    例如,使用 ipvsadm 添加一个使用轮询算法的虚拟服务器:
ipvsadm -A -t <VIP>:<port> -s rr

4.3 添加真实服务器

添加真实服务器到虚拟服务器:

ipvsadm -a -t <VIP>:<port> -r <real_server_IP>:<port> -g -w 1

4.4 查看 LVS 状态

查看当前的 LVS 配置和状态:

ipvsadm -L -n

5. LVS 的优势

  • 高性能:LVS 工作在网络层,不涉及应用层的解析,因此具有很高的处理速度。
  • 可扩展性:LVS 可以轻松地将更多的服务器加入到负载均衡池中。
  • 高可用性:通过与 Keepalived 等工具结合使用,LVS 可以实现高可用性配置,确保服务的连续性。
  • 灵活性:支持多种负载均衡算法,可以根据实际需求选择最合适的算法。

6. LVS 的应用场景

LVS 适用于需要高吞吐量和高可用性的场合,如大型 Web 服务、在线交易系统、云服务等。它特别适合于那些对网络性能要求极高的应用。

7. LVS结语

Linux Virtual Server (LVS) 是一个功能强大的负载均衡解决方案,它通过在 Linux 内核中实现,提供了高性能和高可用性的网络服务。

二、什么是ipvsadm

ipvsadm 是 Linux 系统中用于配置和管理系统的 IP 虚拟服务器(IP Virtual Server,简称 IPVS)的工具。IPVS 是 Linux 内核中的一个负载均衡器模块,它提供了一种在 Linux 上实现负载均衡和高可用性的方法,特别是在使用 LVS(Linux Virtual Server)时。

1、IPVS主要功能

  • 配置虚拟服务器ipvsadm 允许管理员配置一个或多个虚拟IP地址(VIPs),这些IP地址可以被多个物理服务器(真实服务器)共享。
  • 管理真实服务器:可以向虚拟服务器添加或删除后端的真实服务器,并设置它们的权重、状态等。
  • 负载均衡:支持多种负载均衡算法,如轮询、最小连接数、加权最少连接数等。
  • 会话持久性:支持会话持久性(如通过IP地址或cookie),确保来自同一客户端的请求被路由到同一服务器。
  • 防火墙规则:可以配置防火墙规则,只允许来自虚拟服务器IP地址的流量。
  • 查看状态:可以查看当前的虚拟服务器和真实服务器的状态,以及流量的统计信息。

2、使用示例

以下是一些基本的 ipvsadm 命令示例

  • 添加虚拟服务器 ```bash
    ipvsadm -A -t : -s
    其中 -t 指定虚拟IP和端口,-s 指定调度算法。
  • 添加真实服务器 ```bash
    ipvsadm -a -t : -r <real_server_IP>: -g -w
    -a 表示添加真实服务器,-r 指定真实服务器的IP和端口,-g 表示使用网关模式,-w 指定权重。
  • 查看配置 ```bash
    ipvsadm -L -n
    -L 列出所有虚拟服务器和真实服务器的配置,-n 以数字格式显示。
  • 删除虚拟服务器或真实服务器 ```bash
    ipvsadm -D -t :
    ipvsadm -d -t : -r <real_server_IP>:
    -D 删除虚拟服务器,-d 删除指定的真实服务器。
  • 保存和恢复配置 ```bash
    ipvsadm -S # 保存当前配置
    ipvsadm -R # 从文件恢复配置
    ipvsadm是 Linux 系统管理员用来实现高可用性和负载均衡的重要工具,特别是在需要处理大量并发连接和高流量的场景中。通过ipvsadm`,可以灵活地配置和管理复杂的网络环境。

三、LVS+KeepAlived对系统进行了负载均衡+高可用架构的改造升级(两台实现高可用、四台实现负载均衡+高可用(先两两实现高可用再两两实现负载均衡))

VRRPVirtual_Router_Redundancy_Protocol__88">1、VRRP(Virtual Router Redundancy Protocol 虚拟路由冗余协议)

VRRP_89">1)什么是VRRP

VRRP(Virtual Router Redundancy Protocol) 是一种提供路由器冗余的协议,以确保网络中的主机在默认网关发生故障时能够无缝切换到备用路由器。VRRP 通过创建一个虚拟路由器来实现这一点,这个虚拟路由器由多个物理路由器共同实现,它们之间协同工作。

2)工作原理:

VRRP 中,一个或多个路由器被配置为一个虚拟路由器组,其中一台路由器被选举为“master”,其他的作为“backup”。虚拟路由器有一个虚拟IP地址(VIP),对外表现为单一的逻辑路由器。
当master路由器出现故障时,其中一台backup路由器会迅速被选举为新的master,接管VIP,从而保证网络的连续性。

3)应用场景:

VRRP 常用于数据中心和企业网络,以提供高可用性的第一跳路由器解决方案。"

BFDBidirectional_Forwarding_Detection_96">2、BFD(Bidirectional Forwarding Detection双向转发检测)

BFD 是一种快速故障检测协议,用于快速检测网络中的单向或双向连接故障。

1)工作原理:

BFD 通过在两个直接连接的设备之间发送周期性的控制包来检测连接状态。如果控制包在一定时间内没有收到响应,BFD 会迅速判断连接已经断开。

2)特点:

BFD 可以与多种上层协议协同工作,如 VRRP、BGP 等,提供快速的故障检测机制。

3)优势:

相比传统的故障检测方法,BFD 可以显著减少故障检测时间,提高网络的可靠性和恢复速度。"

VRRPBFD_104">3、VRRPBFD相结合

在 Keepalived 中,VRRPBFD 可以结合使用,以实现更快的故障检测和状态转换:

  • Keepalived 利用 BFD 快速检测到物理或虚拟路由器的故障。当 BFD 检测到故障时,它会立即通知 VRRP,触发状态转换。
  • VRRP 接收到 BFD 的通知后,可以迅速进行 master 和 backup 路由器之间的角色切换,保证网络服务的连续性。
  • 通过这种结合使用,Keepalived 能够提供高可用性网络解决方案,减少因路由器故障导致的服务中断时间。

4、什么是Keepalived

  • Keepalived 是一个用 C 语言编写的路由软件。该项目的主要目标是为 Linux 系统和基于 Linux 的基础设施提供简单而强大的负载平衡和高可用性设施。
  • 负载平衡框架依赖于著名的、广泛使用的 Linux 虚拟服务器(IPVS)内核模块,该模块提供第四层负载平衡。
  • Keepalived 实现了一套检查器,可根据服务器的健康状况动态、自适应地维护和管理负载平衡服务器池。
  • 另一方面,高可用性是通过 VRRP 协议实现的。VRRP 是路由器故障转移的基础。
  • 此外,Keepalived 还为 VRRP 有限状态机实现了一组钩子,提供低级和高速的协议交互。为了提供最快的网络故障检测,Keepalived 实现了 BFD 协议。VRRP 状态转换可考虑 BFD 提示,以推动快速状态转换。
  • Keepalived 框架可以单独使用,也可以一起使用,以提供弹性基础设施。

四、 LVS(Linux Virtual Server)和Nginx各自优势、区别及应用场景

LVS(Linux Virtual Server)和Nginx都是常用的负载均衡解决方案,但它们在层次、特性、优缺点和应用场景上有所区别。

1、LVS的优势

  • 高抗负载能力:LVS工作在OSI模型的第四层,即传输层,只负责请求分发,逻辑简单且效率高,不易成为系统瓶颈。
  • 稳定性:LVS非常稳定,除非底层硬件(如内存、CPU)出现问题,否则很少出故障。它还支持多种双机热备方案,确保高可用性。
  • 低配置需求:配置选项较少,除了增减服务器外,很少需要调整,减少了人为错误。
  • 无流量负担:LVS仅转发请求,不传输数据,这意味着它不会占用过多的IO资源,且可用来做线路分流。
  • 广泛支持:LVS几乎支持所有应用层协议,包括HTTP、数据库、聊天应用等,因为它工作在第四层。

2、Nginx的优势

  • 应用层处理能力:Nginx工作在OSI模型的第七层,即应用层,能根据HTTP应用特性(如域名、URL路径)进行更精细的请求分发。

  • 网络依赖小Nginx对网络环境的依赖较低,只要能ping通,一般就能建立连接,内外网分离也能轻松处理。

  • 配置简便:安装和配置过程简单,测试方便,错误信息易于追踪。

  • 故障检测与重试:Nginx能检测到服务器内部故障并重发请求到其他节点,保障用户体验。

  • 异步处理:异步处理机制有助于减轻后端服务器压力,尤其是处理大量窄带宽连接时。

  • 支持HTTP和Email:除了HTTP,Nginx还支持Email服务,尽管这一功能较少被使用。

3、LVS与Nginx 两者间的对比

  • 层次差异:LVS在第四层工作,更底层,适合任何协议的负载均衡;Nginx在第七层,更适合基于HTTP的应用。
  • 灵活性与复杂度:Nginx提供了更灵活的配置和功能,但这也意味着更复杂的管理和潜在的人为错误;LVS配置简单,减少了人为干预。
  • 资源消耗:Nginx需要处理所有流量,对机器IO和配置有更高要求,且没有内置双机热备方案,单点风险大;LVS不直接处理流量,对资源消耗小。
  • 故障处理:Nginx能重发请求到其他节点,而LVS不能重发,可能导致用户体验受损。

4、应用场景建议

  • 小型网站或轻负载应用:如果日PV小于1000万,且机器资源有限,使用Nginx即可满足需求,因为它配置简单,成本低。
  • 大型网站或关键服务:对于需要处理高并发、高稳定性的场景,LVS是更好的选择,尤其适合作为最前端的负载均衡器,因为它抗负载能力强,稳定性高。
  • 混合使用:在实际部署中,常结合使用LVS和Nginx,LVS作为前端进行初步请求分发,Nginx作为后端或中间层代理,利用其高级HTTP处理能力。
    总之,选择LVS还是Nginx,或者两者结合使用,应基于实际的业务需求、资源条件以及对性能、稳定性和成本的综合考量。
    使用 Nginx + Keepalived 来实现负载均衡,解决单点故障和高流量并发问题。Keepalived 用于实现高可用性,通过 VRRP(虚拟路由冗余协议)确保 IP 地址在故障时的无缝交接。
    Nginx 的进程模型基于 master+slave,具有稳定的子进程管理功能。

http://www.ppmy.cn/news/1539607.html

相关文章

植物大战僵尸杂交版

最新版植物大战僵尸杂交版 最近本款游戏火爆 下载资源如下&#xff1a; win版本&#xff1a;2.3.7 链接&#xff1a;下载地址 提取码&#xff1a;9N3P Mac&#xff08;苹果版本&#xff09;&#xff1a;2.0.0 链接&#xff1a;下载地址 提取码&#xff1a;Bjaa 本次版本主要更…

2.4 STM32启动过程

目录 一,启动Flow 1.1 初始化MSP 1.2 初始化PC 1.3 设置堆栈大小 1.4初始化中断向量表 1.5 调用初始化函数(可选) 1.6 调用__main 二,Reset_Handler函数 一,启动Flow 下面是stm32在内部FLASH启动的启动建议流程图,在stm32复位到执行我们程序的main函数的过程中,…

【进阶OpenCV】 (6)--指纹识别

文章目录 指纹识别1. 计算指纹间匹配点的个数2. 获取指纹编号3. 获取对应姓名4. 代码实现 总结 指纹识别 假设&#xff0c;现在我们有一个小的指纹库&#xff0c;此时&#xff0c;有一个指纹图片需要我们识别是不是指纹库中某一个人的。如果是&#xff0c;是谁的呢&#xff1f…

mysql用户管理(user表列信息介绍,本质,管理操作),数据库的权限管理(权限列表,权限操作)

目录 用户管理 介绍 user表 介绍 列信息 Host User *_priv authentication_string 用户管理的本质 操作 创建用户 删除用户 修改用户信息 修改密码 自己修改 root用户修改指定用户的密码 数据库的权限 权限列表 给用户授权 查看权限 回收权限 刷新权限 …

恺撒密码/置换密码案例

恺撒密码是移位密码的一个典型应用。恺撒密码据传是古罗马恺撒大帝用来保护重要军情的加密系统通过将字母按顺序推后3位起到加密作用。改进版的恺撒密码可以将一个字母利用字母表中该字母后面的第k个字母替代&#xff0c;k有 25 种可能的密钥。 案例&#xff1a;如果对明文“bo…

将SpringBoot的Maven项目打成jar包和war包

先需要明确的是&#xff0c;该项目打包的形态是可执行的jar包&#xff0c;还是在tomcat下运行的war包。 springboot自带的maven打包 1.创建一个springboot web项目 1.api控制层HelloWorld.java RestController RequestMapping("/hello") public class HelloWorld …

关于oracle数据库/加载机密码中含有特殊字符@:><等的解决办法

一、前提交代 我最近项目中需要通过把特定的数据文件(.gz文件)导入到oracle库中&#xff0c;一般情况我们是通过shell来实现该功能&#xff0c;然后再通过作业调度调用shell来实现。在shell中肯定要连接数据库和加载机&#xff08;存放数据文件的服务器&#xff09;,但是数据库…

foxy moveit2 小鱼

ros2 foxy 下安装moveit2 通过小鱼安装包(极简)&#xff1a; 通过小鱼配置好git连接&#xff0c;注意start.sh前面有一个. git clone https://gitee.com/ohhuo/d2lmoveit2_tutorials cd d2lmoveit2_tutorials . start.sh 注意观察上面的运行过程&#xff0c;如果没报错啥的&…