2

How do I keep all droplets with the same content?

I have 3 droplets and I thought of copying the contents of the first one to the other 2. Is there any option that does this automatically?

Or how to create LB when my mobile app backend in on PHP & the data gets updated frequently so need help in this case.

4

1 回答 1

3

很难提供具体的答案,因为您的问题非常广泛。

但...

如您所知,最好克隆实例,以便在 LB 之后,每个实例的行为相同。有很多方法可以做到这一点。据我所知,Digital Ocean 没有提供通用机制1

注意其他云平台包括实例组的概念,您可以在其中定义模板(d 实例),然后让平台自动为您维护 X 个实例(根据需要添加|删除)。

让我们分解问题:您有一些静态内容(例如 PHP、Web 服务器)和一些动态内容(例如您的数据)。在您的应用程序中将它们分开也会很有用。

静态内容

你在这里有很多选择。最简单的可能是创建一个主液滴,然后使用Snapshots克隆主液滴。我建议您编写脚本(例如doctl)创建 master 以便您能够在需要时重现它的创建。此外,一旦您有了代码,请将其检入源代码控制工具(供后代使用)。您还可以使用例如doctl 脚本从头开始创建多个相同的Droplet。

因为想要自动创建(云)资源是一种常见的做法,所以有一些工具可以帮助实现这一点。一个,流行的工具是Terraform,虽然我没有使用过它(请参阅DigitalOcean 的提供者,你应该能够使用它来创建,不仅是 Droplets,而且是负载平衡器。有一个学习曲线,但很可能一项不错的投资(Terraform 超越了数字海洋)。

一种补充方法是考虑将您的应用程序容器化。然后,您的部署脚本将能够拉取/运行容器映像,而不是安装软件。这应该(!)创建一个更可预测的部署机制它使您能够考虑使用面向容器的(Linux)操作系统(例如CoreOSRancherOS)。这些带来的优势包括更小的连接表面、更容易的升级和更简单的部署(创建容器操作系统、运行 PHP 应用程序容器),但代价是您必须熟悉它们。

动态内容

如果动态内容是基于文件的,一个常见的解决方案是使用某种形式的共享卷,允许在一个地方管理此内容,但在多个 Droplet 之间共享它。我的理解(!?)您目前无法在多个 Droplet 之间共享一个卷。为了解决这个问题,您可能希望探索运行类似NFS的东西,它可以使多个 Droplet 共享文件。或者,您可以使用 Spaces。最坏的情况是,您可以跨多个 Droplet 复制文件,但要注意结果可能不一致的后果。

如果动态内容在数据库中,您可以自己运行数据库(集群)并将每个 Droplet 指向其端点。或者您可以使用 Digital Ocean 的托管数据库(服务)

1 - Kubernetes

Digital Ocean 包括一个Kubernetes 托管服务

这为您提供了一种部署解决方案的 X 实例的方法,包括定义负载均衡器和共享(持久)卷,使用 Kubernetes 可能会超出您的需求(并且还需要您将应用程序容器化)。

也就是说,请参阅此处并请注意,这是在DigitalOcean 提供其托管 Kubernetes 产品之前编写的;原则保持不变。

不过,我建议您阅读 Kubernetes。

在我看来(!),它应该是大多数基于云的应用程序的部署方式。

于 2020-02-13T18:33:40.053 回答