我最近对VPS集群产生了兴趣,试图build立一个多VPS设置似乎是一个好主意,我将在下面介绍。 这不是真正意义上的生产用途,而更像是一个提高多服务器系统相关技能和知识的实验。 但是由于我缺乏专业知识,我需要一些一般信息。
设置说明
由于我每天处理使用Redis作为数据存储的Node.js应用程序,因此它将作为安装的基础。 我想到的基本上是至less2 VPS设置。 每个服务器都运行相同的节点服务(假设两个服务器同时运行5个不同的服务),每个VPS运行一个Redis实例,由Node服务用来存储数据。 此设置的目的是启用两台服务器之间的数据镜像(如果第一台服务器中的节点服务#1向Redis添加了某些内容,则该更改也应该反映在第二台服务器中)。 这也意味着上传的文件等应该在两台服务器上进行镜像(从某种意义上讲,数据存储和文件系统的更改都必须反映在另一台服务器上)。
理想情况下,这将使简单的负载均衡器能够在服务器之间共享负载,并且在单个服务器发生故障的情况下,其他服务器将继续运行并因此保持Node服务联机。 变化需要被镜像的速度并不高,甚至一分钟的延迟也无关紧要。 但是,如果用户正在主动更新数据,则必须向他呈现他刚刚更改的数据(从某种意义上说,他必须以某种方式强制与服务器进行通信,以便更新数据,因为这些更改可能未被镜像到其他服务器呢)。
问题
什么是实现负载均衡的合理方法? 我听说过使用一些DNS魔法,但并不真正了解它。 简单地更新DNSlogging会很慢,因为它们被caching在多个地方。 另外我读了关于使用一个“主代理”服务器,将处理其他服务器之间的平衡。 这似乎有点冒险,因为如果主服务器失败,一切都将脱机。
如何在不同的VPS上镜像文件系统的一部分,以便两台服务器上都存在上传的图像等。 有没有广泛的软件选项,或者一个简单的脚本检测上传,然后复制这些文件在不同的服务器上工作得很好?
谢谢!
只能帮助问题1。
负载均衡和故障转移有几个方面(最简单的)
DNS负载平衡很简单:假设您有两台(或更多台)IP 1.1.1.1和2.2.2.2的服务器。 要设置DNS负载平衡,请为www.example.com创build主机名的DNSlogging:
www.example.com. A 1.1.1.1 A 2.2.2.2
(另外,DNS服务器应该configuration为以循环模式提供这个名字,但是通常它是默认的)。
现在,每个到www.example.com的DNS请求都将以两个地址以伪随机顺序进行回复,因此您的客户端可能在服务器之间平均分配。
一旦设置完成后,就不需要频繁更新logging。 它也提供一定程度的故障转移,就好像一台主机停机一样,浏览器将超时,然后尝试第二台主机,但可能会有相当的延迟,用户不会喜欢它。
dynamicDNS。 可能除了1.之外,一旦主机出现故障,dynamic更新DNSlogging并删除引用失败的主机,但是DNS系统中的大量caching会导致上面提到的一些降级行为。 使用非常低的TTL改善情况但是在客户端OS /浏览器内部仍然不会有TTL的caching,有些ISP也不会忽略低TTL。 无论如何,底线 – 这是实现平衡和基本故障切换的非常简单且经济实惠的方式。
代理。 简单和stream行的负载平衡。 要消除单点故障,您需要将其与其他方法结合使用。
IP故障转移。 除了2,为了处理代理本身的故障,在“IP故障转移”设置中使用的两个代理 – 基本思想是在host1上有一个正常的IP地址,但是一旦失败,host2检测到IP,IP在host2上。 寻找linux“心跳”项目。 (您也可以在没有代理的情况下自行故障转移服务器,但不会有平衡)。 通常两台PC必须位于同一个子网(同一个数据中心)。
选播。 的想法是在几个物理位置向单个IP地址(实际上是单个子网)通告路由。 您需要您自己的/ 24子网,并且能够configurationBGP。 Anycast经常用于DNS服务器。 持续的TCP连接有困难,因此更容易适应UDP和DNS,但有时也用于Web。
这是基本的想法。 如你所见,每种方法都有局限性和复杂性。 如果它不够复杂,你可以build立任何可以想象的上述方法的组合:)