搜索
快捷导航

[中医养生] 软件定义存储解决方案 如何构建SDS大规模测试环境?

0
回复
2712
查看
[复制链接]

1万

主题

1万

帖子

8万

积分

临时会员

Rank: 10Rank: 10Rank: 10

积分
88968
发表于 2020-3-30 21:57:25 | 显示全部楼层 |阅读模式
  
  SDS的一大特点就是规模大,软件定义存储解决方案集群内的硬件资源和软件资源都很多,比如超过100个节点和500个硬盘是很常见的。所以我们需要有大规模的环境来实际测试我们的产品。
  XSKY目前在本地office和远端IDC数据中心架设了庞大的各类品牌服务器资源,搭建了从千兆,万兆,100G,到FC不同的复杂网络环境,用作SDS的大规模测试。但即便如此,大量的SDS自动化测试仍然需要更加灵活、经济的方式。 006lZQqGly4g0bhvux9u9j30m80gogm2.jpg
  都使用物理机来搭建大规模集群,不仅成本太高,而且不灵活。所以,我们开发了Endurance项目,通过使用公有云来构建大规模的测试环境。
  图片来源网络图片来源网络
  开发Endurance之前,我们也考虑过用公有云的formation工具来实现环境部署功能,例如AWSCloudFormation。但是这些formation工具基本只能做到公有云资源的操作,而且主要是用于创建资源。我们不仅需要创建资源,还需要灵活的控制资源,并且能够跟踪整个资源的生命周期。因此,我们决定自己开发一套系统来满足自己的需求。
  一、Endurance的架构
  Endurance由一个controller和多个agent组成,controller负责测试环境的管理,agent则部署到每个虚拟机上,接受controller发送的命令并执行对应的操作。Endurance的部署架构如下:
  每个测试集群采用VPC进行网络隔离。Endurancecontroller的主要职责包括:
  虚拟机管理
  虚拟网卡管理
  云硬盘管理
  SDS版本部署
  SDS系统的服务器、硬盘、存储池的创建
  部署性能监控组件
  Endurance的agent主要职责包括:
  1、执行controller下发的任务,包括:
  安装SDS
  环境配置
  2、提供RPC接口让测试用例可以注入故障,比如
  kill执行的进程
  控制硬件状态
  在使用Endurance创建测试环境之前,我们会先把公有云的信息添加到它的数据库中,比如账号、虚拟机镜像、VPC和subnet等。因为网络规划需要统一,所以Endurance使用的VPC和subnet都是事先创建好的,在请求建立一个测试环境时,只需要选择SDS不同网络所需要的网段即可。
  当我们需要创建一个测试环境时,流程如下:
  1、通过一个YAML文件提交测试环境请求给controller
  2、controller解析YAML文件,根据指定的要求准备好测试环境,主要步骤包括:
  使用指定镜像创建虚拟机,并且配置好网络。
  安装Enduranceagent到虚拟机上。
  创建指定规格的云硬盘,并且挂载到指定的虚拟机。
  配置好虚拟机的环境。
  安装SDS软件。
  调用SDS的API添加服务器、硬盘,以及创建存储池。
  这样,我们就有了一个可以进行测试的大规模集群。随后,就可以运行指定的自动化测试用例,这些用例不仅可以通过SDSAPI来操作集群,还可以通过Enduranceagent提供的RPC来执行很多操作底层的操作,例如故障注入等。
  测试环境YAML文件示例
  测试环境YAML文件示例
  启动测试环境构建启动测试环境构建
  Endurance构建测试环境的过程Endurance构建测试环境的过程
  当使用Endurance创建了一个环境时,可以选择开启性能监控组件。开启之后,Endurance会安装一个带外的Prometheus以及相应的exporter来收集性能数据,也会安装Jaeger并开启管里面的tracing功能来收集管理面操作的性能数据。
  在测试用例运行完成之后,只要告诉Endurance拆除指定的测试环境,Endurance就会清除所有的虚拟机和云硬盘。
  二、AWS中使用多个网卡的问题
  我们的SDS虽然可以管理大部分的系统硬件和配置,但是网络是需要事先配置好的。SDS最多可以支持4个网络,所以我们的EC2instance也需要配置多个不同的虚拟网卡(ENI),并且给每个ENI配置不同的静态地址和子网,一个EC2instance上的不同ENI会分别加入同一个VPC的不同subnet。在我们的设计中,Endurancecontroller是通过虚拟机的管理网络的地址来ssh到虚拟机上。
  当我们为EC2实例配置多个ENI时,我们遇到了一个网络问题:如果像物理机一样,只是只通过写/etc/sysconfig/network-scripts/ifcfg-nicname来配置网卡的静态地址会导致虚拟机的路由出现问题。这个路由问题的表现大概是这样的,通过管理网进来的报文不会从管理网出去,导致ssh无法通讯。
  这个问题称为AsymmetricRouting。如果你使用的是AmazonLinux,系统自带了ec2-net-utils工具解决了这个问题。如果使用的是Ubuntu,那么也有开源的ec2-net-utils移植项目:https://github.com/ademaria/ubuntu-ec2net来支持。对于CentOS系统,也有人提供了脚本来处理:https://github.com/aureq/aws-toolbox/tree/master/ec2/eni/multi-eni-routing
  我们为了更好的控制网络,通过Enduranceagent来更改网络配置来处理这个问题。要解决这个问题,我们需要使用策略路由,就需要为每个ENI在Linux下配置不同的路由表。下面来看具体的处理:
  假设系统默认的网卡是eth0,我们配置为管理网络,地址为10.10.4.11/24,现在要再添加一个新的网卡eth1,地址为10.10.5.11/24。我们除了要为eth1写ifcfg-eth1这个配置文件以外,还需要增加一个专门的路由表和一个路由规则。
  为eth1创建一个路由表,添加到/etc/iproute2/rt_tables中:
  创建/etc/sysconfig/network-scripts/route-eth1,添加路由到路由表eth1.rt,表示10.10.5.0/24的流量都从eth1出。
  创建/etc/sysconfig/network-scripts/rule-eth1,说明从eth1进来的报文使用路由表eth1.rt。
  通过上面的配置,我们可以指定从eth1网卡进来的子网只从这个网卡返回,不会从其他网卡返回。重启网络服务后,你可以通过ip命令来检查:
  其中iprule显示的路由规则前的数字是规则的优先级,越小优先级越高。
  配置好eth1的策略路由后,我们还需要设置系统的默认网关为eth0,这样从eth0进来的报文才会从eth0返回。通过修改/etc/sysconfig/network来实现:
  CentOS中这个配置文件默认为空,也就是没有指定默认网卡。这样,所有非eth0进来的子网的报文都会从同一个网卡返回,而通过eth0进来的报文,即我们的管理网报文,就会从默认网卡eth0返回。整个网络就打通了。
  三、Endurance的特点
  部署灵活
  可以根据需要部署指定规模和配置的集群。最常用的配置包括CPU、内存、操作系统版本、云硬盘类型、云硬盘大小、云硬盘数量。
  使用方便
  1、通过一个YAML文件就可以指定我们需要的集群信息。
  2、公有云和办公网通过VPN连接在一起,开发和测试都可以轻松访问集群。
  节约成本
  不需要购买物理机,也就没有机房的存放成本、硬件损坏成本以及其他物理机的管理成本。
  集群部署速度快
  整个集群的部署分为两个阶段,部署第一台节点和部署其他节点。
  公有云平台启动一个虚拟机大约需要3分钟,我们安装SDS软件大约需要5分钟,再加上一些其他的操作,我们的第一个阶段会在10分钟内完成。
  第二个阶段的虚拟机是并发创建和安装的,所以不论要添加多少台节点,第二个阶段一般都在10分钟内完成。
  所以,一般我们只需要20分钟就可以创建一个测试集群,并且所有的机器都会添加到集群中。
  与测试用例集成方便
  Endurance的YAML模板提供了直接执行测试用例的能力,可以在测试环境部署好之后直接开始执行测试用例,通过协商好的配置文件把集群的信息提供给测试用例。
  另外,Enduranceagent提供的RPC用于操作集群的软硬件,测试用例可以减少使用ssh来执行命令,方便测试用例的开发。
  四、总结
  本文整理和归纳了如何基于公有云为SDS构建大规模自动化测试集群的方案和执行过程,并针对这个过程中AWS中使用多个网卡的问题,提出了解决方案。
  随着各行业用户对SDS的大规模采用,集群数量和规模持续扩大,以及SDS功能的不断丰富和演进,XSKY开发的Endurance提供了经济、高效、灵活的超大规模自动化测试手段,为用户持续打造高可靠、稳定的SDS产品“保驾护航”。​​​​
高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

关注我们:在海一方社区

官方微信

手机版

服务热线:

0518-81188805

Copyright   ©2018-2020  在海一方社区  Powered by©Discuz!
点击这里给我发消息

苏公网安备 32070502010009号

苏ICP备18058170号