我不知道我需要搜索什么。
我需要有关如何“复制” Apache 服务器的信息,如果一个服务器出现故障,另一个服务器将接管。
Apache 服务器还保存了大量数据文件。如何以最佳方式(也包括某种复制)管理和存储这些文件?
答案1
您需要某种高可用性配置,例如由Linux 高可用性. 对于数据文件,我会使用DRBD,这是在两台机器之间复制块设备的一种方法(尽管通常一次只有一台机器会使用它 - 这没问题,因为一次只有一台机器运行 apache)。
不过,就我个人而言,在几乎所有情况下,我可能会努力使我的 MTBF 和 MTTR 降低到很低的水平,而不用担心 HA——设置的额外复杂性使得意外关闭服务的可能性大大增加,并且管理整个过程的额外硬件和专业知识的成本在大多数情况下使得 HA 要求难以证明是合理的。
答案2
您正在寻找的术语是“故障转移” - 本质上,当主资源发生故障时自动切换到辅助资源。
虽然设置服务器集群既是一次很好的学习经历,也很有趣,但它很容易成为一项复杂的任务,不应轻率地进行。首先探索其他替代方案。
听起来你确实在尝试设置一个高可用性集群。假设你有两个节点 - 至少有两种方法:
- 主动/被动 - 一个节点将提供数据,另一个节点将保持最新状态,并且在“主动”节点发生故障时,将接管为主动节点。
- 主动/主动 - 两个节点都能够提供数据 - 并且两个节点都必须保持最新状态。这里增加的复杂性(除了文件冲突之外)是将两个节点作为单一前端呈现给用户(当然,好处是负载平衡)。
集群基础知识
考虑一下,即使是一个简单的集群也需要什么:
- 每个节点都需要知道其他节点的状态/健康状况。这通常是通过以预定的间隔发送“心跳”来实现的。此外,在多节点集群中,通常有一个主节点 - 该层通常确定这样的角色。Heartbeat 和 Corosync 是用于此目的(消息传递层)的常用包。如果其他节点停止接收来自特定节点的心跳,它们将重组集群以省略该节点(并可能选出一个新的主节点)。
- 您的集群需要控制单个资源(例如 Apache)——在某些情况下,您希望集群中某个服务在任何时候只运行一个实例。Pacemaker 通常用作集群资源管理器。
文件复制
现在,您面临的问题是保持文件在节点之间同步。由于这是两个独立的节点,因此必须通过网络复制数据。
- 在主动/被动设置中,只有主动节点才具有对数据的读/写访问权限 - 其他节点甚至可能没有读取访问权限。此类设置的一个常见示例是在主/辅助配置中使用 DRBD(内核模块和用户空间脚本)。当主节点发生故障时,可以提升辅助节点,并将获得对其本地数据副本(已从主节点复制)的完全访问权限。
- 在主动/主动设置中,两个节点都必须能够读取和(通常)写入数据。DRBD(设置为双主)可用于此目的(与集群感知文件系统(如 GFS2 或 OCFS2)一起使用)。或者,您可以使用分布式文件系统(如 GlusterFS) - 它提供比 DRBD 更多的功能(并且更易于设置) - 但有额外的开销。由于两个节点都能够写入同一资源,因此发生冲突和“裂脑”情况的可能性要高得多。
负载均衡
在两个节点都处于活动状态并设置为处理请求的集群中,您需要向每个节点发送请求。这通常通过位于集群节点前面的负载均衡器来实现。根据您的需要,存在简单而高效的第 3 层(即网络)负载均衡器(例如 Linux 虚拟服务器)或更复杂的第 7 层(即应用程序/内容感知)负载均衡器(例如 HAProxy)。一些 Web 服务器(例如 Nginx)也可以用作简单的负载均衡器。当然,问题变成了如何处理负载均衡器故障(因此您可能需要设置两个负载均衡器以进行故障转移)。
配置管理器
随着所有这些不同组件的相互作用,您可能需要一些东西来简化维护每个节点和管理各种配置的过程 - Puppet 和 Chef 等配置管理器就可以达到这个目的。
答案3
答案4
只需在负载均衡器后面运行两个或更多 Web 服务器即可。对于大多数网站而言,这比高可用性集群更简单、更自然。根据您网站的性质,您甚至可以使用循环 DNS 而不是负载均衡器。
对于数据文件,您可以使用某种形式的共享存储,NAS(nfs 或 cifs)或 SAN;或者让每个 Web 服务器都有自己的本地存储,您可以定期同步。
要更新 Web 服务器(无论是修补软件还是更新正在提供的文件),您可以从负载平衡池中取出一台服务器,对其进行更新、测试更新,然后(如果一切正常)将该服务器放回池中并转到下一台服务器。