我正在尝试使用两台 Web 服务器来运行我的网站(而不是我现在使用的那台)。我可以轻松地在我的托管服务提供商(Digital Ocean)上创建另一个 LEMP 堆栈,并设置一个负载平衡器以通过循环将流量引导到两台服务器,但我不知道如何在两台 Web 服务器上运行相同的代码。
例如:我知道我可以将相同的 php 文件上传到第二台 Web 服务器,但如果我想编辑 php 文件,我必须在两个 droplet 上手动编辑该文件。有没有办法将第二台 Web 服务器设置为某种镜像,以便它在第一个 Web 服务器上运行代码?
我很感激任何建议,因为我对开发/服务器配置还不熟悉。
答案1
为了让负载平衡器正常工作,您需要做一些事情。听起来您最感兴趣的是如何将正确的代码放到每台服务器上。幸运的是,这是最简单的部分!
使用可通过网络访问的版本控制服务。
有很多托管选项,如果您愿意,您甚至可以托管自己的版本控制系统。
版本控制系统的选择可能不那么开放;强烈推荐 git,尽管 SVN 也不错,而且学习起来稍快一些。
使用托管版本控制并不意味着您的代码必须公开,但如果您希望代码保密,您需要弄清楚您的服务器将如何读取它。稍后会详细介绍。
最后,告诉您的服务器从存储库下载代码。您可以执行一次,但要明白,每次进行更改时,您都需要再次 ssh 进入框以告诉它们进行更新,或者您可以设置一个 cron 作业以使其始终保持更新。
其他的东西:
您的负载均衡器需要检测其中一台服务器是否离线。 听起来您手头有一个托管负载均衡器解决方案,因此它可能内置有用于此目的的工具。
您需要某种类型的共享持久存储。 第一个步骤(仅适用于某些系统)是将数据库放在单独的服务器上。(使数据库冗余也是其自己的主题。)根据您的需要,这通常就足够了。
您可能需要一个处理秘密配置数据的系统。 例如,将数据库凭证(或版本控制凭证)存储在版本控制中并不是一个好主意。您可以手动更新它们,也可以研究一些更复杂的方法。
我忽略了很多最佳实践的细节,哪个事情,一方面是为了简短,另一方面是因为什么适合你取决于你的情况。我还忽略了许多解决这些问题的非常好的商业选择,一方面是因为我试图建议对你当前的设置进行一些小的改变,另一方面是因为资本主义是一种疾病。
答案2
首先考虑一下为什么你要使用两个网络服务器.....
可能最重要的是:更高的可用性...即使一个网络服务器崩溃,另一个也会弥补不足。
如果您将整个网站都放在一台服务器上,那么这将违背您试图实现的更高可用性的目的。因此,为了安全起见,每个 Web 服务器都必须有一份相同的代码来执行。
与此问题相关的问题是任何数据库数据的存储和检索。除非您将为这些服务器使用一个公共后端服务器。然后两个 Web 服务器都可以将数据输入到后端服务器。如果您依赖任何缓存,那么这可能是一个问题(例如会话参数或以前读取的数据)。
这取决于您的最终目标是什么...解决方案要么非常简单,要么极其复杂。
答案3
您问了一个简单的问题,这里就有一个简单的答案。
我猜你不是什么“超级”网站,请原谅我。
您可以简单地每分钟或每 5 分钟添加一个 CRON 作业来 rsync 网络文件,或者以您认为合适的任何时间表来了解您更改文件的频率或通过网络上传文件的频率。
除此之外,如果您有另一台服务器,您应该或需要运行它作为数据库服务器。
因此两台服务器都有相同的数据,您可以将其扩展为“主从”数据库配置,但我相信即使没有它您也能没问题。
拥有第三台服务器后,您就可以开启循环并启动负载均衡器了。
除非您有会话,否则我相信 DigitalOcean 负载均衡器具有粘性会话。
您说我理解您的问题了吗?