我所在的公司目前有 2 台 Linux 服务器在 Debian 下运行,这些服务器都是付费的。其中一台目前还托管多个网站 + 邮件服务。另一台 Linux 目前什么也没做。
现在,我们希望最强大的机器能够托管网络服务器,并在第二台服务器发生故障时备份邮件。对于较弱的机器,情况也一样,我们希望它能够托管邮件,但在主服务器发生故障时仍能托管网站。如果这不可能,那么在两者之间进行某种负载平衡就足够了。感谢您的帮助 PS:我对 Linux 还是个新手,所以希望您能提供完整的解释
答案1
好吧....
首先:获取一个可以在两个服务器之间共享的 IP 地址。稍后我会解释原因。
Web 服务器的负载平衡涉及以下几个步骤:
- 负载平衡请求
- 同步文件
- 共享会话数据。
我们使用的软件叫做HAProxy实现请求的负载平衡。您可以使用轮询 DNS但你会失去容错能力。我们有网络安装存储确保两个服务器都可以访问当前文件。最后,我们使用梅马赫德服务器存储共享会话数据之间Apache HTTPd實例。
抛开名字不谈,下面是基本情况:
您需要一个位置来指向请求,即指向两个 Web 服务器的地址。最简单的方法是使用轮询 DNS。但是,RRDNS 的设置很复杂,需要进行故障检测和纠正(例如:如果服务器 1 出现故障,至少一半的请求将无法提供服务)。RRDNS 的替代方案是共享(通常虚拟 IP 地址理想情况下,在同一子网内(并且您的服务器通常必须位于同一数据中心等),但存在很多限制。如果上述两个选项都失败,那么您将更接近于硬件负载均衡器。你不必去购买F5 负载均衡器不过,你可以使用第三个虚拟机,HAProxy、LVS、或类似的东西。这最后一个选项让你非常关键单点故障尽管。
无论哪种方式,您的公共入口点都位于前线,并且通常代理请求(带有 keepalived 的 VIP 会跳过代理,但有些东西告诉我,您可能不够幸运,无法将您的两个虚拟机放在具有兼容网络的同一数据中心中。从那里开始,一般来说,您希望所涉及的应用程序知道它的兄弟姐妹是什么(阅读:同行) 正在做什么。Apache HTTPd 需要会话数据您的邮件服务器可能可以独立运行但必须以某种方式指向共享邮箱。
最后,根据您的基础架构,从每台服务器提供相同的映像文件可能会很困难。您可以执行本地(子网)NFS 挂载,或通过互联网通过 TLS 隧道传输 NFS(请参阅:高延迟)或以合适的时间间隔进行 rsync 复制等(这可能是最容易解决的问题)。
如果你不需要真正的负载平衡,而只是需要一个可能仍然有效的故障转移解决方案(新的登录、丢失的购物车、会话数据中存储的任何内容),你可以设置一个监控流程,并将你的 DNS 记录 RNDC(使用低生存时间)来反映活动(工作)服务器。(预计丢失请求的延迟时间为 10-120 秒)。
幸运的是,邮件系统内置了冗余功能。您可以启动另一台邮件服务器,让其全部测试并运行,然后按所需优先级添加 MX 条目,它应该可以正常工作。(这里不处理 imap/pop3/接收邮件... 只是发送非常简单)。
我做过一个这样的项目作为我的本科学位的最终项目。在负载平衡、冗余和容错的环境中设置我们的中央身份验证系统。从设计到生产大约花了一年时间。(那是一个 Web 应用程序)。您可能可以更快地完成它……但如果您不精通 Linux、不熟悉网络原理(您能否就第 3 层交换和应用层错误检查进行明智的对话?),并且总的来说,不愿意长时间工作来学习您从未想过会关心的事情,那么这将是一项艰巨的任务。