我们使用机器学习技术将英文博客翻译为简体中文。您可以点击导航栏中的“中文(简体)”切换到英文版本。
在云端构建云:在亚马逊 EC2 上运行 Apache CloudStack,第 2 部分
本博客由 SDE II — 客户工程 亚马逊云科技 的马克·罗杰斯撰写。
在
如果你还没有读过,那么从
让事情变得更容易
我写
可扩展的方法
正如我上一篇文章中所述,我们的团队最初使用单个 EC2 实例。起初这行得通,但它没有我们需要的容量。我们仅限于几十个 VM,但我们需要数百个。我们还需要根据需求的变化扩大和缩小规模。这意味着我们需要能够添加和删除 CloudStack 主机。使用 Linux 网桥作为虚拟子网已经不够了。
为了支持添加主机,我们需要一个跨越多个实例的子网。我找到的解决方案是
叠加网络的另一个示例是亚马逊 VPC。它的行为就像物理网络,但实际上是其他网络之上的一层。一直都是网络。VXLAN 提供了一个顶层,CloudStack 可以舒适地坐在那里,处理您的所有虚拟机需求,幸福地不知道下方的世界。
叠加网络具有一些很大的优势。最大的改进是你可以拥有多台主机,允许水平扩展。拥有更多主机不仅可以为您提供更多的计算能力,还可以让您进行滚动维护。我将向您展示如何使用
EC2 实例
让我们从三个亚马逊 EC2 实例开始。一个将是覆盖网络和您的亚马逊 VPC 之间的路由器,第二个将是您的 CloudStack 管理服务器,第三个将是您的虚拟机主机。您还需要一种连接到实例的方法,例如堡垒主机或 VPN 终端节点。
路由器不需要太多的计算能力,但需要足够的网络带宽来满足您的需求。如果您将 Amazon EFS 与您的实例放在同一个子网中,则它们将直接与其通信,从而减少路由器的负载。确定所需的网络吞吐量,然后选择合适的 Nitro 实例类型。
创建路由器实例后,将 亚马逊云科技 配置为将其用作路由器。停止在实例的网络设置中检查源/目标。然后更新适用的 亚马逊云科技 路由表,使用路由器作为覆盖网络的目标。路由器的安全组需要允许从虚拟机进入 CloudStack 用户界面(TCP 端口 8080)和您计划提供的任何服务。
对于管理服务器,您需要一个
除了是 Nitro 类型之外,主机实例还必须是
联网
所有实例都应位于专用子网上。与其他实例共享子网可能会导致通信问题。有关示例,请参阅下图。子网中有一个名为 TroubleMaker 的实例,该实例不在叠加网络上。如果 TroubleMaker 向管理实例的叠加网络地址发送请求,则会发生以下情况:
- 该请求通过 亚马逊云科技 子网发送到路由器。
- 路由器通过覆盖网络转发请求。
- CloudStack 管理实例与 TroubleMaker 所在的同一 亚马逊云科技 子网建立了连接。因此,它直接响应,而不是使用路由器。这不是 亚马逊云科技 所期望的返回路径,因此响应被删除了。
如果您将 TroubleMaker 移至不同的子网,则请求和响应都将通过路由器。这将解决通信问题。
重叠网络中的实例将使用用作 VXLAN 隧道端点 (VTEP) 的特殊接口。VTEP 必须知道如何通过底层网络相互联系。你可以手动为每个实例提供所有其他实例的列表,但这是一场维护方面的噩梦。最好让 VTEP 发现对方,他们可以使用多点传送来做到这一点。您可以
以下是使 VXLAN 组播正常工作的步骤:
- 创建传输网关时启用多点传送支持。
- 将传输网关连接到您的子网。
- 创建启用 IGMPv2 支持的传输网关多播域。
- 将多播域与您的子网关联。
- 在每个实例上配置 eth0 接口以使用 IGMPv2。以下示例代码显示了如何执行此操作。
- 确保您的实例安全组允许进入 IGMP 查询(来自 0.0.0.0/32 的协议 2 流量)和 VXLAN 流量(来自其他实例的 UDP 端口 4789)。
CloudStack 虚拟机必须连接到与 VXLAN 接口相同的网桥。正如前一篇文章中提到的,CloudStack关心名字。我建议给接口起一个以 “eth” 开头的名称。此外,这种命名惯例告诉CloudStack使用哪个网桥,从而避免了像简单设置中那样的虚拟接口的需要。
以下片段显示我是如何在 CentOS 7 中配置网络的。您必须为这些变量提供值:
-
$overlay_host_ip_address 、 $overlay_netmask 和 $overlay_gateway_ip:使用您正在创建的叠加网络的值。 -
$dns_address :我建议使用VPC IPv4 网络范围的基础 ,再加上两个。 你不应该使用 169.654.169.253,因为 CloudStack 会保留本地链接地址供自己使用。 -
$multicast_address:您希望 VXLAN 使用的多播地址。在多点传送范围内选择不会与其他任何东西冲突的东西。我建议从IPv4 本地作用域 (239.255.0.0/16 ) 中进行选择。 -
$interface_name :VXLAN 应该用来与物理网络通信的接口的名称。这通常是 eth0。
路由器实例的几个步骤与其他实例的步骤不同。注意评论!
yum install -y bridge-utils net-tools # IMPORTANT: Omit the GATEWAY setting on the router instance! cat << EOF > /etc/sysconfig/network-scripts/ifcfg-cloudbr0 DEVICE=cloudbr0 TYPE=Bridge ONBOOT=yes BOOTPROTO=none IPV6INIT=no IPV6_AUTOCONF=no DELAY=5 STP=no USERCTL=no NM_CONTROLLED=no IPADDR=$overlay_host_ip_address NETMASK=$overlay_netmask DNS1=$dns_address GATEWAY=$overlay_gateway_ip EOF cat << EOF > /sbin/ifup-local #!/bin/bash # Set up VXLAN once cloudbr0 is available. if [[ \$1 == "cloudbr0" ]] then ip link add ethvxlan0 type vxlan id 100 dstport 4789 group "$multicast_address" dev "$interface_name" brctl addif cloudbr0 ethvxlan0 ip link set up dev ethvxlan0 fi EOF chmod +x /sbin/ifup-local # Transit Gateway requires IGMP version 2 echo "net.ipv4.conf.$interface_name.force_igmp_version=2" >> /etc/sysctl.conf sysctl -p # Enable IPv4 forwarding # IMPORTANT: Only do this on the router instance! echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf sysctl -p # Restart the network service to make the changes take effect. systemctl restart network
存储
让我们来看看存储。使用 MySQL 8.0 引擎创建
我推荐使用亚马逊 EFS 进行文件存储。为了提高效率,请使用您的 EC2 实例在子网中创建挂载目标。这将使它们能够直接与挂载目标通信,从而绕过覆盖网络和路由器。请注意,系统虚拟机将通过路由器使用 Amazon EFS。
如果你愿意,你可以整合你的 CloudStack 文件系统。只需创建一个文件系统,其中包含每个区域和存储类型的目录。例如,我使用名为 /zone1/primary、/zone1/secone1/secordy、/zone2/primary 等的目录。您还应该考虑在文件系统上启用预置吞吐量,否则启动几个 VM 后可能会耗尽积分。
文件系统可扩展性的一个后果是,可用空间量(8 艾字节)将导致 CloudStack 中出现整数溢出!为了避免这个问题,请将CloudStack全局设置中的storage.overprovisioning.factor从2减少到1。
当您的环境准备就绪后,
清理
如果你使用我的 CloudFormation 模板,
如果你没有使用 CloudFormation,以下是需要删除的内容:
-
CloudStack
EC2 实例 -
亚马逊 RDS 数据库 和参数组 -
亚马逊 EFS 文件系统 -
传输网关组播域
子网 关联 -
传输网关
组播域 -
传输网关
VPC 附件 -
过
境网关 -
您创建的
路由表 条目 -
您为实例、数据库和文件系统创建
的安全组
结论
我分享的方法有很多步骤,但是当你有计划时,这些步骤还不错。无论您是需要简单的实验设置,还是需要可扩展的环境来迁移数据中心,现在您都有一条前进的道路。试一试,在这里评论一下你学到的东西。我希望你觉得它有用又有趣!
“Apache”、“Apache CloudStack” 和 “CloudStack” 是阿帕奇软件基金会的商标。
*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。