行业内接入网络去堆叠已经逐步成为主流方向,在大型互联网公司也已经批量部署。但由于京东集团不同的业务需求及历史原因,没有条件完全复制目前主流的ARP转主机路由方式的去堆叠方案,这促使我们设计一种尽可能满足各类业务需求的方案。

近几年来云市场迅速发展,越来越多的用户把关键应用甚至全部应用部署到公有云上。云服务商在产品收入快速增长同时,也深刻体会到产品的高可用性对用户发展和用户留存的重要性。面向用户的产品SLA的实现效果取决于其依赖的各个环节,而基础网络是所有产品需要依赖的一个重要环节,因此,提升网络高可用SLA对整体提升产品整体SLA有着重要促进作用。今天我们要谈的异构去堆叠就是京东云在提高网络高可用SLA方面的新技术研究。用户自有网络其实也面临同样的问题,有提高网络可靠性需求的用户可以考虑在自有网络中使用类似方案。

网络高可用通用解决方案

首先,让我们先来看一下为了实现网络高可用,当下的四种服务器连接主流方案:

由上图可以看出,双网卡/交换机堆叠和双网卡/去交换机堆叠提供了更好的高可用保证。

通用堆叠方式 V.S 通用去堆叠方式

01堆叠方案

优势

  • 服务器双网卡捆绑,无需特别改造

  • 交换机控制面统一,支持服务器BGP路由方式接入

劣势

  • 多设备统一控制面,可靠性低

  • 升级困难

  • 横向连接浪费端口

02去堆叠方案

常见的去堆叠方案有以下两种:

去堆叠方案-路由方式

优势

  • 交换机完全独立

  • 支持异构

  • 路由方式接入的服务器无需特别改造

劣势

  • 2层方式接入的服务器需要进行改造

  • 服务器除网卡IP外需配置单独业务IP

  • 服务器多IP增加业务方运维复杂度

  • 静态路由方式不适合VM或Docker漂移

  • 动态路由方式要求全部服务器运行路由协议

去堆叠方案-ARP转主机路由方式

优势

  • 交换机完全独立

  • 服务器网卡捆绑方式不变,便于运维

劣势

  • 一组交换机要求同厂商,不支持异构

  • 需要修改服务器Linux内核ARP处理部分

  • 不支持服务器BGP路由方式接入

通过以上对比,可以发现堆叠与去堆叠方式其实都可以实现网络的高可用,但各有利弊。针对这样的情况,京东云提出了一种理想的去堆叠方式,可以满足下图中的所有需求。


异构去堆叠方案

方案架构图

01实现方法

交换机侧

1、IP配置/24掩码,两台交换机可配置相同IP或者不同IP;

2、启用ARP代理及转主机路由功能;

3、配置ARP超时时间为5s以便在服务器不响应ARP时快速撤回主机路由。

服务器侧

1、服务器双网卡配置相同IP地址(掩码/32);

2、采用onlink方式配置目的为交换机IP的静态路由指向对应网卡;

3、采用onlink方式配置缺省路由同时指向两块网卡;

4、需要运行Ifplugd进程监控物理连接,物理连接发生UP/DOWN时执行相应ARP Ping和路由修改操作。

02冗余测试

测试拓扑

测试结果

从上图中的测试拓扑和结果中可以看出,不论是软件操作上的禁用还是硬件拔出,在设定的收敛时间内,服务器的网络一直保持高可用。

03异构去堆叠方案小结

异构去堆叠方案优势

1、交换机完全独立

2、异构避免单一厂商风险

3、异构推动自研交换机快速上线

4、服务器侧支持2层方式或BGP路由方式

5、不修改Linux内核

注意事项

1、需要内核版本支持L4 HASH方式ECMP(Centos 7.4以上)

2、需要运行Ifplugd进程监控物理连接

总结

综上所述,异构去堆叠有助于实现苛刻的网络SLA和极致的用户体验。京东云在设计去堆叠方案时首先考虑了异构,一方面因为单一厂商对网络高可用SLA还是一个重要风险点,另一方面异构方式可以促进京东正在进行的自研交换机实现快速部署。众所周知,自研交换机在各大互联网公司都是重点项目,但软件和硬件的稳定性一直是批量部署的重大障碍。而异构去堆叠利用自研和商用交换机1+1的方式可以大大降低自研交换机稳定性的影响。

·END·

异构去堆叠 | 一种完美提升网络高可用SLA的方案的更多相关文章

  1. Oracle的三种高可用集群方案

    浏览了一下Oracle官方的网页以及非官方的ppt,简单了解了一下Oracle提供的高可用方案. 主要有三种: 1. RAC RAC,  Real Application Clusters 多个Ora ...

  2. [ Openstack ] Openstack-Mitaka 高可用之 网络服务(Neutron)

    目录 Openstack-Mitaka 高可用之 概述    Openstack-Mitaka 高可用之 环境初始化    Openstack-Mitaka 高可用之 Mariadb-Galera集群 ...

  3. CVPR 2019 | 用异构卷积训练深度CNN:提升效率而不损准确度

    对于深度卷积神经网络而言,准确度和计算成本往往难以得兼,研究界也一直在探索通过模型压缩或设计新型高效架构来解决这一问题.印度理工学院坎普尔分校的一篇 CVPR 论文则给出了一个新的思路——使用异构的卷 ...

  4. larbin是一种开源的网络爬虫/网络蜘

    larbin是一种开源的网络爬虫/网络蜘蛛,由法国的年轻人 Sébastien Ailleret独立开发.larbin目的是能够跟踪页面的url进行扩展的抓取,最后为搜索引擎提供广泛的数据来源.Lar ...

  5. 【CTO俱乐部研修班开课】看板先驱David J. Anderson:看板核心在于创造一种能力——提升敏捷性

    看板开发方法是近年来最热门的敏捷和精益开发方法.看板之父David J. Anderson觉得其核心在于帮助企业创造一种能力--提升敏捷性.CTO俱乐部看板研修班将通过理论.沙盘模拟.真实案例分享等阐 ...

  6. js数组和字符串去重复几种方法

    js数组去重复几种方法 第一种:也是最笨的吧. Array.prototype.unique1 = function () { var r = new Array(); label:for(var i ...

  7. PHP几种抓取网络数据的常见方法

    //本小节的名称为 fsockopen,curl与file_get_contents,具体是探讨这三种方式进行网络数据输入输出的一些汇总.关于 fsockopen 前面已经谈了不少,下面开始转入其它. ...

  8. PatentTips -- 一种在CoAP网络中注册的方法及装置

    技术领域 [0001] 本发明涉及一种在CoAP网络中注册的方法及装置,属于网络通信技术领域. 背景技术 [0002] (Internet of Things,物联网)作为新一代的信息技术,越来越受到 ...

  9. 微软引入了两种新的网络过滤系统,WFP和NDISfilter

    Windows 8是微软公司推出的最新的客户端OS,内部名称Windows NT 80.相对于Windows NT 5.x,其网络结构变化非常大,原有的TDI,NDIS系统挂接方法不再适用.在Wind ...

随机推荐

  1. 使用SpringMVC框架实现文件上传和下载功能

    使用SpringMVC框架实现文件上传和下载功能 (一)单个文件上传 ①配置文件上传解释器 <!—配置文件上传解释器 --> <mvc:annotation-driven>&l ...

  2. Pycharm快捷键设置(鼠标滚动控制字体大小)

    一.pycharm字体放大的设置 File —> setting —> Keymap —>在搜寻框中输入:increase —> Increase Font Size(双击) ...

  3. Oracle中国移动经典面试题(附代码跟两种答案)

    /*中国移动sql面试题: create table test(   id number(10) primary key,   type number(10) ,   t_id number(10), ...

  4. tomcat 中项目配置文件统一目录设置

    在tomcat 安装目录中 conf 下的  catalina.properties 文件中 有个  shared.loader= 配置为   shared.loader="${catali ...

  5. C语言实验一(2)

    #include<stdio.h>int main(){ char c1,c2; c1=97; c2=98; printf("c1=%c,c2=%c\n",c1,c2) ...

  6. vue.js+webpack在一个简单实例中的使用过程demo

    这里主要记录vue.js+webpack在一个简单实例中的使用过程 说明:本次搭建基于Win 7平台 Node.js 安装官网提供了支持多种平台的的LTS版本下载,我们根据需要来进行下载安装.对于Wi ...

  7. 『高性能模型』HetConv: HeterogeneousKernel-BasedConvolutionsforDeepCNNs

    论文地址:HetConv 一.现有网络加速技术 1.卷积加速技术 作者对已有的新型卷积划分如下:标准卷积.Depthwise 卷积.Pointwise 卷积.群卷积(相关介绍见『高性能模型』深度可分离 ...

  8. 按照固定字符数切割字符串 基于python的re正则表达式

    def cut_text(text,lenth): textArr = re.findall('.{'+str(lenth)+'}', text) textArr.append(text[(len(t ...

  9. mysql 插件相关命令

    # 查看mysql的插件 show plugins \G # 安装mysql 插件 INSTALL PLUGIN spartan SONAME 'ha_spartan.so'; # 卸载 UNINST ...

  10. 跟随我在oracle学习php(19)

    Order by子句 形式: order  by  排序字段1  [排序方式],  排序字段2  [排序方式], ..... 说明: 对前面取得的数据(含from子句,where子句,group子句, ...