我正在尝试在数字海洋上设置负载均衡器并需要一些建议

I am trying to setup load balancer on digital ocean and need some advice

如何让所有 droplet 保持相同的内容?

我有3个droplet,我想把第一个的内容复制到另外两个。 有没有自动执行此操作的选项?

或者当我的移动应用程序后端处于 PHP 并且数据经常更新时如何创建 LB,因此在这种情况下需要帮助。

很难提供具体的答案,因为你的问题太宽泛了。

但是...

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

NB 其他云平台有实例组的概念,你在其中定义一个模板(d实例),然后让平台自动为你维护X个实例(添加|删除必要时)。

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

静态内容

这里有很多选择。最简单的方法可能是创建一个母版 Droplet,然后使用 Snapshots. I would recommend that you script (e.g. doctl) 创建母版的克隆,以便您能够在需要时重现其创建。此外,一旦您有了代码,请将其签入源代码控制工具(以供后代使用)。您也可以使用例如doctl 脚本从头开始创建多个相同的 Droplet。

因为想要自动创建(云)资源是一种常见的做法,所以有一些工具可以促进这一点。一,流行的工具是 Terraform and, though I've not used it (see provider 和 DigitalOcean,你应该能够使用它来创建,不仅是 Droplets,还有负载平衡器。有一个学习曲线,但它可能是一个很好的投资(Terraform 在 Digital Ocean 之外工作)。

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

动态内容

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

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

1- Kubernetes

Digital Ocean 包括 Kubernetes managed service.

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

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

不过,我建议您阅读 Kubernetes。

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