我想要在不同的城市拥有3台VPS服务器,就像一台VPS服务器一样,这意味着:
%当我更新集群中的一个VPS上的文件时,它将在所有其他VPS上“自动”更新。
%当我在一台VPS上运行一个命令时,它会自动运行在其他所有的VPS上。
%当我更新一个VPS上的数据库条目时,它会自动更新所有其他数据(这与使用文件存储的数据库的第1点相同)
%如果一个VPS出现故障,当它恢复正常时,它会“赶上”。
换句话说,VPS是彼此精确的镜像。
我意识到IP地址(甚至可能是/etc/resolv.conf和其他一些文件)必须是不同的,但总体思路是,它们看起来与外部观众完全相同。
由于VPS可能主持博客等,当浏览用户在博客上发表评论时,必须保留镜像。 换句话说,我不能拥有一个中央VPS并推出更新,因为用户可以在任何VPS上进行更改,而不仅仅是中央VPS。
这样的事情存在吗? 我尝试使用iwatch和MySQL复制来创build自己的应用程序,但在实践中效果不佳。
我知道http://mediatemple.net/webhosting/gs/,但这些服务器都在一个位置(而不是我上面描述的)。
任何事情都可以通过正确的技术和预算来实现。 了解需要完成的工作:
1:如果你使用某种像MySQL这样的RDBMS,你可以很容易地在两台MySQL服务器之间build立Master-Master复制,这将确保所有的写入到达每个其他服务器,而每个服务器都有自己的增量ID。 但是,高stream量的数据库往往会相互落后,取决于每个VPS服务器之间的networking布局和距离。
2:文件同步有点难。 最简单的方法是让本地脚本每隔N分钟运行一次rsyncs,以保持所有文件同步。 如果这些只是单个VPS而不是每个数据中心专用的构build,那么这将是最简单的方法之一。
3:负载平衡将是艰难的,因为这些只是单个VPS。 您可以为每个VPS ip循环DNS,但是在主机closures时不是最有效的。 您可以设置TTL,但有些提供商不尊重DNS TTL。
举一个例子来说明一个企业是如何构build出来的:
1:在自己的物理/虚拟机上的每个Datacenter上的主/辅助DRBD节点上运行的MySQL。 然后,每个位置设置为主/主复制。 每个数据中心都具有容错能力,但仍然存在上述的滞后问题。
2:专用SAN来存储要与24×7复制共享的全局文件。 不是以任何方式便宜,而是企业做什么。
3:DNS使用非常低的TTL或BGP负载均衡设备。 更昂贵的,但将能够做得更好的负载平衡algorithm – 用户被放在更近的地区,或者当下来或重负载时避免区域。
我不知道这样的现成解决scheme,但是您可以使用Amazon EC2构build这样一个集群。
从这个问题来看,select实施技术有什么自由是不明确的。 如果你可以select像Cassandra这样的分布式nosql数据库,在许多节点上复制数据应该是可行的,假设数据传播需要花费一两秒钟的时间。
我不知道推送系统文件,但你可能推动静态网页内容与集群文件系统甚至rsync。 为了保持多台机器的状态,你可能想看看cfengine,这将帮助你保持包和configuration在许多boxen。
如果你遇到麻烦,你也应该为这些boxen做networking系统日志。
Windows Server 2008具有您正在查找的内容。只需使用内置angular色将服务器集中在一起,指派主节点(集群pipe理员),调整集群安全性和设置,然后添加IIS,SQL和其他作为集群的应用程序和服务。
肖恩·J