在一台服务器上划分一组服务

我所属的一个小组已经发展壮大,即将从使用DigitalOcean VPS到一个单独的同位置服务器。 在这一点上,我们没有必要非常高度地分发我们的服务。 这个单一的服务器将运行我们所有的系统,从我们面向公众的网站到我们的邮件服务,到自定义守护进程和控制面板。

然而,人们一直担心,一种服务可能会受到损害(我们一直是过去的入侵目标),并在服务器的其他部分造成稳定性或安全漏洞。

我们所要做的是以某种方式“沙盒”某些服务和stream程,限制他们能够使用的资源(RAM,CPU)的数量。 有人build议在不同的虚拟机上运行每个“集合”的服务,但这看起来很笨重,难以维护。 我认为Linux将会有一个更优雅的处理方式。 有没有人有任何build议,以完成这个最好的方式?

我们正在使用CentOS 6.4 64位。

一个名为Docker的项目最近因为试图解决这个问题而受到了很多关注。

Docker是一个开源项目,可以轻松地从任何应用程序创build轻量级的,可移植的,自给自足的容器。 开发人员在笔记本电脑上构build和testing的相同容器可以在规模,生产环境,虚拟机,裸机,OpenStack集群,公共云等等上运行。

这种技术利用Linux cgroups和其他一些东西来构build类似监狱的“容器”,它可以包含运行特定服务的所有必要资源和configuration,这些服务可以像包一样进行pipe理,因为它们可以是分布式,版本化以及在各种环境中使用。 (这是一个粗略的简化。)

请参阅Docker的主要特性以了解有关其实际工作方式的更多信息。

传统上你会用chroot jail来做这件事, 但是我强烈build议把它们放在自己的VM中。 相互之间有更好的隔离,当升级/故障排除/更改服务时,您可以获得更好的粒度。 能够在不使数据库服务器脱机的情况下重新启动/修补您的Web前端可能会非常好,特别是如果您最终需要扩展冗余。

与大多数应用程序相比,CentOS盒子的开销是相当小的。