![创建稳定、自动扩展的应用服务器集群](https://linux22.com/image/641028/%E5%88%9B%E5%BB%BA%E7%A8%B3%E5%AE%9A%E3%80%81%E8%87%AA%E5%8A%A8%E6%89%A9%E5%B1%95%E7%9A%84%E5%BA%94%E7%94%A8%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%9B%86%E7%BE%A4.png)
我有两台服务器,每台服务器运行着 50 到 100 个不同的传统 Web 应用程序,这些应用程序使用 PHP、Python、Ruby-on-rails 和 NodeJS 等多种语言编写。
我们希望淘汰这些机器,因为它们老旧、不安全、组织混乱、没有一致的配置逻辑,并且mysqld
每个机器都运行着两个实例(别问)。
为此,我想做以下几点:
- 删除任何现已贬值的遗留项目
- 以某种方式将每个应用程序放入沙盒中,可能是放入自己的 Docker 或 Passenger 容器中
- 将新服务器创建为自动扩展的无状态集群,将每个 MySQL 数据库移动到其自己的 RDS 实例
- 甚至可能能够以类似 Heroku 的方式自动扩展不活跃的应用程序
最终,我想做一些类似的事情戴斯或者弗林尽管目前这些都还未准备好投入生产。
说实话,我有点不知所措,真的不知道从哪里开始。有什么建议吗?我是否应该考虑 Passenger?Docker?
谢谢你!
答案1
我不太清楚你真正的问题是什么。你的整体问题相当模糊。据我所知,你有三个主要问题:
- 我应该从哪里开始获取自己的可扩展 PaaS 基础设施?
- 我是否应该考虑乘客?
- 我是否应该考虑使用 Docker?
我先回答第 3 个问题,因为这最简单。答案是肯定的。如果你要构建新的东西,Docker 将帮助你进入一个更便携的世界,这反过来又会帮助你达到一个更具可扩展性的点。你的旧式 Web 应用程序将作为自己的容器运行,具有自己的一组依赖项,因此变得更具便携性。
第二个问题的答案似乎更依赖于 Ruby 和 Ruby 应用程序。你能运行 Passenger 吗?也许……这似乎更依赖于应用程序的编写方式以及它可能与哪些服务器兼容。然而,看起来 Phusion 正在努力变得非常 Docker 友好。至少有专门用于运行 Ruby、Python 和 Node.js 应用程序的 Docker 镜像 -https://github.com/phusion/passenger-docker。
我对第一个问题的回答是,首先将遗留应用程序容器化。使应用程序更符合十二要素要求(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 的更多工具,请关注https://stackoverflow.com/questions/18285212/how-to-scale-docker-containers-in-production。最佳答案对当前的内容有一个很好的概述,并且作者对其进行了很好的更新。