设置说明
由于我每天处理使用Redis作为数据存储区的Node.js应用程序,因此它将作为设置的基础.我的想法基本上是至少2 VPS设置.每个服务器将运行相同的节点服务(假设两个服务器上同时使用5个不同的服务),每个VPS也运行一个Redis实例,Node实体使用该实例来存储数据.此设置的目的是在两个服务器之间启用数据镜像(如果第一个服务器中的节点服务#1向Redis添加了某些内容,则更改也应反映在第二个服务器中).这也意味着上传的文件等应该在两台服务器上进行镜像(从某种意义上说,数据存储和文件系统的变化必须反映在另一台服务器上).
理想情况下,这将实现在服务器之间共享负载的简单负载平衡器,并且在单个服务器发生故障的情况下,其他服务器将继续运行并因此保持节点服务联机.需要镜像更改的速度不高,即使是一分钟的延迟也不重要.但是,如果用户正在主动更新数据,则必须向他显示他刚刚更改的数据(在某种意义上,他必须以某种方式被迫与服务器通信,他更新了数据,因为更改可能没有镜像到其他服务器).
问题
>实现负载平衡的合理方法是什么?我听说
关于使用一些DNS魔术,但不是真的了解它.只需更新DNS
记录太慢,因为它们被缓存在多个地方.我也是
阅读有关使用一个处理平衡的“主代理”服务器的信息
其他服务器之间.这似乎有点风险,因为如果主要
服务器失败,一切都将脱机.
>如何在不同的VPS上镜像部分文件系统
上传的图像等将出现在两台服务器上.有没有
广泛的软件选项,或者是一个检测的简单脚本
上传然后在不同服务器上复制这些文件
正好?
> Redis甚至支持我描述的那种镜像吗?我只是
发现有关主从复制的信息,如果我
正确理解,意味着更新是单向的,在
感觉到主设备可以更新从设备,但从设备无法更新
大师.
谢谢!
解决方法
> DNS循环(负载平衡和故障转移)
>动态DNS(故障转移)
>代理(负载平衡和故障转移)
>本地IP故障转移(故障转移)
> BGP Anycast(负载均衡和故障转移)
DNS负载平衡很简单:假设您有两台(或更多)IPs为1.1.1.1和2.2.2.2的服务器.
要设置DNS负载平衡,请为主机名创建DNS记录,例如www.example.com:
www.example.com. A 1.1.1.1 A 2.2.2.2
(此外,DNS服务器应配置为以循环模式提供此名称,但它通常是默认值).
现在,每个到www.example.com的DNS请求都将以伪随机顺序回复两个地址,因此您的客户端可能会在服务器之间平均分配.
没有必要经常更新记录,一旦设置它永远有效.它还提供了一定程度的故障转移,就好像一台主机停机,浏览器超时然后尝试第二台主机,但可能会有相当大的延迟,用户也不会喜欢它.
动态DNS.可能添加到1.,一旦主机发生故障,动态更新DNS记录并删除对故障主机的引用,但DNS系统中的大量缓存会导致我上面提到的某些时期的性能下降.使用非常低的TTL可以改善情况,但仍然存在客户端操作系统/浏览器中不会考虑TTL的缓存,也有些ISP也不会忽视低TTL.无论如何,底线 – 这是实现平衡和基本故障转移的非常简单且经济实惠的方式.
代理.简单而流行的负载均衡.要消除单点故障,您需要将其与其他方法结合使用.
IP故障转移.作为2.的补充,为了应对代理本身的故障,在“IP故障转移”设置中使用的两个代理 – 基本思想是有一个IP地址通常出现在host1上,但一旦失败,host2检测到它并且IP到来在host2上.寻找linux“heartbeat”项目. (您也可以在没有代理的情况下自行故障转移服务器,但您不会进行平衡).通常,两台PC必须位于同一子网(同一数据中心).
选播.想法是将路由通告到几个物理位置的单个IP地址(实际上是单个子网).您需要自己的/ 24子网,以及配置BGP的能力.任播通常用于DNS服务器.持久性TCP连接存在困难,因此更容易适应UDP和DNS,但有时仍然用于Web.