【问题标题】:AppFabric RedundancyAppFabric 冗余
【发布时间】:2011-06-12 10:40:25
【问题描述】:

我们刚刚测试了一个由 2 台服务器组成的 AppFabric 集群,我们在其中移除了“主导”服务器。第二台服务器对它的任何请求都超时并出现错误:

Microsoft.ApplicationServer.Caching.DataCacheException: ErrorCode:SubStatus: 有一个暂时的故障。请稍后重试。 (一个或多个指定的缓存服务器不可用,这可能是由于网络或服务器繁忙造成的。确保已为集群上的此客户端帐户授予安全权限,并且允许 AppFabric 缓存服务通过所有缓存主机上的防火墙。请稍后重试。)

实际上,这意味着如果集群中的一台服务器宕机,那么它们都会宕机。 (注意我们没有使用 Windows 集群,只是将多个 AppFabric 缓存服务器相互链接。)

即使单个服务器出现故障,我也需要集群继续运行。我该怎么做?

(我意识到这个问题是 Serverfault 的边界问题,但恕我直言,开发人员应该知道这一点。)

【问题讨论】:

    标签: caching appfabric


    【解决方案1】:

    您必须在至少三台主要服务器上安装 AppFabric 缓存,以便缓存能够在单个服务器崩溃后幸免于难。文档指出,只有在“大多数”领先服务器出现故障时,集群才会出现故障,但在细则中,他们解释说 2 分之 1 构成多数。我已经验证了从三个前导节点集群中删除服务器的工作方式与宣传的一样。

    【讨论】:

      【解决方案2】:

      典型的分布式系统概念。要在 ensemble 中发生写入或读取仲裁,您需要有 2f + 1 个服务器,其中 f 是失败的服务器数。我认为 appfabric 或任何基于 CP(如 CAP 定理)共识的系统都需要这种情况才能使集群正常工作。

      --赛

      【讨论】:

      • 2f + 1 公式中“次要”的数量是多少?
      【解决方案3】:

      这实际上是 Appfabric 架构的一个问题,并且在“lead-host”概念方面相当混乱。这个想法是大多数主要主机应该运行,以便集群保持正常运行。因此,如果您有三台服务器,则必须至少有两台主要主机不断相互通信并消耗服务器资源,如果两者都出现故障,则整个集群都会失败。这个想法是建立一个点对点架构,其中所有服务器都充当对等点,这意味着即使两台服务器出现故障,集群仍然可以正常运行,不会导致应用程序停机。试试 NCache:

      http://www.alachisoft.com/ncache/

      【讨论】: