0x01 前言

最近在对接港交所的衍生产品市场,这是通过物理专线连接,直接从港交所接收组播数据,获取第一手数据的一款产品。而在正式开通服务前需要进行一系列测试、产品对接等工作,紧接着还需要经过港交所的验收后才能申请开通正式服务接收数据。

目前处于前期的调试阶段,港交所提供了可本地部署的系统测试辅助工具,通过这套工具可以通过重放数据的方式来模拟正式环境。而我一侧的环境是基于VMware的虚拟化环境,基础设施是清一色的华为,因此配置起来与裸金属的部署方式多了虚拟化的环节。

相关文档可以从下面的链接找到:

这篇文章会用到以下文档:

0x02 基本信息及架构

从上面链接中还可以找到以下文档,内有较为详细的架构:

  • 「香港交易所领航星」巿场数据平台接驳指南-衍生产品市场数据(版本1.14)

港交所一侧的架构图如下:

港交所有两套集群,分别是Primary与Backup;两个集群中都有重传服务器,也就是图中的Re-transmission;不同集群中都有两套组播源,分别对应用户上一层的SDNet路由器。可以留意下Client Server上一层中的SDNet Link A和Link B所转发的组播段。

港交所也要求SDNet中的两台路由器必须使用主备模式,路由器之间通过心跳线检测存活情况,客户侧的网关IP为虚拟IP,由客户自行检测SDNet路由器的存活情况以便确认使用哪条线路。当我们需要接收某个产品的数据时,只需要加入对应的组播组即可。

其实从SDNet路由器开始往上都不需要我们调整,我们只需要负责Client Server的部分即可。因为涉及到组播,又因为港交所对服务的可靠性有强制性要求,所以必须要做到网络服务稳定可靠。On-Boarding Tools User Guide中的模拟环境架构图如下:

从上图中可以看到有两种方案,主要差别是重传服务器与私有化服务器是否在同一台服务器上,为了最大程度模拟真实环境,我选择第二种架构。其实不严谨来说,两者是差不多的。

这里需要讲解下基本的架构,在正常情况下,数据会从主集群通过组播的方式向外发送,但也有可能会因为网络问题等诸多因素导致数据中断,这时候的业务系统就会访问RTS Simulator申请重传某个时间段的数据。而这个RTS Simulator也就是Re-transmission服务器会缓存一个时间段内的全部数据,当我们有需要的时候就通过TCP协议进行通讯,因为重传要保证可靠性。

回到测试架构图,可以看到Tcpreplay重放服务器作为组播源对外发送数据,RTS Simulator和业务系统分别都需要加入组播组以接收数据,当网络出现故障时,业务系统会通过TCP协议向RTS Simulator请求缺失的数据,简单明了。

现在再深入一层,加入VMware虚拟化架构与华为的交换机和路由器,架构如下:

实际的架构如上图,两个集群间用路由器互联,路由器下面的部分为真实环境的HKEX。因为集群中使用VMware的SDN软件,也就是NSX,所以配置起来会比一般架构多些NSX Edge的配置步骤。另外,从安全层面来看,华为路由器的部分也需要进一步配置,需要精细化控制组播源IP以及接收者,这部分工作既需要在华为路由器中配置,也需要在NSX防火墙中配置,以确保数据安全。

0x03 OMD测试组件部署

本节中所用到的所有软件及数据包均需要通过邮件向HKEX索取。

0x03.1 网络部署

这里使用VMware NSX和VMware vCloud,所以配置起来会比较繁琐。首先到集群1中的华为交换机配置相关vlan并放行相关vlan:

为了与生产流量区分开,所以需要另开vlan并在vCloud中添加其为外部网络,此时需要到vCenter中添加一个vDPG:

完成后即可到vCloud中添加外部网络:

添加外部网络的时候需要填写网关,这个网关也就是后面创建Edge的网关,建议为外部网络配置静态IP池,方便添加Edge的时候自动配置IP。完成后需要到路由器中添加对应的vlan,并在该端口中配置IP,这个IP就是刚刚在vCloud中配置的外部网络的网关:

在这里可以看到路由器的端口配置中含有igmp相关的信息。

接下来需要添加OVDC,如果有需要,还可以新建独立的PVDC。进入OVDC租户门户中添加Edge:

然后在该Edge下新建网络并配置静态IP池以便后续实现自动开设虚拟机:

紧接着来到vCenter,进入该Edge的配置界面,按需配置OSPF或iBGP,以便将上一步中配置的网络IP网段传播到华为路由器,因为组播的前提是各个网段的单播需要互通:

完成后需要到路由器上确认路由情况:

可以看到上面有4个IP段,这是因为Cluster2也已经完成配置,相关的路由也已经传播到路由器。

最后来到多播页面,将多播功能打开:

对于依赖VMware的组播,有一些局限性和特性,具体可以留意以下文档:

将上面的步骤在Cluster2中执行一遍。至此,网络配置工作已完成。

0x03.2 Tcpreplay部署

按前文所说的,我们至少需要准备3台虚拟机分别用于Tcpreplay、RTS Simulator和作为接收者的VM。回到vCloud创建虚拟机即可,在这里我是用Debian:

完成后即可参照文档进行部署。首先将以下文件上传至Tcpreplay虚拟机:

在执行前需要执行以下命令安装相关软件:

紧接着将数据包解压并放在cannedDataLocalizingTool目录下的pcap文件夹内,最后执行以下命令即可:

数据包为50G,因为需要重写IP及MAC地址,建议将其放在IO性能较优及CPU性能较好的虚拟机中执行:

完成后会在pacp目录下生成两个新文件:

最终执行以下命令即可重放数据:

当然,还可以用screen让其在后台执行:

执行命令后可以通过iftop看到相关流量:

至此,Tcpreplay服务的部署工作已完成。

0x03.3 RTS Simulator部署

来到RTS Simulator虚拟机,将以下文件解压并将其放置到指定位置:

然后修改配置文件:

分别修改Point B、C和D:

其中Point B中的两个IP可以一致,完成后保存即可。

在运行RTS Simulator前请确认虚拟机的内存在4G或以上,建议使用6G或8G内存,然后执行以下命令:

确认服务是否正常:

此外,你可能还需要编辑配置文件以便缓存合适的组播地址。于此同时,可以在Tcpreplay服务器上执行重放命令,然后在RTS Simulator服务器中检查流量情况,如果能收到则说明一切正常。

至此,RTS Simulator的配置工作已完成。

0x04 检查及测试

因为是途径路由器的跨集群组播,所以可以在路由器中检查相关信息,首先是邻居:

然后是rp info

可以注意到,上面的两个RP IP均是Edge网关的IP。紧接着检查路由情况:

可以留意到00002路由中的源地址为Tcpreplay虚拟机的IP。

接着来到集群2中使用vCloud创建一台虚拟机用于接收集群1中Tcpreplay虚拟机的组播数据,在这里需要借助smcroutectl这个命令,在需要加入组播组的虚拟机中执行以下命令安装:

完成后分别执行以下命令加入组播组:

然后执行以下命令检查所加入的组播组:

完成后再使用iftop命令在Cluster2上的测试机检查流量情况:

至此,所有配置均已完成。

0x05 结语

以上仅是初步配置,还需要进一步微调,另外还需要通过ACL及Policy等配置进一步提升安全性,避免因意外导致数据流入其他集群或环境。

针对VMware文档中所指出的一些缺陷及局限性,还需要进一步测试及调整以提升服务可靠性。