地理位置分散的 VPS 集群是否可以充当一个 VPS?

地理位置分散的 VPS 集群是否可以充当一个 VPS?

我想要一个位于不同城市的 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.

相关内容