在本教程系列中,我们将从头开始建立一个高度可用的WordPress网站。
第1部分–简介,注意事项和体系结构
第2部分–设置VPSes
第3部分–设置MariaDB多主复制
第4部分–文件复制和设置DRBD
第5部分–设置OCFS2
第6部分–循环DNS加密和结论
目标
- 全面保护免受VPS或Web服务器故障的影响,因此,如果某个节点发生故障,则该网站将继续正常运行。
- 在这两个节点上都可以进行全部操作,不仅是只读副本或缓存,还包括整个站点,以便作者可以发布,用户可以进行更新等。
- 通过Let’s Encrypt使用常见的certbot自更新证书通过https进行设置。
高可用性注意事项
为了实现我们的目标,我们需要回答以下问题:
- 如果VPS全部或部分关闭(例如,VPS已启动但其Web服务器已关闭)怎么办?
- 如果我们有多个VPS在同一个WordPress网站上提供服务,如何使它们保持同步? 我们必须同时考虑数据库和内容,例如上载的媒体等。
- 我们的复制需要多么严格? 如果事情在几分钟之内不同步,还是我们希望事情始终保持同步,这可以接受吗?
- 如果某个节点发生故障,客户端(即,任何随机的Internet用户的Web浏览器)如何知道要指向哪个节点?
高可用性架构
我们将使用以下设置:
两个Debian 10 VPS,每个都有Nginx和php-fpm服务于WordPress。 这里没有什么是Debian特有的,但是为了避免使教程长两倍,我们只介绍一个发行版。
我将在加州Linode的Fremont数据中心使用两个VPS。 Linode的选择没有什么特别的-这些技术适用于任何VPS。 我们将两个VPS定位在同一DC中,以使同步尽可能快。 但是,该架构将适用于地理上分离的VPS(以防止数据中心发生故障)。 由于并非所有供应商都提供私有IP,因此我们将仅使用公共IP。 但是,如果提供商提供了专用IP,则应使用这些IP进行复制,以降低带宽成本。
MariaDB的本机多主复制。 MariaDB的Galera选项是另一个不错的选择,尽管它意味着至少三个节点。 如果要走那条路线,可以使用garbd在两个节点上使用Galera。
DRBD + OCFS2在节点之间双向复制卷。 如果您的非数据库更新很少或者如果您有一个单作者WordPress网站,我们还将探讨其他选项,包括快速和肮脏的rsync。 复制选项很多,我们将讨论为什么一些流行的选项不能完全解决问题。
客户端(Web浏览器)的轮询DNS。 RRDNS是一种DNS功能,您可以说“对于此DNS条目,分发这些响应并在其中进行轮换”。 因此,第一次有人查找站点时,他们将获得节点1的地址,而下次他们将获得节点2,依此 类推。在过去的年代中,浏览器会获得一个地址并坚持使用,直到DNS TTL过期为止,但是大多数现代浏览器都足够聪明,如果它们为一个网站获得两个IP而一个没有响应,则将尝试另一个。
让我们为https加密。 我们还将解决当RRDNS可以返回任一节点的地址时certbot如何更新的问题。
这是架构图:
在你开始之前
我们正在使用DRBD在节点之间进行同步。 DRBD需要一个专用分区,因此,如果您是从KVM进行设置,则在设置VPS和安装操作系统时应牢记这一点。 或者,如果您的提供商提供块存储,则可以附加一个新卷,这就是我在这里所做的。
下一部分:第2部分–设置VPS