LVS在淘宝环境中的应用

目录

1. LVS-简介

2. LVS-问题

3. LVS-fullnat

4. LVS-synproxy

5. LVS-cluster

6. LVS-performance

7. LVS-todo list


 疑问引入:用户访问淘宝,访问哪台apache服务器

传统做法:DNS服务

四个问题

Q1:apache2 down,remove生效时间不可控

Q2:只支持WRR癿调度策略

Q3:apache间负载不均匀

Q4:攻击防御能力弱

A:  引入Virtual Server

4层Load Balance

– 基亍传输层信息进行 调度

– 调度算法:WRR/WLC 等

– 工作模式:NAT/DR/TUNNEL

– 传输协议:TCP/UDP

NAT

TUNNET

DR

LVS – 内核模块:ip_vs – 实现了负载均衡
• Q – 某台RealServer down了,怎么办? – LVS本身down了,怎么办?

 A – 某台RealServer down了,怎么办?

--- 健康检测 – LVS本身down了,怎么办?

---LVS冗余 • Keepalived

– LVS管理软件 – 健康检测:支持4/7监测;

– 主备冗余:采用VRRP协议癿HeartBeat;

– 如何配置?

--- 配置文件
 Keepalived –f /etc/keepalived/keepalived.conf
 
Q:缺少监控系统?LVS具有开源SNMP Patch

问题

 LVS在大规模网络中应用存在不足

– 各转发模式,网络拓扑复杂,运维成本高 • 和商用LB设备相比

– 缺少TCP标志位DDOS攻击防御 • 主备部署方式不足

– 性能无法线性扩展

DR模式-不足

1. LVS-RS间必须在同一个VLAN 2. RS上绑定VIP,风险大;

NAT模式-不足

TUNNEL不足


 
IN:增加1个IP头 OUT:NULL
1. RS配置复杂(IPIP模块等)

2. RS上绑定VIP,风险大

解决办法

LVS各转发模式运维成本高

– 新转发模式FULLNAT:实现LVS-RealServer间跨vlan通讯,并 且in/out流都经过LVS;

• 缺少攻击防御模块 – SYNPROXY:synflood攻击防御模块

– 其它TCP FLAG DDOS攻击防御策略 • 性能无法线性扩展

– Cluster部署模式

 FULLNAT是一种新的转发模式 – 主要思想:引入local address(内网ip地址),cip-vip转 换为lip->rip,而 lip和rip均为IDC内网ip,可以跨vlan通 讯; – keepalived配置方式:
 virtual_server 125.76.224.240 {
     lb_kind FNAT/DR/NAT/TUNNEL
         local_address {
                          192.168.1.1
         }

 FULLNAT转发模式

NAT实现原理

FULLNAT实现原理

NAT-HOOK点

NETFILTER HOOK点,同iptables
 
为什么是这2个HOOK点?

FULLNAT-HOOK点

NAT-session表

 FULLNAT-session表

FULLNAT-获取client address(TOA)

 FULLNAT-设计考虑
– TCP OPT-TIMESTAMP • RealServer kernel开启tcp_tw_recycle • 用户A和B,timestamp大癿访问成功,timestamp小癿访问失败
– TCP OPT-MSS • TCP三次握手最后一个ack包为GET请求 • GET请求>1个数据包,toa无法插入
– TCP - Sequence • RealServer上timewait癿socket复用条件:seq递增

SYNPROXY用于防御synflood攻击 – 主要思想:参照linux tcp协议栈中syncookies癿思想, LVS-构造特殊seq癿synack包,验证ack包中ack_seq是否 合法-实现了TCP三次握手代理; – 配置方式
virtual_server 125.76.224.240 {
         syn_proxy
 
 SYNPROXY实现原理

SYNPROXY-设计考虑
– TCP - Sequence • Lvs->client 和 apache->lvs癿syn_ack包中seq不相同
– TCP OPT • Lvs->client syn_ack包中tcp opt支持mss/wsale/sack
– Session reused • 多个用户通过NAT网关用同一个ip/port访问LVS
– Ack Storm • Tcp seq转换导致ack storm

 IPVS优化 – 多队列网卡,1个队列绑定到1个cpu核上

– 增大session hash table

– 增大session hash bucket lock个数 – 避免路由cache条目过多
– LOCKLESS – 硬件:Westmere(第二代nehalem)/bios配置

单队列网卡 – 只有一个rx_buffer和一个tx_buffer;

多队列网卡

 网卡中断– CPU核 – Cat /proc/interrupts
  54:  188324418       0     IR-PCI-MSI-edge      eth0-TxRx-0
     55:  167573416       0     IR-PCI-MSI-edge      eth0-TxRx-1
 
– 绑定
 echo  01 > /proc/irq/54/smp_affinity  
  echo 02 > /proc/irq/55/smp_affinity

• 软多队列:RPS(receive packet steering)

 RPS配置
– cat  /sys/class/net/eth0/queues/rx-0/rps_cpus
 cat  /sys/class/net/eth0/queues/rx-1/rps_cpus
  – 绑定
 echo  01 > /sys/class/net/eth0/queues/rx-0/rps_cpus
  echo 02 > /sys/class/net/eth0/queues/rx-1/rps_cpus

 KEEPALIVED优化
– Select->epool – 减少reload时间和开销

系统配置注意点

– 关闭网卡LRO/GRO

– 关闭irqbalance

– 增大proc参数:net.core.netdev_max_backlog

性能指标

– Synflood:350w pps

– Ack/rst/fin-flood:800w pps

– HTTP:150w pps

– New tcp connection:30w

– MAX session:4000w (24G memory) 机器:DELL R610(E5645  @ 2.40GHz), Intel 82599 NIC

• 提高性能

– Ipvs:lockless

– Keepalived:多线程事件驱劢

– 新硬件:sandybridge - DDIO • 完善功能

– 攻击防御:ip黑白名单…..

– 支持GRO(不支持LRO)
 
未来:4/7层合一

 

 

 

 

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

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

相关文章

android 开发艾特功能,Android Binder

Binder 是一种进程间通信机制,基于开源的 OpenBinder 实现;OpenBinder 起初由 Be Inc. 开发,后由 Plam Inc. 接手。从字面上来解释 Binder 有胶水、粘合剂的意思,顾名思义就是粘和不同的进程,使之实现通信。为什么 Act…

C# Json转对象

第一步&#xff0c;项目添加negut的搜索Newtonsoft.Json&#xff0c;安装第一个&#xff1a;如图所示&#xff1a; 安装以后&#xff0c;自动引用。 private ObservableCollection<Traffic> m_listcls; var json JsonConvert.DeserializeObject<List<Traffic>&…

Dubbo开源

什么是Dubbo? 分布式服务框架 – 远程服务调用 • Ne/y/Mina/Grizzly • RMI/Hessian/WebService – 服务动态发现 • Zookeeper/Redis – 集群软负载均衡 • Random/RoundRobin – 集群失败容错 • Failove…

ionic android 本地存储,ionic2/3本地数据存储storage

ionic2开始storage默认使用的是IndexedDB&#xff0c;而不是LocalStorage存储存储是存储键/值对和JSON对象的简单方法。存储使用下面的各种存储引擎&#xff0c;根据平台选择最佳的存储引擎。当在本机应用程序环境中运行时&#xff0c;Storage将优先使用SQLite&#xff0c;因为…

[Leedcode][JAVA][第470题][Ran7()实现Rand10()]

【问题描述】[Leedcode][JAVA][第470题][Ran7()实现Rand10()] 已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数&#xff0c;试写一个方法 rand10 生成 1 到 10 范围内的均匀随机整数。不要使用系统的 Math.random() 方法。示例 1:输入: 1 输出: [7] 示例 2:输入: 2 输出: …

时区配置

时区配置 在linux中与时间相关的文件有 /etc/localtime/etc/timezone ##RHEL 7中找不到该文件 其中&#xff0c;/etc/localtime是用来描述本机时间&#xff0c;而 /etc/timezone是用来描述本机所属的时区。 修改本机时区 rm -rf /etc/localtime ln -s /usr/share/zoneinfo/Asi…

推荐系统?淘宝?

目录 • 推荐系统概念 • 淘宝的数据 • 淘宝推荐系统应用场景 • 淘宝推荐系统核心算法 • 淘宝推荐系统的设计 • 推荐系统概念 • 淘宝的数据 • 淘宝推荐系统应用场景 • 淘宝推荐系统核心算法 • 淘宝推荐系统的设计 推荐系统定义 维基百科&#xff1a; form…

android studio 无法输入中文,Android Studio 升级到3.0后输入法中文状态下无法选词的终极解决方案...

AndroidStudio终于出3.0正式版了&#xff0c;内置了kotlin(虽然我安了插件一直能用)。一直忍着没敢下rc版的好奇猫&#xff0c;总算装了正式版。当然&#xff0c;伴随每次大版本更新&#xff0c;总有一些恼人的后遗症&#xff0c;其中以gradle问题最多。AS3.0要求gradle版本在3…

[Leedcode][JAVA][第136题][第137题][只出现一次的数字][位运算][HashSet][HashMap]

【问题描述】[第136&#xff0c;137题][只出现一次的数字] 给定一个非空整数数组&#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现了N次。找出那个只出现了一次的元素。[第136题]N 2 输入: [2,2,1] 输出: 1 [第137题]N3 输入: [2,2,3,2] 输出: 3【解答…

[Swift通天遁地]七、数据与安全-(12)使用Instruments Leaks工具检测内存泄露

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号&#xff1a;山青咏芝&#xff08;shanqingyongzhi&#xff09;➤博客园地址&#xff1a;山青咏芝&#xff08;https://www.cnblogs.com/strengthen/&#xff09;➤GitHub地址&a…

java学习(174):constructor类反射编程

//class反射编程 //定义一个学生类 public class test124 {public String name;protected int age;double height;private double money;public void setName(String name) {this.name name;}public String getName() {return name;}public int getAge() {return age;}public …

android 4.2 noclassdeffounderror,NoClassDefFoundError:android.support.v7.internal

运行Android 4.2的三星设备上的Android appcompat v7库存在问题。在我的开发者控制台中&#xff0c;我不断遇到以下堆栈跟踪崩溃&#xff1a;java.lang.NoClassDefFoundError: android.support.v7.internal.view.menu.MenuBuilderat android.support.v7.widget.PopupMenu.(Popu…

[国密算法]一文了解国密算法

国密算法概述1 SM1对称密码2 SM2椭圆曲线公钥密码算法3 SM3杂凑算法4 SM4对称算法5 SM7对称密码6 SM9标识密码算法7 ZUC祖冲之算法总结算法名称算法类别应用领域特点SM1对称密码算法芯片分组长度、密钥长度均为 128 比特SM2公钥密码算法加密ECC椭圆曲线密码机制256位 相比RSA&a…

java学习(175):method类反射机制

//class反射编程 //定义一个学生类 public class test124 {public String name;protected int age;double height;private double money;public void setName(String name) {this.name name;}public String getName() {return name;}public int getAge() {return age;}public …

java-web的mybatis的学习

idea开发必须是把Mapper文件与配置文件放到Resources标记的classpath目录下&#xff0c;eclips好像放到哪都行指定好路径就可以了&#xff0c; maven里面做好配置resources的路径&#xff0c;不然更新依赖 工程结构标记又没了 <build> <resources> <resour…

android 9格式吗,Android Studio中关于9-patch格式图片的编译错误

C&num;基础知识回顾-- 反射(3)C#基础知识回顾-- 反射(3) 获取Type对象的构造函数: 前一篇因为篇幅问题因为篇幅太短被移除首页,反射这一块还有一篇“怎样在程序集中使用反射”, 其他没有什么可以写的了,前两篇主要是铺垫, ...沙盒操作的核心函数 - NSSearchPathForDirect…

[Leedcode][JAVA][第85题][第221题][最大正方形][动态规划]

【问题描述】[第221题][最大正方形][中等] 在一个由 0 和 1 组成的二维矩阵内&#xff0c;找到只包含 1 的最大/长方形正方形&#xff0c;并返回其面积。示例:输入: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 长方形 输出: 6 正方形 输出: 4【解答思路】 1. 长方形 暴力 时间…

java学习(176):第一个xml的编写

<?xml version"1.0" encoding"UTF-8"?> <stdents><!--每个student表示一个学生对象--><student code"stu001"><name>歌谣</name><birth>1996-09-09</birth><sex>男</sex><adr…

次时代各制作插件使用方案以及技巧 包括UV 烘焙 减面等

次世代游戏的到来&#xff0c;使游戏行业向前迈进了一大步。次世代本来代表的是拥有更高cpu硬件设施的电视游戏&#xff0c;即戴着头盔能感到wii拳击的震动、拿着拳套能感应阴森恐怖的氛围。绝对让玩家融入气氛的Xbox360的《生化危机5》还带有场景破坏&#xff0c;能打下一片墙…

java学习(177):获取应用程序的路径

import javax.tools.Tool; import java.net.URLDecoder;//获取类路径 public final class test132 {public static String getClassPath(){String pathtest132.class.getClassLoader().getResource( "" ).getPath().toString();try {return URLDecoder.decode( path…