迁移到具有自动扩展功能的 AWS 云 - 将 Redis 和 ElasticSearch 放在哪里?

Rob*_*ers 3 cloud deployment amazon-web-services redis elasticsearch

我一直在尝试研究这个主题,但没有找到任何建议在迁移到云框架时安装 Redis 和 ElasticSearch 等服务的地方。

我目前正在 2 个静态服务器上运行 Symfony2 应用程序——一个运行 MySQL,另一个是面向公众的 Web 服务器,它也运行着 Redis 和 ElasticSearch。这两个服务器都是虚拟化的,但就目前无法复制而言它们是静态的(各个方面仍然依赖于本地文件系统)。

目标是迁移到 AWS 并使用自动扩展来根据需要启动和终止 Web 服务器,但我不清楚应该在每个 EC2 实例上放置什么。他们应该只负责单一职责吗?即为 Web 服务器、Redis 和 ElasticSearch 设置单独的实例,最有可能为 MySQL 设置一个 RDS 实例,并且只在 Web 服务器上设置自动缩放?

我不认为必须在短期内扩展 ElasticSearch 服务器,因为它只是驱动搜索功能,但 Redis 可能需要在某个时候进行复制 - 但这应该手动完成吗?我不确定这如何自动完成,因为据我所知,每个实例都需要配置为了解它的主/从。我很感激这方面的建议。

我在这里的时候还有一个简单的问题 - 当 X 个 Web 服务器当前处于活动状态时,我如何能够部署代码更改?我正在使用 Capifony 部署脚本(Capistrano 的 Symfony2 版本),我认为它可以通过指定一组:domain地址来轻松处理多个服务器……但是当 Web 服务器的数量可能会有所不同时,应该如何处理?

pla*_*rms 7

我们处理这个问题的方法是在分层堆栈中创建多组服务器(即使一组当前只需要一个实例)。第一层显然是您的Elastic Load Balancer

第二层是一个 Web 服务器Auto Scaling 组(多可用区)。这些启动自定义 AMI,该 AMI 设计为在启动时为此任务处于适当的就绪状态。(现在我们的流程更加成熟,我们实际上启动了一个通用 AMI,它可以在启动时使用 Chef 进行自动配置。)但我们也在git pull启动时创建了最新的生产代码存储库,因此我们不必创建一个新的AMI 与每个代码部署。这也使我们可以更轻松地更改配置,例如数据库主机、Redis 主机等。

第三层用于数据库和其他服务,例如 ElasticSearch 和 Redis。您可以在一个机器上托管所有三个服务,然后管理您自己的 mysql 从服务器,或者您可以在自己的机器上托管 Redis 和 ElasticSearch,并使用 Amazon 的 RDS 来处理您的 Mysql 服务。您的选择,取决于您是否要在 MySQL 中管理自己的复制/容错。

通常最简单的方法是在多可用区配置中使用Amazon RDS。我们总是试图使用所有内容部署多可用区,因此如果单个可用区出现故障,我们仍然可以正常运行。然后运行一个较小的实例来仅托管 Redis 和 ElasticSearch。

ElasticSearch,这是我们用于 rails 安装的提示:安装和维护您的应用程序的完整实例以及 ElasticSearch 。然后为此角色(或 Chef 角色)构建 AMI。原因是您可以在启动时运行实用程序任务以从头开始创建您的 ElasticSearch 索引,如果您正在启动一个新的 AMI。然后,将此实例也放在多可用区 ASG 中,最少和最多一台服务器。如果那个盒子或 AZ 死了,ASG 将启动一个替代品,它会在启动时重建它的索引,并准备好为客户服务。

对于Redis 来说,好消息即将到来。redis-cluster即将推出,这有望使扩展 redis 存储的管理变得更容易。同时,您可以处理自己的复制或尝试 Garantia,一种托管的可扩展 Redis 服务器解决方案这是,它现在使用测试版的 redis-cluster 版本(目前仅限于 us-east-1 区域)。这样做的好处是可以为您的配置保留相同的 IP 地址,无论您的实例池发生什么情况。

最后,为了保护进出数据库的数据,我建议在公共/私有虚拟私有云的私有网络部分构建它。这会设置您自己的专用网络,该网络与数据包嗅探器隔离。您还可以对 MySQL 数据库连接使用 SSL 加密。