我想要一个位于不同城市的 3+ 个 VPS 服务器集群,其功能类似于一个 VPS 服务器,这意味着:
% 当我在集群中的一个 VPS 上更新文件时,它会在所有其他 VPS 上“自动”更新。
% 当我在一个 VPS 上运行一个命令时,它会自动在所有其他 VPS 上运行。
% 当我在一个 VPS 上更新数据库条目时,它会在所有其他 VPS 上自动更新(对于使用文件存储的数据库,这与第 1 点相同)
% 如果一个 VPS 出现故障,当其恢复时它会“赶上”。
换句话说,VPS 是彼此的精确镜像。
我意识到 IP 地址(甚至可能是 /etc/resolv.conf 和其他一些文件)肯定不同,但总体上看,它们对于外部查看者来说看起来是相同的。
由于 VPS 可能托管博客等,因此当浏览用户对博客发表评论时,必须保留镜像。换句话说,我不能拥有一个中央 VPS 并推出更新,因为用户可以在任何 VPS 上进行更改,而不仅仅是中央 VPS。
这样的东西存在吗?我尝试使用 iwatch 和 MySQL 复制来创建自己的,但实际上效果不佳。
我知道http://mediatemple.net/webhosting/gs/但这些服务器都在一个位置(和我上面描述的不完全一样)。
答案1
只要有合适的技术和预算,一切皆有可能。要了解需要做什么,请执行以下操作:
1:如果您使用某种 RDBMS(例如 MySQL),您可以轻松地在 2 个以上的 mysql 服务器之间设置主-主复制,这将确保所有写入都到达其他每个服务器,同时每个服务器都有自己的增量 ID。但是,高流量数据库总是会彼此滞后,具体取决于网络布局和每个 VPS 服务器之间的距离。
2:文件同步有点难。最简单的方法可能是让本地脚本每 N 分钟运行一次 rsync,以保持所有文件同步。如果这些只是单个 VPS,而不是每个数据中心的专用构建,那么这将是最简单的方法之一。
3:由于这些只是单个 VPS,因此负载平衡会很困难。您可以为每个 VPS IP 执行循环 DNS,但当主机停机时,这不是最有效的。您可以设置 TTL,但有些提供商不尊重 DNS TTL。
举个例子来说明一下由此构建的企业:
1:MySQL 在每个数据中心的主/次 DRBD 节点上运行,位于其自己的物理/虚拟机上。然后每个位置都设置主/主复制。每个数据中心都具有容错能力,但仍然存在上述滞后问题。
2:专用 SAN 来存储要与 24x7 复制共享的全局文件。这绝不便宜,但企业会这么做。
3:要么使用具有极低 TTL 的 DNS,要么使用 BGP 负载平衡设备。价格更贵,但能够实现更好的负载平衡算法 - 用户被放在更近的区域,或者在宕机或负载过重时避开该区域。
答案2
我不知道是否有像这样的现成的解决方案,但您可以使用 Amazon EC2 构建这样的集群。
答案3
从问题中无法看出选择实现技术的自由度有多大。如果您可以选择像 Cassandra 这样的分布式 nosql 数据库,那么在多个节点之间复制数据应该是可行的,前提是数据传播需要一两秒钟并不重要。
我不知道如何推送系统文件,但您可能可以使用集群文件系统甚至 rsync 推送静态 Web 内容。为了维护多台机器的状态,您可能需要研究 cfengine,它将帮助您维护多个机器上的软件包和配置。
如果您不怕麻烦,您可能也应该为这些盒子做网络系统日志记录。
答案4
Windows Server 2008 内置了您所寻找的功能。只需使用内置角色将服务器集群在一起,分配主节点(集群管理员),调整集群安全性和设置,然后添加 IIS、SQL 和其他作为集群的应用程序和服务。
肖恩·J.