1. 堆叠技术到底解决了什么痛点
第一次接触堆叠这个概念,是在一个园区网的改造项目里。当时接入层有六台交换机,每台都单独跑生成树协议,结果网络里一半的链路被阻塞,带宽白白浪费,而且任意一台设备宕机,下面挂的终端就得断网几十秒等STP收敛。那会儿我就在想,有没有办法让多台物理设备在逻辑上变成一台,既能把闲置链路利用起来,又能做到故障秒级切换。后来用上了堆叠,才算真正把这个问题按住了。
堆叠的本质,是把两台或者多台支持堆叠特性的交换机,通过专用的堆叠端口或者普通业务端口连接起来,经过一系列协商和选举之后,对外表现为一台逻辑交换机。这台逻辑设备有统一的控制平面、统一的管理IP、统一的配置界面。你登录任意一台成员设备的Console或者管理地址,看到的配置都是同一份,改一处等于改全局。对于运维来说,这省掉的不只是重复配置的时间,更重要的是消除了环路和收敛带来的不确定性。
它主要解决三个层面的问题。第一是可靠性,堆叠之后可以做跨设备的链路聚合,一台成员设备挂了,流量自动切到另一台,终端几乎无感知。第二是带宽利用率,传统STP环境下冗余链路是备而不用的,堆叠加聚合之后,所有链路都能同时转发。第三是管理简化,十几台接入交换机堆成一组,管理IP只有一个,配置模板一套,升级固件一次搞定,不用再一台台登录。
这套东西适合谁呢?我觉得凡是接入层设备数量超过三台、对网络中断比较敏感、又不想上复杂堆叠协议(比如某些需要额外授权的方案)的场景,都值得考虑。中小企业的办公网、学校的教学楼接入、医院的楼层接入、工厂的车间网络,这些地方用堆叠的性价比非常高。当然,前提是设备本身支持堆叠功能,而且你得搞清楚是哪种堆叠方式。
2. 堆叠的几种实现方式与选型逻辑
2.1 专用堆叠口和业务口堆叠的区别
堆叠的实现方式,从物理连接上分,主要有两种。一种是专用堆叠端口,这种端口平时不能当普通业务口用,只负责堆叠通信,通常带宽很高,比如有些设备有专门的堆叠卡或者固定的堆叠口,速率能到10G甚至更高。另一种是业务口堆叠,就是把普通的以太网口配置成堆叠口,用普通网线或者光纤连接。这两种方式各有各的适用场景。
专用堆叠口的优势在于稳定和带宽有保障。因为它不承载业务流量,只跑堆叠协议报文和跨设备转发流量,所以不会因为业务突发把堆叠链路打满。而且专用口的物理连接通常是背板或者专用线缆,误插拔的概率低。缺点是需要额外购买堆叠卡或者专用线缆,成本高一些,而且端口数量固定,不够灵活。
业务口堆叠的优势是灵活和低成本。你手头有什么口就用什么口,千兆口也行,万兆口更好,不需要额外买硬件。缺点是堆叠链路和业务流量共享物理带宽,如果堆叠流量大了,可能会影响业务转发。另外业务口堆叠的配置稍微复杂一点,需要把端口从默认的二层模式切换到堆叠模式,有些设备还要求重启才能生效。
我个人的经验是,如果设备本身带专用堆叠口,优先用专用口,省心。如果没有,或者预算有限,业务口堆叠也完全能用,但要注意几点:一是尽量用高带宽端口,比如万兆口做堆叠,千兆口做业务;二是堆叠链路最好用两根线做冗余,一根断了还有另一根;三是不要在堆叠口上再跑其他业务配置,保持干净。
2.2 链形堆叠和环形堆叠怎么选
从拓扑结构上分,堆叠又分为链形和环形。链形就是一台接一台,像串糖葫芦一样,A连B,B连C,C连D。环形就是首尾相连,A连B,B连C,C连D,D再连回A。这两种拓扑的可靠性差别很大。
链形堆叠的优点是布线简单,端口占用少。每台设备只需要两个堆叠口(首尾设备各一个,中间设备各两个),线缆数量少。缺点是可靠性差,如果中间某条堆叠链路断了,整个堆叠组就分裂成两个部分,虽然可以通过多主检测机制来防止双主,但网络已经受影响了。而且链形堆叠的跨设备转发路径长,延迟相对高一点。
环形堆叠的优点是可靠性高,任意一条堆叠链路断了,流量可以走另一条路径绕过去,堆叠组不会分裂。缺点是布线麻烦一点,每台设备都要两个堆叠口,而且首尾设备之间的线缆可能跨机柜,施工难度大。另外环形堆叠的协议报文会在环里转一圈,对堆叠协议的处理能力要求稍高。
我的建议是,如果机柜排列整齐、布线方便,优先做环形堆叠。如果设备分散在不同楼层或者不同机柜,布线确实困难,链形也能用,但一定要配好多主检测,防止堆叠分裂后出现两个管理IP冲突。多主检测可以通过业务口直连或者通过上游设备代理来实现,具体用哪种看现场条件。
2.3 堆叠与其它多设备虚拟化技术的对比
除了堆叠,还有几种类似的技术,比如某些厂商的集群技术、纵向虚拟化技术等。它们的目标都是把多台设备逻辑上合并,但实现层次和适用范围不一样。堆叠通常是在同一系列或者同一型号的设备之间做,要求硬件架构一致,软件版本兼容。集群技术有时候可以跨系列,但配置更复杂,对网络拓扑的要求也更高。
从运维角度看,堆叠是最直观的,因为它就是“多台变一台”,管理界面、命令行、配置文件都是统一的。集群技术有时候还需要额外的协议和配置,学习成本高。所以如果设备支持堆叠,而且数量不多(一般不超过九台),我倾向于直接用堆叠,简单直接。
选型的时候还要注意一个点:堆叠成员的数量上限。不同型号的设备支持的堆叠成员数不一样,有的最多支持四台,有的支持九台,有的支持十六台。规划的时候要留余量,别等到以后想加设备了发现堆叠组满了,那就只能拆开重做,代价很大。
3. 堆叠的配置实操与关键参数
3.1 堆叠前的准备工作
配置堆叠之前,有几件事必须提前做好,不然很容易翻车。第一是确认设备型号和软件版本。堆叠要求所有成员设备的软件版本一致,至少是兼容的版本。如果版本不一致,轻则堆叠建立失败,重则设备反复重启。我一般会先把所有设备升级到同一个稳定版本,再开始配堆叠。
第二是规划成员编号和优先级。每台成员设备在堆叠组里有一个成员编号,范围通常是1到9或者1到16。编号必须唯一,不能重复。优先级用来选举主设备,优先级高的成为主设备,优先级相同则比较MAC地址,MAC小的成为主。我一般会把性能最好、位置最核心的那台设为主设备,优先级设成最大,比如255或者32,其他设备依次降低。
第三是确定堆叠端口和线缆。如果是专用堆叠口,直接插堆叠线缆就行。如果是业务口堆叠,需要提前规划好哪两个口做堆叠,并且确保这些口没有被其他业务配置占用。线缆要用质量好的,长度够用的,别为了省事用太短的线,到时候设备挪动一下就得重新布线。
第四是备份配置。堆叠建立过程中,成员设备的配置会被合并或者覆盖,如果之前有重要配置,一定要先备份出来。我见过有人直接在生产设备上配堆叠,结果配置丢了,业务断了半天,教训很深刻。
3.2 业务口堆叠的详细配置步骤
下面以两台设备通过业务口做环形堆叠为例,说一下具体的配置流程。假设设备A的1/0/49和1/0/50口做堆叠,设备B的1/0/49和1/0/50口做堆叠,两台设备之间用两根线交叉连接,形成环形。
第一步,登录设备A,进入系统视图,关闭堆叠口上的默认配置。命令大概是这样的:
system-view interface range Ten-GigabitEthernet 1/0/49 to Ten-GigabitEthernet 1/0/50 shutdown quit先把端口关掉,防止配置过程中产生环路或者协议报文乱跑。这一步很多人会忽略,但我觉得很有必要,尤其是业务口堆叠,端口默认是开的,直接配堆叠可能会触发一些意想不到的行为。
第二步,创建堆叠逻辑口,并把物理口加入进去。不同厂商的命令不一样,但逻辑是类似的:
interface Stack-Port 1/1 port group interface Ten-GigabitEthernet 1/0/49 port group interface Ten-GigabitEthernet 1/0/50 quit这里创建了一个堆叠口1/1,然后把两个物理口绑进去。注意堆叠口的编号规则,一般是成员编号/堆叠口序号,成员编号就是这台设备在堆叠组里的编号。
第三步,配置成员编号和优先级:
stack slot 1 priority 255 stack slot 1 renumber 1第一句是把当前设备的优先级设成255,第二句是把成员编号改成1。如果设备当前编号不是1,改完之后需要重启才能生效。优先级可以立即生效,但编号变更通常要重启。
第四步,保存配置并重启设备:
save reboot重启之后,设备会以新的成员编号加入堆叠组。这时候如果另一台设备还没配好,它会处于等待状态,直到所有成员都就绪。
第五步,在设备B上重复类似的配置,但成员编号改成2,优先级设成200或者更低:
system-view interface range Ten-GigabitEthernet 1/0/49 to Ten-GigabitEthernet 1/0/50 shutdown quit interface Stack-Port 2/1 port group interface Ten-GigabitEthernet 1/0/49 port group interface Ten-GigabitEthernet 1/0/50 quit stack slot 2 priority 200 stack slot 2 renumber 2 save reboot两台设备都重启之后,它们会自动协商,选举出主设备(优先级255的那台),然后同步配置。你可以通过display stack命令查看堆叠状态,正常情况下会看到两台成员都在,角色一主一备,状态是Up。
3.3 堆叠建立后的验证与检查
堆叠建立起来之后,别急着上业务,先做几项检查。第一是确认堆叠组状态,用display stack看成员数量、角色、优先级、MAC地址是否都正确。第二是检查堆叠链路,用display stack-port看每个堆叠口的物理状态和协议状态,确保没有错包或者丢包。第三是测试跨设备转发,从主设备上ping备设备的管理地址,或者从接在主设备上的终端ping接在备设备上的终端,看通不通。
还有一个很重要的检查是多主检测。如果堆叠链路断了,堆叠组会分裂,两个部分都认为自己是主,这时候如果没有多主检测,就会出现两个管理IP,网络就乱了。多主检测的配置一般是在堆叠组里指定一个检测口,或者通过上游设备做代理检测。配置命令大概是:
stack dual-active detection mode direct interface Ten-GigabitEthernet 1/0/48 stack dual-active detection port这样当堆叠分裂时,检测口会发送检测报文,如果收到对方的回应,就说明分裂了,其中一台会进入Recovery状态,关闭所有业务口,只保留管理口,防止双主冲突。
4. 堆叠运维中的常见问题与排查
4.1 堆叠建立失败的典型原因
堆叠建不起来,最常见的原因有这么几个。版本不一致排第一,两台设备的软件版本差太多,协议协商直接失败。解决办法就是统一版本,升级或者降级到同一个版本。堆叠口配置错误排第二,比如物理口没关就配堆叠,或者堆叠口绑定的物理口不对,或者线缆插错了口。这种问题一般看日志能发现,堆叠口会报物理层Down或者协议层Down。
成员编号冲突排第三,两台设备都配了编号1,堆叠组里编号必须唯一,冲突了就会有一台起不来。解决办法是改掉其中一台的编号,重启后再加入。优先级配置不当也可能导致问题,比如两台设备优先级都是默认值,选举结果不确定,虽然不影响堆叠建立,但主备角色可能不是你想要的。建议显式配置优先级,别偷懒。
还有一个比较隐蔽的原因是线缆或者光模块问题。堆叠链路对误码很敏感,如果光模块老化或者光纤脏了,堆叠协议报文可能丢包,导致堆叠不稳定,时断时续。我遇到过一回,堆叠组频繁分裂又合并,查了半天才发现是一根光纤的接头有灰尘,擦干净就好了。所以堆叠链路的质量一定要保证,该换线换线,该换模块换模块。
4.2 堆叠分裂后的应急处理
堆叠分裂是运维中最怕遇到的情况之一。分裂的原因可能是堆叠线缆被拔了、光模块坏了、设备断电了。分裂之后,原来的堆叠组变成两个独立的组,如果没配多主检测,两个组都会用原来的管理IP,网络里就出现IP冲突了。
应急处理的步骤是这样的。首先,确认分裂范围,通过Console或者带外管理登录到其中一台设备,看堆叠状态,确认哪些成员还在,哪些掉了。其次,检查多主检测是否生效,如果配了,应该有一台进入了Recovery状态,业务口被关闭,这时候只需要修复堆叠链路,设备会自动恢复。如果没有配多主检测,那就得手动干预,先把其中一台的业务口关掉,防止冲突扩大。
然后,修复物理链路。如果是线缆问题,换线;如果是模块问题,换模块;如果是设备问题,重启或者更换设备。修复之后,堆叠组会自动重新协商,成员重新加入。最后,验证业务恢复,检查跨设备聚合链路是否正常,终端通信是否恢复,管理IP是否唯一。
我个人的建议是,堆叠环境一定要配多主检测,而且检测口要选一个可靠的、不会被误拔的端口。另外,堆叠线缆最好走独立的路径,别和业务线缆捆在一起,免得施工的时候一剪刀下去全断了。
4.3 堆叠升级的注意事项
堆叠组的软件升级比单台设备麻烦,因为要保证升级过程中业务不中断,或者至少中断时间最短。一般的升级流程是:先升级备设备,备设备重启期间主设备继续转发;备设备升级完成并重新加入堆叠后,触发主备切换,原来的主设备变成备设备,再升级它;最后新主设备重启,业务可能会有短暂中断,但比两台同时重启好得多。
升级之前要确认几件事:新版本是否支持当前堆叠配置,升级包是否完整,升级过程中堆叠链路是否稳定。升级的时候最好用Console或者带外管理,别依赖业务口的管理IP,因为升级过程中管理口可能会断。另外,升级前一定要备份配置,万一升级失败还能回滚。
还有一个坑是堆叠组的启动顺序。有些设备在升级后重启时,如果启动顺序不对,可能会导致堆叠建立慢或者失败。我一般会先启动主设备,等它完全起来之后再启动备设备,这样协商过程更顺畅。当然,不同厂商的设备行为不一样,具体还得看文档和实测。
4.4 常见问题速查表
| 问题现象 | 可能原因 | 排查方法 | 解决措施 |
|---|---|---|---|
| 堆叠组只有一台成员 | 堆叠线缆未插好、版本不一致、编号冲突 | 检查物理连接、display stack看状态 | 重新插拔线缆、统一版本、修改编号 |
| 堆叠频繁分裂合并 | 线缆或光模块故障、堆叠链路误码高 | 查看堆叠口错包计数、更换线缆测试 | 更换线缆或模块、清洁光纤接头 |
| 管理IP冲突 | 堆叠分裂且未配多主检测 | 检查多主检测配置、查看堆叠状态 | 配置多主检测、手动关闭一台业务口 |
| 跨设备聚合不通 | 聚合组配置错误、堆叠口未Up | 检查聚合组状态、堆叠口状态 | 修正聚合配置、修复堆叠链路 |
| 升级后堆叠建立失败 | 新版本不兼容、配置丢失 | 查看启动日志、对比配置 | 回滚版本、恢复配置 |
5. 堆叠方案的设计心得与扩展思路
5.1 堆叠组规模的控制
堆叠成员数量不是越多越好。成员越多,堆叠协议报文越多,主设备的控制平面压力越大,堆叠收敛时间也越长。一般来说,接入层堆叠组控制在四到六台比较合适,超过八台就要慎重考虑了。如果确实需要更多端口,可以考虑做多个堆叠组,然后通过上游设备互联,而不是硬堆成一个大组。
另外,堆叠组的成员最好在同一个机柜或者相邻机柜,这样堆叠线缆短,故障点少,维护也方便。如果设备分散在不同楼层,堆叠线缆要跨楼层,施工难度大,而且一旦线缆出问题,影响范围广。这种情况下,可以考虑用光纤做堆叠,但光纤的可靠性受环境影响大,要做好防护。
5.2 堆叠与链路聚合的配合
堆叠最大的价值之一,就是让跨设备链路聚合成为可能。在没有堆叠的情况下,两台设备之间做聚合,需要依赖一些额外的协议,配置复杂,而且故障切换慢。有了堆叠,两台设备逻辑上是一台,跨设备聚合就是普通的聚合,配置简单,切换快。
配置跨设备聚合的时候,要注意聚合模式的选择。如果是静态聚合,需要确保两端配置一致,否则可能协商失败。如果是动态聚合,协议会自动协商,但要注意协议报文的转发路径,确保堆叠链路正常。我一般推荐用动态聚合,省心,而且能检测到一些静态聚合发现不了的问题。
还有一个细节是聚合组的负载分担。堆叠环境下,跨设备聚合的流量可以在多个成员之间分担,但分担算法要看具体配置。有的设备支持基于源MAC、目的MAC、源IP、目的IP等多种算法,可以根据业务特点选择。比如视频监控流量,源IP比较固定,用源IP分担可能不均匀,用目的IP或者源目的IP组合会好一些。
5.3 堆叠技术的未来演进
堆叠技术本身也在演进。早期的堆叠主要是为了简化管理和提高可靠性,现在的堆叠开始和SDN、自动化运维结合。比如有些方案可以通过控制器统一管理多个堆叠组,自动下发配置,自动检测故障。还有一些方案把堆叠和纵向虚拟化结合,把接入、汇聚、核心都逻辑上合并成一台设备,进一步简化网络架构。
从运维角度看,堆叠的配置会越来越简单,但底层的协议和机制会越来越复杂。作为从业者,我觉得没必要把协议细节都背下来,但一定要理解堆叠的基本原理和常见问题的排查思路。这样不管界面怎么变,命令怎么改,你都能快速定位问题。
我在实际项目里用堆叠差不多有七八年了,从最早的千兆堆叠到现在的万兆堆叠,从链形到环形,从手动配置到自动化下发,踩过的坑不少,但总体感觉堆叠是接入层最实用的技术之一。它不花哨,但能实实在在解决问题。如果你还没用过,建议找两台闲置设备搭个环境试试,配一遍,拆一遍,再配一遍,比看十遍文档都管用。