65.9K
CodeProject 正在变化。 阅读更多。
Home

Amazon Web Services第一部分 - 如何部署负载均衡的网站

starIconstarIconstarIconstarIconstarIcon

5.00/5 (11投票s)

2015年3月23日

CPOL

12分钟阅读

viewsIcon

38017

使用AWS Elastic Beanstalk在云中快速创建负载均衡的网站。

引言

在托管网站方面,您有几种选择。您可以从托管公司租用服务器空间。您可以运行自己的服务器。或者,如果您需要能够根据不断变化的流量快速启动/停止服务器,您可以使用云提供商。

在 .Net 领域,最知名的云提供商可能是 Windows Azure。然而,它远非唯一的一个。

Amazon Web Services (AWS) 是一个云提供商,类似于 Azure。它于 2006 年推出,比 Azure 早了 4 年。截至 2014 年底,它在美国、欧洲、亚洲和澳大利亚的数据中心拥有 140 万台服务器。所以它非常庞大。

AWS 提供超过 40 项服务,从虚拟机和负载均衡器到超大规模数据仓库。它文档齐全,并且对 .Net 提供一流的支持,使其成为 Windows Azure 的有力替代品。

在本系列文章中,我们将使用一个带有 SQL Server 数据库的网站,并将其托管在 AWS 上。

为了增加趣味性,这里有一些目标

  • 高可用性 - 即使整个数据中心发生故障,您的网站也能自动恢复并继续运行。
  • 高性能 - 如果营销部门忘记宣传一项大型广告活动,而您的网站突然涌入大量流量,它将通过自动启动更多 Web 服务器进行调整。当流量减小时,它会自动终止它们以节省成本。
  • 您的域名 - 如果您有一个闲置的域名,我们将将其分配给您的网站。否则,我们将使用 AWS 子域名。
  • 现在请 - 您现在应该在一小时内完成。

它看起来会是这样的

我们将在本文中完成蓝色部分(Web 服务器和负载均衡器)。DNS 名称服务器(用于您自己的域名)和数据库将在 后续文章 中介绍。

试用网站

鉴于本文介绍了如何将网站部署到 AWS,如果您想跟着操作,您需要有一个要部署的网站。

如果您有一个现成的网站项目,您可以使用它。MVC 和 WebForms 都可以。

否则,您可以 从 Github 获取我的试用网站 SimpleSite。这个网站不使用数据库。

请确保所有指向 Web 应用程序外部的引用都将 复制本地 设置为 True。这样,它们将包含在您稍后创建用于将网站部署到 AWS 的 应用程序源包 中。否则,由于缺少程序集,您的网站将在启动时崩溃。

特别是对于 NuGet 包,因为它们通常位于项目目录外部的 packages 目录中。框架 dll 应该没问题,因为 AWS EC2 Web 服务器将安装 .Net 框架。

获取 AWS 账户

如果您还没有 AWS 账户,请 创建一个免费账户

请注意,尽管 Amazon 将其称为“免费”账户,但您仍可能产生一些费用——如果您超出使用限制,或者使用不包含在免费套餐中的服务。例如,在本文中,我们将创建一个负载均衡器,它的运行成本很低。

费用

以下是截至 2015 年 3 月,我们将在本文中使用到的服务的价格信息页面。您可能会发现,仅仅是玩玩这些服务,花费不会超过一杯咖啡

价格页面 服务用于
EC2 t2.micro 实例 运行 Web 服务器的虚拟机
弹性负载均衡 负载均衡器
自动伸缩 根据流量负载启动/停止 Web 服务器
弹性伸缩 部署配置

设置区域

AWS 在世界各地设有数据中心。它们分为区域,例如“美国东部(弗吉尼亚北部)”和“欧洲(爱尔兰)”。

登录 AWS 控制台后,选择您所在或距离您最近的区域(页面右上角)。

请注意,SQL Server 数据库的自动故障转移 目前仅在 美国东部(弗吉尼亚北部)、美国西部(俄勒冈)和欧洲(爱尔兰)AWS 区域可用。如果您需要自动故障转移,请选择其中一个区域。

创建密钥对

一旦创建了 EC2 Web 服务器,您就可以登录到它们——使用 RDP,就像任何其他 Windows Server 计算机一样。但是,为了保护您的登录密码安全,AWS 使用 密钥对——公钥用于加密密码,私钥用于解密密码。只有您拥有私钥。

我们将要设置的部署系统将登录到您的 Web 服务器以部署您的网站,因此它需要您的密钥对。这意味着现在是 创建密钥对 的好时机。

  1. 打开 Amazon EC2 控制台:服务 | 计算 | EC2

  2. 在左侧菜单中单击 密钥对

  3. 单击 创建密钥对 按钮并按照说明操作。

请注意,密钥对仅在其创建的区域内有效。因此,当您在其他区域创建 EC2 Web 服务器时,您需要为该区域创建另一个密钥对才能登录该区域的服务器。最简单的方法是坚持使用一个区域。

应用程序源包

为了将您的 Web 应用程序部署到 AWS,您必须将其打包成一个 应用程序源包

我发现 Amazon 的说明并没有给我一个可以在 AWS 上实际工作的应用程序源包。

但是,您只需运行 msbuild 即可为您创建一个有效的应用程序源包,使用以下命令行说明

cd /D "<directory with your .csproj file>"
msbuild <your project>.csproj /t:Package /p:Configuration=Release /p:PackageLocation=. 
    /p:AutoParameterizationWebConfigConnectionStrings=False

这将在当前目录中生成一个 .zip 文件。该 .zip 文件就是您的应用程序源包。

创建 Web 服务器、自动伸缩组和负载均衡器

您的网站将托管在 EC2 虚拟机 上。它们位于 自动伸缩组 中,该组会根据事件(例如一台机器发生故障或机器过载)启动/停止机器。负载均衡器 接收来自浏览器的请求,并将负载分发到可用的服务器。

启动所有这些基础设施来托管您的网站的一个非常简单的方法是通过 Elastic Beanstalk 服务。这允许您创建您想要的运行环境的规范,例如 Web 服务器的大小。您还将提供组成 Web 应用程序的代码。完成这些之后,它将创建您指定的所有 Web 服务器等,并部署您的应用程序。

一个规范称为“Elastic Beanstalk 应用程序”。您可以拥有多个 Elastic Beanstalk 应用程序——例如,如果您有多个网站,这可能很有用。

当需要部署应用程序的新版本时,您选择 Elastic Beanstalk 并告诉它部署新版本。

因为它存储每个版本,所以您可以快速获取过去版本列表,并在新版本不起作用时回滚到以前的版本。这使其与 Octopus Deploy 等产品处于同一领域。

创建 Elastic Beanstalk 应用程序

  1. 打开 Elastic Beanstalk 控制台:服务 | 部署与管理 | Elastic Beanstalk

  2. 单击页面右上角的 创建新应用程序。AWS 现在将引导您完成一个向导,以收集您的所有规范。

  3. 应用程序信息 - 给您的应用程序起一个炫酷的名字。或者也许一个无聊的名字,比如“application1”。单击 下一步

  4. 新环境 - Elastic Beanstalk 允许您创建两种类型的应用程序——网站和 工作进程,它们从 队列 中获取项目并处理它们。

    在这里我们正在部署一个网站,所以单击 创建 Web 服务器

  5. 权限 - 您的新环境需要某些权限,这些权限包含在 IAM 实例配置文件 中。只需单击 下一步 即可接受默认值。

  6. 环境类型 - 假设您正在部署一个 .Net 应用程序,将 预定义配置 设置为 IIS。并将 环境类型 设置为 负载均衡、自动伸缩。单击 下一步

  7. 应用程序版本 - 在这里您可以上传您的应用程序,以便将其部署到 Web 服务器。选择 上传您自己的 并选择您 之前 创建的应用程序源包。

    稍后,您将看到如何将应用程序的新版本部署到现有环境。部署限制 部分显示了 Elastic Beanstalk 如何通过一次部署到少量 Web 服务器来避免部署期间停机,而其他服务器则继续处理请求。单击 下一步

  8. 环境信息 - Elastic Beanstalk 允许您的应用程序拥有多个 环境,例如测试环境、生产环境等。

    每个环境(测试站点、生产站点等)都有其自己的 URL。在这里,您可以指定 elasticbeanstalk.com 域的子域名。 稍后,您将看到如何将您自己的域名与您的网站关联起来。

  9. 其他资源 - 目前,我们正在创建一个不带数据库的网站。所以请将所有复选框留空。

  10. 配置详情 - 大多数字段都可以使用默认值。但是,以下字段值得注意

    字段 描述
    实例类型 这里的默认值是 t1.micro,但此类型是 上一代 的。请注意,t2.micro 包含在 AWS 免费套餐 中,所以您可能想选择它。
    EC2 密钥对 选择您 之前 创建的密钥对。
    应用程序运行状况检查 URL 负载均衡器会跟踪 Web 服务器的运行状况,以便它能够替换不再健康的 Web 服务器。它通过定期向每个 Web 服务器发送请求来做到这一点。如果它收到正常的 HTTP 200 响应,它就认为 Web 服务器运行正常。

    在这里,您指定负载均衡器应该请求的相对 URL。使其成为一个不需要大量资源即可生成的页面,但仍能公平地指示服务器是否正常运行。

    如果您使用的是我的 试用网站,您可以使用主页。在这种情况下,您将输入 URL "/"(不带引号)。

    跨区域负载均衡 跨区域负载均衡 是一项功能,它允许负载均衡器在多个数据中心的服务器之间正确地平衡负载,从而为您的网站提供更高的可用性。请将其勾选。
    根卷大小 保留默认值,或设置为 30 GiB 或更高——尽管 Amazon 声明的最低值为 8 GiB。否则,当您尝试实际创建环境时,稍后会出现错误消息。

  11. 环境标签 - 您可以标记您的环境,如果您有很多环境,这可能会很有用。

  12. 查看信息 - 页面底部的 启动 按钮将创建您的环境并部署您的网站!

    这将带您进入您环境的 Elastic Beanstalk 控制板,您可以在其中看到它正在启动。

    一旦它变成绿色,单击您的新环境的 URL(就在您的环境名称标题旁边),即可看到您的网站出现。如果它变成红色,说明您的已部署网站可能存在问题。在这种情况下,通常可以 通过 RDP 连接到 Web 服务器,然后使用 Internet Explorer 打开 http://localsite。

查看您的环境

  1. Web 服务器 - 要查看您的 Web 服务器:服务(页面顶部)| EC2 | 实例(左侧菜单)。这将打开 EC2 管理控制台。

  2. RDP - 要通过 RDP 登录到您的 Web 服务器,您首先必须在其防火墙上打开端口 3389(RDP)。AWS 将此称为 安全组
    1. 单击 Web 服务器;
    2. 单击 描述 选项卡;
    3. 单击安全组(在 安全组 标签处)。这将打开安全组;
    4. 单击 入站 选项卡,查看入站流量规则;
    5. 单击 编辑 以编辑此列表。将出现一个对话框;
    6. 单击 添加规则 以添加新行;
    7. 类型 设置为 RDP(下拉菜单底部)。将 设置为 我的 IP
    8. 单击 保存。这将关闭对话框。您现在应该在规则列表中看到 RDP
    9. 单击 实例(左侧菜单)返回 Web 服务器。

    现在要通过 RDP 连接到您的服务器:单击您的 Web 服务器 | 连接 按钮。

  3. 负载均衡器 - 要查看您的负载均衡器:在 EC2 管理控制台中,单击 负载均衡器(左侧菜单)。

    单击 实例 选项卡以查看负载均衡器后面的所有 Web 服务器。现在,这将是您的一台 Web 服务器。

  4. 自动伸缩组 - 要查看您的自动伸缩组:在 EC2 管理控制台中,单击 自动伸缩组(左侧菜单)。

    详细信息 选项卡下,您将找到该组的最小服务器数量。如果由于服务器故障导致健康服务器数量低于该最小值,将自动启动新服务器以达到最小值。

  5. 返回 Elastic Beanstalk - 要返回 Elastic Beanstalk 控制板,请单击 服务 | Elastic Beanstalk | 您的应用程序。

部署新版本

要部署 Web 网站的新版本,请先 创建一个新的应用程序源包。然后单击 Elastic Beanstalk 控制板上的 上传并部署

获取一些统计信息

要获取有关您网站的基本统计信息,请在 Elastic Beanstalk 控制板上单击 监控

您可以通过 编辑 按钮更改控制板上的 指标

关闭您的服务器以节省成本

一旦您完成了服务器工作,您将需要关闭它们以节省成本。

请注意,一种方法是终止 Elastic Beanstalk 控制板上的 操作 下拉菜单中的环境。但是,这会删除您的整个环境,因此下次您想启动服务器时,必须再次通过向导来指定环境。

关闭 Web 服务器的唯一方法是逐一关闭:服务 | EC2 | 实例 | 单击您的服务器 | 操作 | 实例状态 | 停止

要关闭您的负载均衡器:负载均衡器(左侧菜单)| 单击负载均衡器 | 操作 | 删除

一旦所有这些都完成,您的 Elastic Beanstalk 应用程序将显示为红色。

重启您的环境

要使您的应用程序恢复正常运行:服务 | Elastic Beanstalk | 单击环境 | 操作 | 重建环境

后续章节

后续部分 中,您将看到如何添加具有自动故障转移功能的 SQL Server 数据库。因此,如果您的数据库服务器丢失,您的应用程序将自动恢复。您还将看到如何将您自己的域名指向您在 AWS 上托管的网站。

© . All rights reserved.