在共享和专用 VPC 环境中扩展工作负载
本教程可能会发生成本。 使用“成本估算器”根据您的预计使用量生成成本估算。
本教程将指导您完成在共享 (多租户) 环境和专用 (单租户) 环境中设置隔离工作负载的步骤。 供应 IBM Cloud® Virtual Private Cloud (VPC) 以及跨多个可用性区域 (AZs) 和虚拟服务器实例 (VSI) 的子网,这些子网可根据您的需求进行扩展,以确保应用程序的高可用性。 此外,配置负载均衡器以在一个区域内的区域之间提供高可用性。 为 VPC 配置虚拟专用端点 (VPE),以向 IBM Cloud上的服务提供专用路由。
通过供应专用主机,将加密数据卷连接到 VSI,扩展连接的数据卷以及在事后调整 VSI 大小来隔离工作负载。
您将使用提供 Terraform-as-a-Service 功能的 IBM Cloud Schematics来供应所有这些服务和 VPC 资源。 Terraform 模板定义要创建,更新或删除的 IBM Cloud 资源。
目标
- 了解如何使用实例自动缩放来设置多专区 VPC。
- 了解公共和专用负载均衡的概念。
- 了解如何动态或定期扩展实例。
- 了解专用主机的使用。
{: caption="*
- 部署在 VSI 上的前端应用程序通过专用负载均衡器与后端应用程序通信。
- 后端应用程序通过虚拟专用端点 (VPE) 安全地与云服务通信。
- 随着应用程序上的负载增加,将启用 VPC 的缩放,并根据 CPU,RAM 等指标或通过调度的缩放来动态添加或除去 VSI。
- 随着作用域的扩大,专用主机将隔离并对数据执行大量计算。 通过根据您的需求更新概要文件来调整专用主机上的实例大小。 此外,扩展块存储卷容量。
- 所有实例都使用虚拟专用端点 (VPE) 通过专用主干与 IBM Cloud 服务进行通信。 有关更多详细信息,请参阅 关于虚拟专用端点网关 主题。
准备工作
本教程需要:
- IBM Cloud 计费帐户。
- 具有
curl
的本地 shell。
启用日志记录和监视
- 将IBM Cloud Logs实例配置为IBM Cloud Logs Routing 的目标。 请参阅 开始使用IBM® Cloud Logs Routing
- 配置用于收集平台指标的Monitoring实例。 参见 启用平台指标
供应必需的云服务
在此部分中,您将使用 IBM Cloud Schematics创建应用程序所需的以下云服务: IBM Cloud Databases for PostgreSQL 和 IBM Cloud Object Storage。
- 浏览至 Schematics 工作空间,单击 创建工作空间。
- 在 Specify Template 部分,提供
https://github.com/IBM-Cloud/vpc-scaling-dedicated-host
下的 GitHub 或 GitLab 版本库 URL。 - 选择 terraform_v1.5 作为 Terraform 版本,然后单击 下一步。
- 在 Specify Template 部分,提供
- 在 工作空间详细信息下,
- 提供工作区名称:"
vpc-scaling-workspace
。 - 选择
Resource Group
和Location
。 - 点击下一步。
- 提供工作区名称:"
- 验证详细信息,然后点击创建。
- 在 变量下,通过单击行>“编辑”中的操作菜单将
step1_create_services
设置为 true,取消选中 使用缺省值,从Override Value
下拉列表中选择 true,然后单击 保存。 - 设置要覆盖的任何其他变量,最典型的变量是
region
和resource_group_name
。 - 滚动到页面顶部,单击生成计划。 这与
terraform plan
命令相同。 - 单击 显示更多 以检查要供应的资源。
- 使用面包屑菜单浏览到工作空间页面,然后单击 应用计划。 请检查日志以查看所创建服务的状态。
浏览至 资源列表。 在此处,您可以按用于创建资源 (即 vpc-缩放) 的 basename
进行过滤,您将看到在您指定的资源组中供应的本教程所需的云服务。 使用这些服务存储的所有数据都会使用生成的密钥进行加密,并存储在 IBM Key Protect for IBM Cloud中。
设置多专区虚拟私有云
在此部分中,您将执行以下操作:
- 配置一个IBM Cloud® Virtual Private Cloud(VPC),子网跨越两个区域。 为了确保前端应用程序和后端应用程序的高可用性,您将在这些区域中创建多个 VSI。
- 为前端配置公共负载均衡器,为后端应用程序配置专用负载均衡器,以在专区之间提供高可用性。
- 创建用于在实例组中供应实例的实例模板。
最初,您可能不会部署所有基础架构资源以使其扩展,即使以这种方式进行设计也是如此。 您只能从一个或几个实例开始,如下所示。
随着负载增加,您可能需要更多实例来处理流量。 您可以为前端应用程序配置公共负载均衡器,为后端应用程序配置专用负载均衡器,以在实例之间平均分发入局请求。 通过负载均衡器,您可以为与实例关联的池成员配置特定运行状况检查。
需要实例模板,然后才能创建用于自动缩放的实例组。 实例模板定义了为实例组创建的虚拟服务器实例的详细信息。 例如,指定映像模板的概要文件 (vCPU 和内存),映像,连接的卷和网络接口。 此外,指定了 user data
以分别自动运行前端和后端应用程序所需的 初始化脚本。 为实例组创建的所有 VSI 都使用实例组中定义的实例模板。 该脚本供应实例模板和实例组 (一个用于前端,一个用于后端),但尚未定义自动缩放策略。 此示例不需要数据卷,因此会在 modules/create_vpc/autoscale/main.tf ibm_is_instance_group 资源中注释掉这些卷。
VPC 使用 cloud-init 技术来配置虚拟服务器实例。 VPC 页面的新虚拟服务器上的 user data
字段允许用户使用 cloud-init 来放入定制配置选项。
供应资源
如果要稍后直接访问 VSI,那么可以选择 创建 SSH 密钥 并将 ssh_keyname
设置为 VPC SSH 密钥的名称。
-
转至 Schematics 工作空间的 设置 选项卡,单击
step2_create_vpc
的操作菜单,取消选中 使用缺省值,将覆盖值更改为 true 并 保存 设置。 -
单击 应用套餐 以供应 VPC 资源。
供应 VPC 资源时涉及多个 Terraform 模块。 为了更好地理解,请检查 main.tf 文件。
-
通过单击 显示更多来关注状态日志。 应用成功后,您应该会看到供应了以下资源:
-
VPC
-
两个子网 (每个专区一个子网)
-
具有 安全组 的公共负载均衡器,可将流量驱动到前端应用程序
-
具有安全组的专用负载均衡器,用于将请求从前端驱动到后端
-
实例模板和实例组,用于供应和缩放实例
-
最初,两个 VSI (一个前端实例和一个后端实例) 连接了各自的安全组
前端实例运行 Nginx 服务器以提供 PHP Web 应用程序,该应用程序与后端通信以存储和检索数据。 后端实例使用 IBM Cloud Databases for PostgreSQL 和 IBM Cloud Object Storage的 GraphQL API 包装器运行 Node.js 应用程序。
-
-
从日志输出 复制 公共负载均衡器主机名,并通过在浏览器中添加前缀
http://
来粘贴该主机名,以查看前端应用程序。 如下图所示,输入余额 e.g.,10,然后单击 提交 以查看为请求提供服务的 VSI 的详细信息。查看应用程序 要检查供应的 VPC 资源,可以将 VPC UI 或 Cloud Shell 与 ibmcloud is 命令配合使用。
在下一部分中,您将选择缩放方法 (静态或动态) 并创建缩放策略。
增加实例上的负载以检查缩放
在此部分中,您将开始使用初始设置为 静态的缩放方法来缩放实例。 然后,通过设置实例管理器和实例组管理器策略,使用 动态 缩放来缩放实例。 根据您定义的目标利用率指标,实例组可以动态添加或除去实例以实现指定的实例可用性。
手动缩放
- 要检查 静态 缩放方法,请浏览到 Schematics 工作空间的 设置 选项卡,以查看
step3_is_dynamic
变量是否设置为false
。 - 将
step3_instance_count
变量更新为2
并 保存 设置。 - 应用计划以查看供应的额外两个实例 (一个前端 VSI 和一个后端 VSI)。
- 在前端 实例组 的 成员资格 选项卡下,您现在应该会看到
2
实例。 - 浏览至显示前端应用程序的浏览器,然后单击 刷新 按钮或多次 提交 新的平衡,以查看前端 VSI 和后端 VSI 为请求提供服务的详细信息。 您应该会看到四个 VSI 中的两个为您的请求提供服务。
- 在移至下一步之前,请将
step3_instance_count
变量从2
更新为1
,并 保存 设置。
您可以稍后在教程中检查日志并监视负载均衡器。
自动缩放
-
要切换到 动态 缩放方法,请将
step3_is_dynamic
变量设置为 true,保存 设置并 应用 计划。 此设置将实例组管理器和实例组管理器策略添加到现有实例组,从而将实例组缩放方法从static
切换到dynamic
。缩放实例 -
要检查自动缩放功能,可以对应用程序使用负载生成器。 以下 shell 脚本模拟 90000 个请求的基本负载,最多并行 300 个请求。
-
打开本地终端。
-
为上述步骤中的公共负载平衡器 URL 创建一个 shell 变量,并附加
/v1/controller/balance.php
。export APPURL=http://<load-balancer>/v1/controller/balance.php
-
运行以下脚本以生成一些装入。 您可以重复此操作以创建更多流量。 该
[1-1000]
要求每次curl调用都进行相同数量的GET。--retry
将捕捉seq
命令中的每个数字。seq 1 1000 | xargs -n1 -P100 curl -s $APPURL/"[1-1000]" -o /dev/null --retry
-
-
在 实例组 的 成员资格 选项卡下,您应该会看到正在供应新实例。
当最大成员资格计数设置为
5
时,您最多应该会看到 5 个实例正在进行装入。 可以在实例组的Overview
选项卡下检查最小和最大实例组大小。 -
浏览到浏览器,其中显示前端应用程序并多次 提交 平衡,以查看前端 VSI 和后端 VSI 为请求提供服务的详细信息。
等待实例缩放,因为聚集时间段设置为
90 seconds
,冷却时间段设置为120 seconds
。 -
请等待实例扩展至
1
,然后再移至下一步。
调度的操作 (可选)
在此部分中,您将使用 VPC 的调度缩放来调度根据每日,间歇或季节性需求自动添加或除去实例组容量的操作。 您可以创建多个调度操作,这些操作可按月,按周,按日,按小时甚至按设定的分钟数来扩展容量。 此部分是可选的,不需要完成本教程的其余部分。
- 要创建一次性调度操作,请将
step3_is_scheduled
变量设置为 true,保存 设置并 应用 计划。 - 在实例组的 已调度操作 选项卡下检查已调度操作的状态。 Terraform 模板将在应用计划后的 5 分钟内调度操作。 当操作状态更改为
completed
时,实例组大小将设置为最少2
个实例,最多5
个实例。 您应该会在实例组的 成员资格 选项卡下看到2
实例。 - 单击几次 生成装入 以生成更多流量,以查看实例大小达到最大
5
。
监视 Load Balancer for VPC 度量
负载均衡器会计算度量值,并将这些度量值发送到监视实例,这反映了不同类型的使用和流量。 您可以从 IBM Cloud Monitoring 仪表板对度量进行可视化和分析。
- 您可以从“VPC 的负载均衡器”页面监视负载均衡器,
- 点击负载平衡器的名称。
- 在负载均衡器的
Monitoring preview
磁贴下,单击 启动监视。
- 或者,您还可以通过浏览至“可观察性”页面并单击左侧窗格上的 监视 来监视负载均衡器
- 点击实例
- 单击标记为
Platform metrics
的实例旁边的 打开仪表板。 - 单击左侧边栏上的 仪表板 以打开“IBM Load Balancer for VPC 监视度量”仪表板。
- 在“仪表板”模板下,展开 IBM > Load Balancer for VPC Monitoring Metrics。 缺省仪表板不可编辑。
- 请记住针对应用程序生成负载。
检查日志
VPC 服务在其可用的区域中生成平台日志。 平台日志是IBM Cloud中启用日志功能的服务和平台暴露的日志。 有关更多信息,请参阅配置 IBM Cloud平台日志
- 导航至 Observability 页面,单击左窗格中的日志 > 实例。
- 单击窗格顶部的云日志
- 单击先前配置的实例旁边的“打开仪表板” 以捕获日志。
- 单击左侧工具选择器上的探索日志 > 日志。
- 在搜索栏中粘贴负载平衡器 CRN,即可查看日志。
有关检查其他 VPC 资源的日志,请参阅 VPC 日志记录。
设置专用主机并使用加密数据卷供应 VSI
供应专用主机将产生成本。 使用“成本估算器”根据您的预计使用量生成成本估算。
在本部分中,您将在组中创建专用主机,并使用加密数据卷供应实例。
创建专用主机的原因是要创建单租户计算节点,而该节点不受组织外部用户的限制。 在该专用空间内,您可以根据需要创建虚拟服务器实例。 此外,您可以创建包含用于特定用途的专用主机的专用主机组。 由于专用主机是单租户空间,因此只有帐户中具有所需许可权的用户才能在主机上创建实例。
-
浏览至 Schematics 工作空间的 设置 选项卡,将
step4_create_dedicated
变量更新为 true 并 保存 设置。 -
单击 应用套餐 以供应以下资源:
- 专用主机组
- 专用主机
- 具有加密数据卷 (使用 IBM Key Protect for IBM Cloud进行加密) 并连接了安全组的 VSI。
添加专用主机 -
从日志输出中,复制 实例 IP 地址并启动 Cloud Shell,以通过将占位符
<IP_ADDRESS
> 替换为实例 IP 地址来运行以下命令export INSTANCE_IP=<IP_ADDRESS>
通常,您不会为实例设置公共 IP (浮动 IP)。 在这种情况下,会将浮动 IP 设置为允许对实例上部署的应用程序执行 curl 操作。
-
发出以下 curl 命令来查询数据库。 在实例上运行的应用程序将通过专用端点从 Databases for PostgreSQL 读取内容。 这些数据与前端应用程序中提供的数据相同。
curl \ -s -X POST \ -H "Content-Type: application/json" \ --data '{ "query": "query read_database { read_database { id balance transactiontime } }" }' \ http://$INSTANCE_IP/api/bank
-
发出以下 curl 命令以查询 COS 存储区。 在实例上运行的应用程序将从 Object Storage 中读取内容,并以 JSON 格式返回结果。 存储在 COS 中的数据仅可用于从专用主机上的实例运行的应用程序。
curl \ -s -X POST \ -H "Content-Type: application/json" \ --data '{ "query": "query read_items { read_items { key size modified } }" }' \ http://$INSTANCE_IP/api/bank
-
一次性发出以下 curl 命令以查询数据库和 COS 存储区。 在实例上运行的应用程序将从 Databases for PostgreSQL 和 Object Storage 中读取内容,并以 JSON 格式返回结果。
curl \ -s -X POST \ -H "Content-Type: application/json" \ --data '{ "query": "query read_database_and_items { read_database { id balance transactiontime } read_items { key size modified } }" }' \ http://$INSTANCE_IP/api/bank
调整 VSI 大小并扩展专用主机上的连接块存储卷
如果您已观察到在专用主机上供应的实例的概要文件,那么会将其设置为 cx2-2x4
,其中 c
表示具有 2 vCPUs 和 4 GiB RAM 的 Compute 系列 (类别)。 在本节中,您将把配置文件更新为 cx2-8x16
8 vCPUs, 16 GiB 内存,从而调整实例的大小。
在此部分中,您还会将连接到 VSI 的块存储卷从 100 GB 扩展至 250 GB。 要了解所选卷概要文件的最大容量,请选中 扩展块存储卷容量
调整 VSI 的大小
-
要调整 VSI 的大小,请浏览到 Schematics 工作空间的 设置 选项卡,将
step5_resize_dedicated_instance
变量更新为 true 并 保存 设置。只能将虚拟服务器调整为受托管实例的专用主机支持的概要文件。 例如,使用来自 Compute 系列的概要文件供应的虚拟服务器可以将大小调整为同样属于 Compute 系列的其他概要文件。 有关概要文件的更多信息,请参阅 实例概要文件。
-
应用计划 以将实例大小从
2 VCPUs | 4 GiB RAM
调整为8 VCPUs | 16 GiB RAM
。 -
您可以通过启动 Cloud Shell 来检查实例的概要文件,将区域更改为使用
ibmcloud target -r us-south
命令供应 VPC 的区域,然后运行ibmcloud is instances
命令,或者通过单击专用实例名称从 VPC 的虚拟服务器实例 UI 执行此操作。
扩展块存储卷容量
- 要扩展附加块存储卷的容量,请浏览至 Schematics 工作空间的 设置 选项卡,将
step5_resize_dedicated_instance_volume
变量更新为 true 并 保存 设置。 - 应用套餐 以将块存储卷容量从
100 GB
增加到250 GB
。 - 您可以通过单击专用实例名称从 VPC 的虚拟服务器实例 UI 检查
Data volume
的大小。
后续步骤?
通过配置 SSL 终止,粘性会话和端到端加密来扩展方案。 有关更多信息,请参阅此 博客帖子。
除去资源
要除去 Schematics 工作空间及其资源,请执行以下步骤:
- 浏览至 Schematics 工作空间并选择工作空间。
- 单击 操作 ... 下拉列表,然后单击 销毁资源 以清除通过 Schematics供应的所有资源。
- 单击 操作 ... 下拉列表,然后单击 删除工作空间 以删除工作空间。
根据资源的不同,可能不会立即将其删除,但会保留 (缺省情况下为 7 天)。 您可以通过永久删除该资源或在保留期内将其复原来回收该资源。 请参阅本文档,以了解如何 使用资源回收。