写点什么

LVS 在大规模网络环境中的应用

  • 2014-10-13
  • 本文字数:1406 字

    阅读完需:约 5 分钟

LVS 是 Linux Virtual Server 的简称,也就是 Linux 虚拟服务器。目前 LVS 已经是 Linux 内核标准的一部分。阿里云技术团队近日分享了题为《 LVS 在大规模网络环境中的应用》的演讲,InfoQ 对演讲内容进行了整理。

为什么引入 LVS?

举个例子,一个用户访问淘宝网站,淘宝网前端共有 5 台 Apache 服务器,如何决定访问哪一台 Apache?常用的方式是用 DNS 做负载均衡,将 5 台 Apache 服务器的 ip 地址添加到域名 www.taobao.com 中。
但 DNS 有一些缺点,第一个缺点:例如第二台 Apache 宕了,运维赶紧把 DNS 中该 Apache 的 ip 地址删除掉,但很多地方的 Local DNS 不一定遵守 TTL 协议,这样删除操作什么时候生效,你根本不可控的;尤其移动网络中,这个问题更突出,我记得 10 年时移动网络部分地区 Local DNS 一天才更新。
第二个缺点:服务调度算法只支持 WRR。如果你用户范围很有限,就会有负载不均衡的问题。第三个缺点:攻击防御能力很弱,每次有攻击靠一台机器抗。
针对 DNS 的不足,引入了 Virtual Server 的概念,即最前端有一个入口设备把流量均衡到后端的 Apache 上去;无论是 LVS 软负载还是 F5 硬负载均衡也都是这种概念。

LVS 是什么?

LVS 是 Linux Virtual Server 的简称,也就是 Linux 虚拟服务器。LVS 工作在网络 4 层之上仅作分发之用,所以抗负载能力比较强。LVS 有完整的双机热备方案,几乎支持对所有应用做负载均衡。LVS 在互联网应用中的位置是在 Nginx 之上,具体如下:

LVS 如何应用?

LVS 本身只是一个叫 IP_VS 的内核模块,这个模块可以做负载均衡,但是只用这个模块来做工程应用是远远不够的,比如 LVS 本身宕机后如何处理?实际生产环境中,一般配合 Keepalived 来使用 LVS,keepalived 支持 VRRP 心跳协议,可以实现 LVS 主备冗余,以解决 LVS 本身单点故障。另外,Keepalived 支持健康检测,4 层和 7 层健康检测,防止服务器宕机。对于 LVS 的服务监控问题,可以使用开源软件 SNMP Patch 解决。

LVS 问题以及解决方案

  1. LVS 的 3 种转发模式,部署成本比较高
    使用新转发模式 FULLNAT,FULLNAT 实现了 LVS-RealServer 间跨 vlan 通讯,并且 in/out 流都经过 LVS。FULLNAT 转发数据包是类似 NAT 模式,IN 和 OUT 数据包都是经过 LVS,唯一的区别后端 RealServer 或者交换机 不需要做任何配置。FULLNAT 的主要原理是引入 local address(内网 ip 地址),cip-vip 转换为 lip->rip,而 lip 和 rip 均为 IDC 内网 IP,可以跨 vlan 通讯;
  2. 和商用的负载均衡比,LVS 没有 DDOS 防御攻击功能;
    使用 SYNPROXY(synflood 攻击防御模块),Synproxy 实现的主要原理是参照 Linux TCP 协议栈中 syncookies 的思想,LVS 构造特殊 seq 的 synack 包,验证 ack 包中 ack_seq 是否合法实现了 TCP 三次握手代理。
  3. 主备部署模式,性能无法扩展;
    Cluster 部署模式。基于 FullNAT 模式做横向扩展。

LVS 的性能优化

  1. 多队列网卡,即一个队列绑定到一个 CPU 核上,让多核同时处理网络数据包。如果网卡不支持多队列,可以用 Google 提供的软多队列 -RPS,Linux 内核默认已经集成;
  2. 对 Keepalived 进行了优化,主要将网络模式从 select 改为了 epool。
  3. 建议把网卡 LRO、GRO 功能关掉,尤其是 broadcom 的网卡。

LVS 的创始人和主要开发者章文嵩博士目前就职于阿里云,任职阿里云副总裁。在 10 月 16 日举行的阿里云开发者大会上,他所带领的阿里云团队将会在现场进行互动问答,与用户共同探讨云时代的产品、运维、服务等相关问题,欢迎关注。

2014-10-13 21:265123
用户头像

发布了 219 篇内容, 共 152.1 次阅读, 收获喜欢 195 次。

关注

评论

发布
暂无评论
发现更多内容

JavaScript中 6 个reduce()实例

devpoint

reduce 9月日更

springboot文件上传下载实战 —— 登录功能,「高并发秒杀

Java 程序员 后端

架构实战营 - 模块八作业

思梦乐

高峰应对记录

编号94530

Spring Boot 2 性能压测 测试发开 高峰应对

Linux常用命令

在即

9月日更

前沿·探索·想象力,今年的云栖大会有啥不一样?

阿里巴巴云原生

阿里巴巴 云原生

云随想三 2B软件的机遇与挑战?

FLASH

云时代 2B软件

SpringBoot整合Redis,怎么实现发布-订阅?,一个回答引发热烈讨论

Java 程序员 后端

支付宝的沙箱环境配置和使用

Brave

支付宝 支付 9月日更

PHPStorm 的使用技巧汇总

baiyutang

9月日更

吴恩达Andrew Ng CNN卷积神经网络 论文等资料汇总 YOLOv5 新版本—改进与评估 易筋 ARTS 打卡 Week 65

John(易筋)

ARTS 打卡计划

架构实战营模块三

WolvesLeader

「架构实战营」

MySQL 从入门到实践,万字详解!

前端下午茶

MySQL 数据库 大前端

SpringBoot-自动配置-源码解析,做了5年Java

Java 程序员 后端

springboot文件上传下载实战 ——文件上传(1),想搞定大厂面试官

Java 程序员 后端

神经网络与点

Nydia

20. 从工业革命到文艺复兴

Databri_AI

人工智能

学生管理系统架构设计文档

紫云

【LeetCode】最长递增子序列Java题解

Albert

算法 LeetCode 9月日更

这些 JS 中强大的操作符,总有几个你没听说过

前端下午茶

JavaScript 代码设计 代码技巧 基础知识

SpringBoot2---指标监控,Java架构师之路

Java 程序员 后端

架构实战营第八模块作业

子豪sirius

架构实战营

Prometheus 2.23.0 新特性

耳东@Erdong

Prometheus 9月日更

HarmonyOS 鸿蒙登录页搭建及 Text 文本详解

阿策小和尚

HarmonyOS Android 小菜鸟 引航计划 9月日更

谈 C++17 里的 Observer 模式 - 3

hedzr

c++ 算法 设计模式 观察者模式 Design Patterns

架构师训练营 2 期模块三作业

kazeMace

架构实战营

SpringBoot之配置文件,Java开发教程入门

Java 程序员 后端

springboot文件上传下载实战 ——文件上传,Java入门

Java 程序员 后端

Coffee学架构 004 外包学生管理系统的完整架构设计

咖啡

架构设计

☕️【Java专题系列】「回顾 RateLimiter」针对于限流器的入门到精通(针对于源码分析介绍)

码界西柚

ratelimiter Guava 9月日更 限流器

项目管理实践篇(二):技术型PM炼成记

后台技术汇

项目管理 管理 引航计划 内容合集 管理领域

LVS在大规模网络环境中的应用_DevOps & 平台工程_小盖_InfoQ精选文章