6WINDGate Witerpaper
Author:Once Day Date:2023年4月29日
本文是对6WIND官网文档的整理和翻译,仅供学习和研究之用,原始文章可参考下面文档:
- 6WINDGate Documentation - 6WIND
- 6WINDGate Modules — 6WINDGate Modules 5.6.2 documentation
- (RFC标准支持情况) IP Protocols (6wind.com)
文章目录
- 6WINDGate Witerpaper
- 1.概述
- 1.1 架构整体视图
- 1.2 包处理流程
- 1.3 7大模块组成
- 2. 数据面模块介绍
- 2.1 DPDK和FPN-SDK
- 2.2 FastPath(快速路径)
- 2.3 虚拟接口
- 2.4 执行流程
- 2.5 多核性能线性扩展
- 3. Linux同步模块
- 3.1 异常同步策略
- 3.2 配置同步(Cache Manager/Fast Path Manager)
- 3.3 统计和命中标识(Statistics And Hitflags)
- 4. 控制面模块
- 5. 管理面模块
- 5.1 YAMS: NETCONF/YANG-BASED MANAGEMENT ENGINE
- 5.2 CLI命令行接口
- 5.3 运行监控和分析
- 5.4 管理面可扩展性
- 6. 高可用模块
- 7. 6WINDGate使用环境
1.概述
高效架构的主要概念是几年前定义的,作为解决互联网流量爆炸所需的高速路由器设计的一部分。现在,这种架构已经扩展到新的服务,如第二层协议、安全性、移动性、多播等。
基于ip的设备可以划分为三个基本元素:数据平面、控制平面和管理平面。
数据平面是网络节点的一个子系统,它接收和发送来自接口的数据包,根据适用协议的要求处理它们,并根据需要发送、丢弃或转发它们的数据。对于它接收到的大部分或所有没有发送到节点本身的数据包,平面从更高级别的处理器卸载数据包转发,它执行所有必要的处理。对于路由功能,它由一组过程(算法)组成,路由器使用这些过程(算法)对数据包做出转发决策,算法分析信息。
控制平面维护数据平面用于数据包处理的信息。维护这些信息需要处理复杂的信令协议。在数据平面上实现这些协议会导致转发性能变差。管理这些协议的一种常用方法是让数据平面检测传入的信令数据包,并将其本地转发给控制平面。控制平面信令协议可以更新数据平面信息,并向数据平面注入出信令报文。由于信令流量在全局流量中只占很小的一部分,因此该体系结构具有良好的性能。对于路由功能,控制平面由一个或多个路由协议组成,这些协议实现路由器之间的路由信息交换,以及路由器将这些信息转换为转发表的算法。RIP、OSPF、BGP就是这类路由协议的代表。在虚拟路由的情况下,在数据平面级别管理转发表的多个实例。数据平面一旦检测到路由报文,就将其转发给控制平面,由控制平面计算新路由、添加路由或删除路由。转发表用这个新信息更新了。当路由协议必须发送报文(例如OSPF Hello报文)时,该报文被注入数据平面进行发送对于IPsec安全功能,用于密钥交换管理的信令协议(如IKE或IKEv2)在控制平面。进入的IKE报文在本地转发到控制平面。IKE协商完成后,位于数据平面的安全关联和策略由控制平面更新。出方向的IKE报文被注入到数据平面,发送到出方向流中。
管理平面提供进入整个系统的管理接口。它包含支持运营管理、管理或配置/供应操作的流程,例如:
- 支持统计数据收集和汇总的设施
- 支持管理协议的实现
- 命令行界面,图形用户配置界面通过网页或传统SNMP管理。还可以包括基于XML的更复杂的解决方案
可以运行在商业现成的硬件和软件上:
现代网络设备的最后一个概念是商品化。英特尔或Arm最新标准cpu的强大功能,现代PCI网卡的带宽(高达100G)以及Linux网络堆栈的多功能性和功能丰富性,使得从商用现货(COTS,Commercial Off-The-Shelf)硬件和软件构建高性能网络设备成为可能,前提是您有合适的网络堆栈来克服Linux性能限制。
1.1 架构整体视图
windgate实现了前一节所解释的网络架构。本节概述该体系结构的不同组件,然后在以下部分中对其进行详细描述。即使使用SMP模式下的Linux Networking Stack的有效实现,基于Linux的解决方案也无法扩展,因为所有数据包都由堆栈管理,而Linux体系结构受到操作系统延迟和锁争用的限制。SMP架构不能充分受益于多核的功能。为了超越这个限制,软件架构应该实现一个快速路径。CPU内核在Linux操作系统和控制平面应用处理和快速路径数据平面处理之间调度。
实现特性如下:
- 每个协议都必须重新设计,以在快速路径级别实现耗时和重复的任务,而只有复杂的数据包被转发到网络堆栈。
- 该体系结构的目标是提供Linux网络堆栈的卸载,对控制和管理平面尽可能透明。快速路径处理大多数数据平面数据包,而不涉及底层操作系统。Fast Path可以与硬件数据平面卸载技术相比较,没有ASIC或FPGA有限的可扩展性和编程复杂性。快速路径提供了出色的性能和可扩展性,与所有的舒适和灵活的软件。
1.2 包处理流程
系统收包处理流程如下:
- 如果存在本地信息,则由Fast Path接收数据包并根据本地信息进行处理。Fast Path实现无锁报文处理。
- 当Fast Path本地信息不允许处理接收到的数据包时(因为它打算在控制平面协议中进行处理,或者本地信息尚未更新,或者Fast Path不支持该协议),它将作为异常数据包发送到网络堆栈,在那里使用标准Linux处理来处理。应该注意的是,异常数据包仅占总流量的百分之几,因此在快速路径级别拥有完整和复杂的IP堆栈不会有任何好处。
- 在标准的Linux处理过程中,通过同步模块自动透明地将网络堆栈中学习到的信息(ARP表项、L3路由、IPsec安全关联等)同步到Fast Path,以便同一流的下一个报文可以被Fast Path处理。
异常策略和连续同步机制的结合,使系统可以处理任何类型的数据包(即使是那些不支持或尚未在Fast Path中配置的数据包),并透明地更新Fast Path中的本地信息。其结果是,几乎所有的数据包最终都由快速路径处理,只有一小部分数据包进入操作系统。
1.3 7大模块组成
不同模块的详细概述可参考下面文档:
- 6WINDGate Modules — 6WINDGate Modules 5.6.1 documentation
6WINDGate软件是模块化的。您可以选择所需的模块族,并在每个模块族中选择应用程序所需的模块。
- Processor SDK (DPDK) , 硬件相关开发工具包,提供高性能用户空间网卡轮询收发包。
- FPN-SDK,硬件抽象软件开发工具包,提供统一的抽象API。
- Fast Path,快速包处理路径。
- Linux / Fast Path Synchronization,内核信息同步模块。
- Control Plane ,网络协议控制面。
- Management ,网络协议管理面。
- High Availability,高可用,热备份。
2. 数据面模块介绍
2.1 DPDK和FPN-SDK
快速路径通过FPN-SDK接收和发送数据包,FPN-SDK是硬件依赖的6WINDGate DPDK之上的硬件抽象层。6WINDGate DPDK为x86和Arm上的高性能I/ o提供驱动程序和库。它基于来自dpdk.org的开放源码DPDK,除了提供开放源码DPDK的标准特性之外,还提供虚拟化网络和加密附加组件,以及商业支持和维护。FPN-SDK提供零开销api,使Fast Path协议能够在网络上接收和发送数据包,接收和发送数据包到Linux,管理内存以及与多核硬件(如加密引擎,硬件队列等)接口。这些api是使用处理器SDK实现的:
- Application API
- Packet bulk API
- Checksum Computation API
- Core-set management API
- Control Plane Protection API
- Fpn_flow API
- Garbage collector
- Intercore API
- Mbuf structure API
- Message API
- Hardware offload API
- Tools description, FPVI statistics and Control Plane Protection usage.
2.2 FastPath(快速路径)
参考文档:’
- 一文了解M-Tree(M树)_wlg于初的博客-CSDN博客
- Ternary Search Tree - GeeksforGeeks
路由查找算法:
- M-trie是基于三元trie的近似逻辑最小化算法。它用于片上逻辑最小化,比传统的逻辑最小化器快100到1000倍,用于路由表压缩。Trie(源自检索)是一种多路树数据结构,用于存储字母表上的字符串。它用于存储大量字符串。使用trie可以有效地进行模式匹配.
快速路径实现了“运行到完成”模型:一旦一个数据包被分配给一个CPU核心,这个数据包的所有处理都由这个特定的核心执行。如果快速路径可以处理传入的数据包,它将其传递给相关模块,该模块将使用共享内存中的信息执行此处理。如果进入的报文无法在Fast Path级别进行处理,则通过FPVI API将该报文作为异常报文转发给Linux Networking Stack。数据包被注入到Linux网络堆栈中的正确位置,以避免任何进程重复。
快速路径数据包处理负责解析传入数据包,并确定是否可以使用本地内存中的可用信息进行转发。为此,需要进行以下测试,才能实现IPv4转发功能:
-
首先,Fast Path判断报文是否为IPv4以太类型。如果测试结果是否定的,那么这个数据包就是一个异常数据包,并被转移到6WINDGate Linux网络堆栈中进行处理。
-
然后,对IPv4报文进行检查,以检测无法在Fast Path级别进行管理的报文,例如校验和错误、IP选项错误或TTL为0的报文。广播/组播数据包以及保留IP目的地址的数据包也会被检测到。如果这样的事件发生,数据包是一个异常,并被转移到6WINDGate Linux网络堆栈进行处理。
-
一旦完成,如果数据包没有被转移,则执行IP查找以检查路由表中是否有有效条目。6WINDGate IPv4转发快速路径协议中的IP查找是按照M-trie 16/8/8实现的,因此在固定的内存访问次数内查找任何流,从而实现最高的性能。在此阶段,确定:
- 如果找到目的地的路线,
- 如果在表中找到的路由是通过Linux Networking Stack接口。例如,它可以是由Linux网络栈管理的PCI或WiFi接口,
- 如果该表中的路由经过未知接口,
如果这样的事件发生,数据包是一个异常,并被转移到6WINDGate Linux网络堆栈进行处理。
-
在这个阶段,快速路径必须执行所需的处理,将ARP条目标记为可达,减少TTL,更新IP数据包校验和并添加以太网类型,然后再排队转发数据包。
这个简单的例子展示了快速路径协议是如何工作的。当然,当包含额外的功能(例如虚拟路由、基于策略的路由、数据包批量等)时,处理变得更加复杂。每个快速路径协议都集成在完整的6WINDGate快速路径架构中,以提供完整的解决方案。这个例子还说明了6WINDGate架构的灵活性,以及如何使用它来逐步添加快速路径协议。快速路径中不支持的协议可以转移到Linux网络堆栈中。只要对应的快速路径协议可用,数据包就可以保持在快速路径级别以进行进一步处理。
2.3 虚拟接口
快速路径虚拟接口(FPVI)允许在快速路径和Linux网络堆栈之间交换数据包。FPVI使快速路径端口作为netdevice出现在Linux网络堆栈中。FPVI的目的是:
-
在Linux中提供物理网卡表示,用于配置、监视和流量捕获。
-
从Linux发送报文到Fast Path(本地产生的流量)。
-
Fast Path与Linux交换异常报文。
FPVI在Linux中使用TUN/TAP驱动程序实现,在Fast Path中通过FPN-SDK使用DPDK虚拟用户PMD为每个TUN/TAP接口提供虚拟端口。Linux network Stack本地发送的报文直接注入到出流中,由Fast Path处理,使用TUN/TAP Linux驱动程序。FPVI实现的异常策略如下:
-
对于Basic Exceptions, FPVI通过TUN/TAP Linux驱动的netif_rx函数实现标准处理。
-
对于特殊例外,在入口路径上,数据包被注入到Linux Networking Stack的正确位置,这要归功于下面解释的eBPF程序。在出口路径上,使用标准的sendmsg() API直接发送数据包。
特殊异常被发送到Linux与一个特定的拖车称为FPTUN,包括有关在快速路径中发生的处理的信息。它们被发送到一个称为FPTUN处理程序的eBPF程序,该程序解析FPTUN预告片并将数据包驱动到Linux网络堆栈中的右钩子中,以便与快速路径已经完成的工作相一致进行进一步处理。
2.4 执行流程
接收到的数据包处理如下(假设所有功能都被激活):
- 首先应用入接口QoS。
- 然后是第二层处理。
- 数据包可选地重新组装和过滤(进入);
- 应用了流控调节(速率限制)。
- 然后应用三层处理(例如转发、IPsec、NAT)。
- 数据包被过滤,如果有必要,还会被分片。
- 再次对报文进行第二层处理。配置出接口QoS。
在每个级别,如果数据包不能在快速路径级别处理,则会发生异常。
在应用三层封装(IP隧道,GRE)的情况下,数据包被认为是从一个新接口返回的。如果应用多个封装,则递归地应用它们。
2.5 多核性能线性扩展
分组处理性能随分配给Fast Path的核数的变化而变化,具体如下:
-
RSS(接收端缩放)在nic中,根据传入数据包的5元组将数据包分配到几个接收队列中。
-
无锁,运行到完成的快速路径设计,使每个核心的处理相互独立。
在某些用例中,RSS没有帮助,因为传入数据包的5元组总是相同的(例如IPsec封装)。在这些情况下,处理在软件中的核心之间负载均衡(例如,IPsec加密处理被卸载到空闲核心)。有些模块在设计上不能无锁,因为它们需要在内核之间共享资源(例如QoS或TCP使用共享软件队列)。在这种情况下,性能不会线性扩展。
3. Linux同步模块
在官方文档第5章里面有Route转发和IPsec处理的例子,可以自行参考:
- 6WINDGate-Architecture-Overview-Whitepaper
3.1 异常同步策略
如果传入的数据包不能在快速路径级别进行处理,则该数据包将通过FPVI作为异常数据包转发给Linux网络堆栈。
一般来说,通过FPVI发送的数据包在Linux中通过TUN/TAP接收驱动程序接收,并通过标准的Linux Networking Stack进行处理。但是,在某些情况下,不能将原始数据包发送到Linux进行标准处理。例如,对于已经被解密的IPsec数据包,不能进行进一步的处理(例如,没有为被解密的数据包提供路由)。清除包不能发送到标准Linux网络堆栈,因为它们匹配安全策略,因此会被丢弃。
在这种情况下,数据包通过专用的eBPF程序发送到Linux,以在Linux网络堆栈中的正确位置注入它们(在我们的情况下,在进入IPsec处理之后)。由于Fast Path通常比Linux更高效,因此生成许多异常会使Linux超载。
为了控制异常机制,6WINDGate支持自定义Linux中负责处理异常的内核数量,以及对异常通道的速率限制,并对最重要的控制平面数据包进行优先级排序。
3.2 配置同步(Cache Manager/Fast Path Manager)
缓存管理器(Cache Manager)是在Linux网络堆栈和快速路径之间执行同步的两个软件模块之一。它通过Netlink消息监视由控制平面协议(ARP和NDP条目,三层路由表,安全关联等)执行的内核更新,并与此信息同步快速路径。
由于缓存管理器,当控制平面协议与快速路径集成时,不需要更改它们。缓存管理器是独立于硬件的。它提供了任何需要的信息,以卸载到通往FPC API的快速路径。
快速路径管理器(FPM)是控制平面软件模块,负责快速路径配置。FPM根据通过FPC API与缓存管理器交换的消息更新快速路径表。
更新Fast Path有两种不同的方式:写入共享内存中的表,或者当更新需要触发Fast Path中的事件(例如更改MTU)时,直接向Fast Path应用程序发送消息。
3.3 统计和命中标识(Statistics And Hitflags)
由于有些报文在Fast Path上处理,有些报文在Linux network Stack上处理,所以需要对Linux和Fast Path的统计信息进行汇总。快速路径模块用统计信息更新共享内存。FPS守护进程读取共享内存,并使用Netlink更新Linux内核统计信息。Netlink无法更新某些内核统计信息。
为此,提供了一个可预加载的库,以便使用来自共享内存的快速路径统计信息透明地更新Netlink统计请求。这样,从Linux中读取统计信息的Linux应用程序将接收聚合的Linux Networking Stack + Fast Path统计信息。类似地,对于由Fast Path处理的数据包,必须更新相应的Linux对象状态(ARP项、连接、Linux桥接等)以防止它们过期。当一个条目被命中(hitflag)时,快速路径模块更新共享内存。Hitflags守护进程读取共享内存并使用Netlink更新相应的Linux内核项。Linux应用程序像往常一样从Linux中读取对象状态。
详细信息请参考6WINDGate Linux /快速路径同步模块数据表。请注意,有几个模块没有与Linux同步:
- TCP,作为加速的TCP应用程序必须被移植到快速路径,因此独立于Linux网络堆栈;
- QoS,由于性能原因,6WINDGate架构与Linux非常不同,同步是不可能的;
- CG-NAT,因为没有Linux CG-NAT实现,因此没有什么需要同步的。
4. 控制面模块
正如在第3节中详细解释的那样,windgate自动将Linux Networking Stack状态与它自己的本地信息同步。该机制基于标准的Linux api,因此可以使用标准的Linux控制平面实用程序来管理系统。我们通常可以认为iproute2配置静态IP地址、路由、邻居,并创建逻辑接口,如VLAN、VXLAN等。6WINDGate产品中提供了所有常见的网络实用程序。
此外,这意味着配置Linux网络堆栈的开源控制平面守护进程也可以按原样使用。6windgate利用这一点嵌入了下面开源组件:
- FRRouting,动态路由。
- strongSwan, IKE, 互联网密钥交换协议,用于建立虚拟专用网络。
- Open vSwitch, OVS, 软件模拟交换机。
6WINDGate路由控制平面模块允许对各种路由协议进行路由管理。它由来自开源FRR项目的zebra守护进程提供,特点:
- RIPv1/RIPv2支持IPv4, RIPng支持IPv6
- OSPFv2,OSPFv3
- BGP4
- MPLS控制平面
- 虚拟路由
- 组播路由(规划中)
集成在6WINDGate中的FRR版本遵循上游版本。6WIND还通过向社区提交bug修复来为这个开源项目做出贡献。详细信息请参阅6WINDGate控制平面路由模块数据表。
6WINDGate安全控制平面模块实现IKEv1和IKEv2协议。它允许协商密钥材料(IPsec sa)以使用IPsec vpn。它基于最新版本的开源strongSwan基于ipsec的VPN解决方案。所有强大的swan功能都支持6WIND。详细信息请参阅6WINDGate控制平面安全模块数据表。
6WINDGate OVS控制平面模块提供虚拟交换、流匹配和数据包操作,通过OpenFlow控制器或命令行进行配置。它基于http://www.openvswitch.org/。
本模块遵循开源版本。控制平面OVS模块提供以下功能:
- 管理、控制和调试OVS数据路径
- 支持与Fast Path同步统计数据
- 支持hitflags(一个不被内核数据路径击中,但被Fast Path数据路径击中的流)
- 支持在快速路径共享内存中直接添加/删除流
详细信息请参见6WINDGate控制平面OVS模块数据表。
5. 管理面模块
6WINDGate管理平面包括三个主要组成部分:
-
引擎和数据存储:YAMS,一个基于python的引擎,配置和监控所有网络组件。YAMS引擎使用YANG模型数据存储。
-
配置:NETCONF服务器,提供标准API与基于NETCONF的配置工具进行接口。6WIND开发了自己的CLI工具作为NETCONF客户端来配置6WINDGate的功能。
-
监控/分析:传统的SNMP和sFlow监控服务,以及通过KPI(关键性能指标,Key Performance Indicator)代理收集和流式统计的高级服务。
6WINDGate管理平面组成的业务如下:
- 基本组件NETCONF server,YANG-based datastore,YAMS,SNMP,Support of Fast Path features。
- 管理路由插件提供控制平面路由模块的管理
- 管理安全插件提供控制平面安全模块的管理
- 管理VRRP附加组件提供高可用性VRRP模块的管理
- 管理命令行提供命令行接口(NETCONF客户端)
- 管理sFlow提供sFlow协议及其管理,sFlow(Sampled Flow)是一种基于报文采样的网络流量监控技术,主要用于网络流量的统计分析
- 管理kpi提供关键性能指标yang模型、引擎和代理,以将数据流式传输到外部时间序列数据库。
5.1 YAMS: NETCONF/YANG-BASED MANAGEMENT ENGINE
NETCONF是IETF标准化的网络管理协议。它定义了安装、操作和删除网络设备配置的机制。它对配置数据和协议消息使用基于可扩展标记语言(Extensible Markup Language, XML)的数据编码。更多信息请参见RFC6241.
YANG是一种用于为NETCONF协议建模数据的语言。YANG模块定义了可用于基于netconf的操作的数据层次结构,包括配置、状态数据、远程过程调用(rpc)和网络管理协议的通知。更多信息请参见RFC 7950。
NETCONF API可以被任何NETCONF客户端用来远程配置和监控路由器,从而实现自动化和编排。
NETCONF / YANG-based引擎,管理引擎由一个基于yang的数据存储和一个NETCONF服务器组成。它支持所有读写配置所需的协议操作:<get>
, <get-config>
, <edit-config>
,<copyconfig>
等。
明确分离配置数据和状态,数据管理引擎为每个特性存储单独的配置和状态数据。与配置部分相比,状态部分包含额外的运行时信息;一般来说,统计数据。可以使用get命令从CLI中的任何地方显示状态数据,这样用户就可以在构建配置时查看当前状态的数据。
VRFS,为了在管理平面和网络平面之间提供高度的隔离,网络配置被原生地分割成vrf。每个VRF都有自己的接口、IP地址、路由表、防火墙等。这种方法确保了良好的服务隔离,并允许将来为给定的VRF定义CPU资源或内存限制。它依赖于Linux网络名称空间(netns)。
与现有Linux Day-1配置的兼容性,Cloud-init可以嵌入到6WINDGate进行Day-1配置,即6WINDGate的初始配置,以启用基本的控制台访问。可以配置管理接口、DHCP、SSH等基本网络服务、SSH密钥的发放等。管理引擎兼容这种cloud-init配置,因为它不涉及网络服务(SSH、DNS、DHCP等)的配置,只要它们没有配置语句。当一个配置语句存在时,它优先于任何现有的外部配置。最后,一个像SSH这样的已知服务将被识别,并且在不必要的情况下不会重新启动。
5.2 CLI命令行接口
CLI是与6WINDGate交互的通用用户界面。它可用于配置、监控和故障排除。CLI提供帮助、补全、配置文件管理等功能,通过命令行保存和恢复完整一致的配置。
CLI实际上是一个NETCONF客户端,它与6WINDGate的基于yang的配置引擎通信。它的命令名和语句遵循6WINDGate YANG模型的语法和分层组织。根据YANG模型检查数据一致性,以便及早发现语法错误。配置引擎支持事务和错误回滚。
CLI提供了一些传统的功能,比如补全、历史记录和上下文帮助。用户可以像浏览文件系统一样遍历配置树,例如,“/”跳到配置的根目录,“…”向上移动一层。相对路径和绝对路径可用于引用配置数据,使浏览非常高效。
5.3 运行监控和分析
传统的SNMP监控:
SNMP (Simple Network Management Protocol,简单网络管理协议)是一种internet标准协议,用于收集和组织IP网络中被管理设备的信息。
它以在MIB中组织的受管理系统上的变量的形式公开管理数据(Management Information Base),描述系统状态。然后,管理应用程序可以远程查询这些变量。
6WINDGate SNMP管理模块基于net-snmp (http://www.net-snmp.org)开源项目,提供对SNMP监控的支持。
6windgate支持SNMPv1、SNMPv2c(基于团体字的基本认证)和SNMPv3(基于SNMP用户的认证)。支持的MIB包括标准系统和网络MIB(接口、IP、IPv6、IP转发等)、路由MIB (BGP、OSPF、RIP)、VRRP MIB和6wind开发的IPsec MIB。
数据面分析工具Sflow:
sFlow是一种在包含交换机和路由器的数据网络中监控流量的技术。特别地,它定义了在sFlow agent中实现的流量采样机制,以及将流量测量数据从sFlow agent传递到sFlow Collector的sFlow Datagram的格式。
该模块基于host-sflow,它是sFlow标准的开源实现。它是由6WIND修复的快速路径卸载。
下一代监测:KPIs:
除了传统的监测外,6WINDGate还提供基于时间序列收集和关键绩效指标(kpi)可视化的高级监测解决方案。有了这样的解决方案,就更容易理解过去发生的问题,并将它们与过去的事件联系起来。它甚至可以用来预测未来,因为用户可以直接可视化系统的动态。
6windgate kpi与InfluxDB时间序列数据库和Grafana分析前端预先集成。在6WIND的github上有一个关于InfluxDB/Grafana设置的例子。与其他TSDB或分析前端的集成是可能的。Telegraf用于收集kpi并将其导出到InfluxDB。
kpi使用YANG建模,并使用NETCONF或本地API公开。kpi模块包括:
- Linux系统和Fast Path模块的kpi守护进程(kpid)
- 监控引擎(YAMS),以一致的方式暴露本地API和NETCONF/YANG API的kpi
- 该工具(kpi-tool)用于查询API,以供常见的现有工具(JSON, Telegraf/InfluxDB)直接使用。
5.4 管理面可扩展性
6WINDGate管理架构可以定制,以扩展6WINDGate管理服务。
YANG Model And Configuration:
- 由于6WINDGate配置服务依赖于NETCONF API,因此所有工具,包括基于NETCONF客户端的自动化和编排平台,都可以轻松地与6WIND集成。
- 还可以扩展6WINDGate CLI,为现有的6WINDGate功能开发新的命令。例如,添加新的CLI命令用于路由配置或显示路由信息。
- 用户还可以使用6WINDGate配置框架以一致的方式将用户功能的配置与所有现有服务集成在一起。例如,用户可以为集成了6wINDGate的用户GTP模块开发一个6wINDGate管理扩展。
- 扩展相应的YANG模型后,6WINDGate CLI的扩展将自动可用。
- CLI文档(命令参考)也会自动生成。YANG模型和CLI的扩展示例在6WINDGate管理文档中提供。
Monitoring / Analytics:
-
6WINDGate开放式架构可以以不同的方式用于扩展监控和分析服务。
-
首先,用户可以将6WINDGate提供的服务和数据扩展到:
- 增加或扩展6WINDGate可用kpi;
- 为与6WINDGate集成的用户功能创建新的kpi;
- 自定义6WIND github下可用的Grafana仪表板,以显示6WINDGate或用户功能。
-
也可以使用不同的工具:
- Telegraf代理可以与另一个时间序列数据库工具集成,比如ElasticSearch,而不是Influxdb。
- Influxdb可以与其他图形前端集成,比如Kibana,而不是Grafana。
- 6WINDGate Telegraf代理可以被其他KPI代理(如collectd)取代。
6. 高可用模块
6WINDGate高可用性模块列表如下:
- HA Baseline,HA Baseline模块提供了其他High Availability同步模块常用的库和脚本。
- HA ARP/NDP Synchronization,用于同步ARP (Address Resolution Protocol)/NDP (邻居发现协议)表之间的两台不同的机器
- HA Firewall / NAT Synchronization, 同步主备防火墙之间的状态会话表。在故障转移之后,备份防火墙会话表已经是最新的,并且流量继续转发而不会中断会话。
- HA IPsec/IKE Synchronization,HA IPsec/IKE同步模块可以在两台不同的机器之间同步IKE (Internet Key Exchange)和IPsec (Internet Protocol Security)。
- Daemon Monitoring System,HA守护进程监控系统提供了守护进程的崩溃恢复和主动健康检查。
- VRRP( Virtual Router Redundancy Protocol,虚拟路由器冗余协议)是一种容错协议,它保证当主机的下一跳路由器出现故障时,由另一台路由器来代替出现故障的路由器进行工作,从而保持网络通信的连续性和可靠性。
6WINDGate VRRP控制平面模块为一组路由器提供了一种控制虚拟IPv4和MAC地址的方式,包括自动故障切换机制。这样的地址可以被主机用于某些服务访问,例如作为静态默认网关。使用VRRP的好处是服务的可用性更高,而不需要对终端主机进行自动重新配置。windgate集成了开源的keepalived守护进程。
6windGate的快速路径支持由keepalive守护进程创建的macvtap接口的同步。
- VRRPv2 RFC 3768 (https://tools.ietf.org/html/rfc3768.html)(仅支持IPv4)
- 自动选择主路由器
- 存在优先级高于master的备份服务器时抢占
- 通告间隔(表示master仍在服务)从1到255秒
- 支持创建多个VRRP备份组并同步VRRP备份组:属于不同组的路由器在任何组中的状态都是一样的(master或backup)
- VRRPv1 RFC 2338中定义的认证方式(Simple Text Password或IP Authentication Header)(https://tools.ietf.org/html/rfc2338.html)
- 使用SNMP进行远程管理
7. 6WINDGate使用环境
参考文档:
- SR-IOV是什么?性能能好到什么程度? - 知乎 (zhihu.com)
可以在Bare metal
, Virtual machines
, Containers
等三类设备中使用。
BARE METAL,裸机,原生物理机环境:
- 6WINDGate可用于裸金属环境。所有的Linux资源都可以被6WNDGate直接访问和使用。例如,6WINDGate DPDK直接与网卡的物理驱动接口。
虚拟机:
上图显示了如何在虚拟机中使用6WINDGate。每个虚拟机都有自己的专用Linux内核,并嵌入一个完整的6WINDGate实例。建议使用SR-IOV绕过和消除虚拟化环境(本例中为KVM)的性能瓶颈。实际的物理网卡被拆分为多个Eth-VF (Virtual Functions),这些Eth-VF绑定并专用于虚拟机。Fast Path通过6WINDGate DPDK与eth - vf直接交互。
容器中使用:
下图显示了如何在容器中使用6WINDGate。容器是隔离在Linux网络名称空间(netns)中的用户应用程序,共享单个Linux内核。与VM部署类似,建议使用SR-IOV将vf专用于容器实例,以获得最佳性能。
上图显示了如何在虚拟机中使用6WINDGate。每个虚拟机都有自己的专用Linux内核,并嵌入一个完整的6WINDGate实例。建议使用SR-IOV绕过和消除虚拟化环境(本例中为KVM)的性能瓶颈。实际的物理网卡被拆分为多个Eth-VF (Virtual Functions),这些Eth-VF绑定并专用于虚拟机。Fast Path通过6WINDGate DPDK与eth - vf直接交互。