ESXi与物理交换机静态链路聚合配置过程中的小陷阱
作者:陆斌
文章来自微信公众号:平台人生
内容简介:ESXi与物理交换机之间配置静态链路聚合时,因为静态链路聚合的特点,在进行down网卡和从虚拟交换机移除网卡的操作时,可能会无法完成故障流量切换,影响到虚拟机的运行。本文对其中的原理进行了分析。
链路聚合(link aggregation)是将多个物理端口绑定为单一逻辑组的行为。在日常应用中,链路聚合的配置模式有两种:静态模式和动态模式。动态聚合的链路聚合,即大名鼎鼎的LACP,不再多做介绍,这里我们主要聊聊静态模式的链路聚合。静态模式,顾名思义,配置即生效,没有协商,聚合组创建之后立刻显示为“启动”状态,即使线路另一端的对应端口没有正确配置,也依然为“启动状态”,就是这么任性。
当我们配置vSphere ESXi主机虚拟标准交换机(VSS)时,如果采用了双网卡绑定,并想使用“基于IP HASH 哈希的路由”这一负载平衡策略,必要条件是——与ESXi主机上行链路相连的物理交换机必须配置静态模式的链路聚合。只有物理交换机配置了链路聚合,ESXi主机VSS网卡绑定使用的“基于IP HASH哈希的路由”负载平衡策略才能够将网络流量均衡的分配到两块物理网卡,实现上行链路网络流量均衡和上行物理链路冗余。如果要问为什么不配置动态模式的链路聚合,原因很简单,虚拟标准交换机(VSS)不支持LACP协商,我们的选择只有一个——静态模式的链路聚合。

图1.基于IP哈希的路由负载均衡策略
图2. ESXi与物理交换机静态链路聚合配置示例
一切配置就绪,总得测试一把,按照正常情况,链路聚合组中的一个端口失效后,网络流量应该会发生故障切换,那么从ESXi这边看,怎样才能使链路聚合组中的一个端口失效呢,我们很快会想到如下办法:down网卡(使用命令esxcli network nic down –n vmnicX)、从虚拟交换机移除网卡。当我们进行上述两个操作时,会发现物理交换机上与被down掉或被移除网卡对应的端口并没有失效,端口状态依然为UP,流量也没有发生故障切换,这是怎么回事?

图3.从虚拟交换机移除网卡
原来,一切就源于“静态模式”链路聚合。在配置静态模式链路聚合后,物理交换机端检测聚合端口是否生效,是通过链路的物理状态,即电信号,只要链路的电信号存在,端口即被认为是UP状态,而不管对端有没有正确配置。由此,我们可以得出如下分析:
(1)当down掉ESXi上的一块网卡时,如果网卡的驱动程序不能切断网卡的电信号,那么上联物理交换机并不会感知到相连对端虚拟交换机聚合组中有成员被down掉,还是继续从被down掉网卡对应的端口发送数据,不会发生故障流量切换。
(2)当从虚拟交换机移除网卡时,该网卡只是不再被ESXi使用,但是其电信号依然存在,上联物理交换机并不会感知相连对端虚拟交换机聚合组中有成员被移除,还是继续从被移除网卡对应的端口发送数据,也不会发生故障流量切换。
通过以上的分析可以看出,在配置静态链路聚合后,如果要使聚合组中的成员失效,必须要切断其对应物理链路的电信号,否则物理交换机就会认为相应端口在聚合组中的状态为UP,不会发生故障流量切换。这就是我们发现的ESXi与物理交换机静态链路聚合配置过程中的小陷阱。
在发现以上“小陷阱”后,我们又在多种型号服务器和物理交换机组合上对拔网线、down网卡、从虚拟交换机移除网卡这三种操作进行了测试,得出了以下结论:
(1)拔网线,能够保证使物理交换机静态链路聚合组中的成员状态为Down,发生故障流量切换。
(2)down网卡,与服务器使用的网卡型号和驱动程序相关,如果网卡的驱动程序在执行down网卡操作时能够切断网卡的电信号,那么就可以使物理交换机静态链路聚合组中的成员状态为Down,发生故障流量切换;否则无法发生故障流量切换。
(3)从虚拟交换机移除网卡,物理交换机始终会认为相应的物理链路电信号正常,不会发生故障流量切换。
知道了以上小陷阱后,如果我们的环境中配置了静态链路聚合,在进行down网卡和从虚拟交换机移除网卡的操作时,就要小心了。如果有重要的虚拟机在运行,且上行链路配置了静态链路聚合,强烈建议您不要轻易进行down网卡和从虚拟交换机移除网卡的操作,以防发生不测。
ESXi与物理交换机静态链路聚合配置过程中的小陷阱的更多相关文章
- ENSP静态链路聚合实验配置要点及实例
链路聚合分为:静态链路聚合.动态链路聚合链路聚合的负载分担模式:对于二层数据流,系统会根据MAC地址(源mac地址和目的mac地址来计算),而对于三层数据流则会根据ip地址来进行负载分担计算. 静态链 ...
- H3C交换机端口链路聚合
H3C交换机端口链路聚合 以太网链路聚合 -- 以太网链路聚合配置命令 -- lacp system-prioritylacp system-priority命令用来配置系统的LACP优先级.undo ...
- [CISCO] 交换机间链路聚合端口聚合
[CISCO] 交换机间链路聚合端口聚合 一.Introduction 端口通道( port channel ) 是一种聚合多个物理接口 ( that ) 创建一个逻辑接口.你可以捆扎( bundle ...
- OGG "Loading data from file to Replicat"table静态数据同步配置过程
OGG "Loading data from file to Replicat"table静态数据同步配置过程 一个.mgr过程 GGSCI (lei1) 3> view p ...
- 菜鸟帮你跳过openstack配置过程中的坑
一:前言 对于一个以前做java全栈工程师而言,而且没学过Linux,很少用虚拟机(还是在大学的时候简单的用过),去配置openstack我想我入的坑肯定比有基础的一定要多,躺在每个坑中徘徊思索的时间 ...
- 菜鸟帮你跳过openstack配置过程中的坑[文末新添加福利]
一:前言 对于一个以前做java全栈工程师而言,而且没学过Linux,很少用虚拟机(还是在大学的时候简单的用过),去配置openstack我想我入的坑肯定比有基础的一定要多,躺在每个坑中徘徊思索的时间 ...
- CAS SSO:汇集配置过程中的错误解决方法
本教程为gevin.me原创文章,转载请注明: CAS SSO:配置过程中的错误解决方法 | Gevin’s Blog 本文将收集在配置CAS SSO遇到的所有错误,希望对大家有帮助,也方便下次搭建的 ...
- Redis配置过程中的问题
记录一下配置过程中的坑~~ 当Redis在服务器上安装完成后,get.set没有问题了,接下来在程序中使用看看... 首先 在配置文件redis.conf中,默认的bind 接口是127.0.0.1, ...
- springmvc配置过程中遇到的一些问题总结
springmvc配置过程中遇到的一些问题总结 1.配置tomcat过程中的错误: 2.配置web.xml中DispatchServlet报红(配置好已有依赖条件下) 解决的办法: 因为新添加依赖,m ...
随机推荐
- Python列表排序
1.冒泡排序 冒泡排序(Bubble Sort)是一种简单的排序算法.它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.遍历数列的工作是重复地进行直到没有再需要交换,也就 ...
- AttributeError: module 'html.parser' has no attribute 'HTMLParseError'
别人说这种错误大多是,因为beautifulsoup的版本兼容问题, 因为beautifulsoup的4.0以下版本和4.0版本与python3.5以上都不兼容, 网上的解决方案大多是:降python ...
- 【AMAD】dramatiq -- Python3实现的一个快速的,可信赖的分布式任务处理库
简介 动机 作用 用法 热度分析 个人评分 简介 Python3实现的一个快速的,可信赖的分布式任务处理库. 动机 dramatq1的官网2写道: Dramatiq成为现实的主要原因是,我想要一个简单 ...
- win7中文版 切换成 英文版
打开[控制面版]-->[更改显示语言] 2.点击[安装/卸载语言] 3.启用Windows Update 4.更新完后,打开可选更新,拉到底,选上 英语语言包 同时记得取消所有重要更新的,再 ...
- 【Linux开发】linux设备驱动归纳总结(五):2.操作硬件——IO内存
linux设备驱动归纳总结(五):2.操作硬件--IO内存 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...
- Centos7 安装多版本php 并添加swoole拓展
服务器默认安装了php7 直接使用lnmp工具包安装php5.6 使用之前的lnmp安装包,切换到root sudo su - 运行 选择5.6 安装完成 没有安装swoole拓展 由官方https: ...
- C++ unsigned long 转化为 unsigned char*
C++ Code 123456789101112131415161718 unsigned long lFileLen = 1000; unsigned char *ucFileLenFlag; ...
- 菜鸟系列k8s——k8s快速入门(1)
k8s快速入门 1.快速创建k8s集群 参考网站:https://kubernetes.io/docs/tutorials/kubernetes-basics 点击教程菜单 1. Create a C ...
- Go语言中的数组(九)
我刚接触go语言的数组时,有点不习惯,因为相对于JavaScript这样的动态语言里的数组,go语言的数组写起来有点不爽. 定义数组 go语言定义数组的格式如下: ]int var 数组名 [数组长度 ...
- python_0基础开始_day08
第八节 1,文件操作 文件操作目的: 持久化,永久存储 (数据库之前 -- 文件操作就是代替数据库) 读 1,找到文件位 2,双击打开 3,进行一些操作 4,关闭文件 open() 打开,通过pyth ...