创建一个稳定的、自动扩展的应用服务器集群

aen*_*dra 4 mysql cluster scaling phusion-passenger docker

我有两台服务器,每台服务器运行 50 到 100 个不同的遗留 web 应用程序,使用从 PHP 到 Python 到 Ruby-on-rails 到 NodeJS 的语言编写。

我们想淘汰这些机器,因为它们很旧、不安全、组织不严、没有一致的配置逻辑,而且mysqld每台机器都运行两个实例(不要问)。

为此,我想做以下事情:

  • 删除任何现已折旧的遗留项目
  • 以某种方式将每个应用程序沙箱化,可能进入它自己的 Docker 或Passenger 容器
  • 将新服务器创建为自动扩展的无状态集群,将每个 MySQL 数据库移动到其自己的 RDS 实例
  • 甚至可能能够以类似于 Heroku 的方式自动缩放非活动应用程序

最终,我想做一些类似于DeisFlynn所做的事情,尽管目前这些都不是生产就绪的。

老实说,我对这一切有点不知所措,真的不知道从哪里开始。有什么建议?乘客是我应该考虑的事情吗?码头工人?

谢谢!

And*_*inn 5

我不太确定你的实际问题是什么。你的整体问题相当模糊。从我可以收集到的信息中,您有三个主要问题:

  1. 我应该从哪里开始获得自己的可扩展 PaaS 基础架构?
  2. 乘客是我应该考虑的事情吗?
  3. Docker 是我应该考虑的东西吗?

我会先回答第 3 点,因为那是最简单的。答案是肯定的。如果您要构建新的东西,Docker 将帮助您进入一个更便携的世界,这反过来又将帮助您达到一个更具可扩展性的点。您的旧版 web 应用程序将作为自己的容器运行,具有自己的依赖项集,因此变得更加便携。

问题 2 的答案听起来更依赖于 Ruby 和一般的 Ruby 应用程序。你能跑乘客吗?也许...这似乎更依赖于应用程序的编写方式以及它可能与哪些服务器兼容。然而,Phusion 似乎正在朝着对 Docker 非常友好的方向迈进。至少有专门围绕运行 Ruby、Python 和 Node.js 应用程序的 Docker 映像 - https://github.com/phusion/passenger-docker

我对第 1 点的回答是从容器化遗留应用程序开始。使应用程序更符合十二因素 ( http://12factor.net/ ) 如果它们还没有。让他们更注重服务。不要在一个容器中运行 MySQL、Redis、Apache、PHP-FPM 等内容,而是将它们分成不同的服务,这些服务通过 TCP 和 HTTP 相互连接(Docker 链接将是一个很好的起点 - https: //docs.docker.com/userguide/dockerlinks/)。

通过让您的应用程序在自己的容器中运行,使用可以在任何地方运行的外部服务,并且可以使用默认工作配置(发布)进行版本控制,然后您就可以开始了编写调度、服务发现和部署脚本。

如果您还没有,请查看比成熟的 Docker PaaS 更早出现的内容,例如https://coreos.com/http://www.projectatomic.io/。像这样的东西可以让您围绕自己的容器/单元进行调度,而不是实际为您构建应用程序容器。对于开发中的学习,您可以使用类似http://www.fig.sh/http://decking.io/ 的东西。非常适合在本地测试新的面向服务的容器。

有关 Docker 的更多工具,请关注/sf/ask/1279964871/。最重要的答案很好地概述了他们目前发布的内容,并且作者将其更新得相当好。