我有一个运行5到6个小Rails应用程序的服务器。他们所有的附件都在S3上,而且他们都使用MySQL作为数据库。每个应用程序都有自己的用户,并运行一些内容。nginx服务器负责负载均衡和域路由。
我计划将此服务器替换为Docker安装:一个服务器,每个应用程序一个容器,前面有一个nginx。
我的问题是:你会把数据库部分放在哪里?
我主要看到4种可能性:
1)每个app容器内有一台Mysql服务器。我认为这不是Docker的哲学。它需要单独备份每个容器的数据。
2)为所有应用提供唯一的MySQL容器。
3)在宿主Docker服务器上安装标准的MySQL。
4)为所有应用程序提供单独的MySQL服务器。
你会怎么做?
PS :我知道Docker还没有做好生产准备,我计划现在使用它进行测试,如果我对它满意的话,我会切换它。
发布于 2013-10-09 02:48:16
这取决于几个因素。这里有一些问题可以帮助你做出决定。
- YES: then it makes sense to embed the MySQL server in each app, because it will "stick around" with the app, with minimal configuration effort.
- NO: then there is no compelling reason to embed the MySQL server.
- YES: then you cannot embed the MySQL server, otherwise, scaling one tier would scale the other tier, which will lead to though headaches.
- NO: then nothing prevents you from embedding the MySQL server.
- YES: then you might want to use separate MySQL servers, because a single app could impede the others.
- NO: then you can use a single MySQL server.
如果您想要一个超级易于部署的设置,其中不需要可伸缩性,但是希望能够非常轻松地启动新实例,并且希望能够毫无困难地到处移动实例,那么嵌入MySQL服务器是很好的。
最灵活的设置是您为每个应用程序部署一个应用程序容器+一个MySQL容器。如果你想这样做,我建议等待Docker 0.7,它将实现链接,它将让你有一个基本的服务发现机制,以便每个应用程序容器可以轻松地发现其数据库容器的主机/端口。
我不会在主机上部署MySQL;如果需要安装单个MySQL,那么可以通过运行单个MySQL容器并使用-p 3306:3306
运行它来实现相同的结果(它会将主机的3306/tcp
端口路由到MySQL容器的3306/tcp
端口)。
发布于 2014-11-06 02:06:06
由于这5个或6个应用程序如您所描述的那样很小,我将基于两个原因明确排除每个容器安装单独的MySQL的选项:
拥有专用的MySQL容器或直接在主机上安装MySQL (即不停靠)应该具有几乎相同的性能(最终您将在主机上拥有一个本机mysql进程,而不管它是否在容器中)。
唯一的区别是您必须挂载一个卷来将数据持久化到MySQL容器之外,因此拥有一个专用的MySQL容器是一个更好的选择。
https://stackoverflow.com/questions/19250205
复制相似问题