Couchbase 如何创建有备份但没有文档余额的2个节点

Couchbase 如何创建有备份但没有文档余额的2个节点,couchbase,Couchbase,我有两个couchbase节点 一个应该备份另一个,但我不希望服务器在它们之间平衡文档 因此,我尝试将它们都添加到一个集群中,并在bucket上将副本设置为“disable”,但它仍然可以平衡这两台服务器之间的文档 然后,我尝试将服务器用作不同的集群,并在它们之间进行复制。 我还在客户端配置中添加了这两台服务器: <servers bucket="default" bucketPassword="private"> <add uri="http://server1ip/

我有两个couchbase节点

一个应该备份另一个,但我不希望服务器在它们之间平衡文档

因此,我尝试将它们都添加到一个集群中,并在bucket上将副本设置为“disable”,但它仍然可以平衡这两台服务器之间的文档

然后,我尝试将服务器用作不同的集群,并在它们之间进行复制。 我还在客户端配置中添加了这两台服务器:

<servers bucket="default" bucketPassword="private">
    <add uri="http://server1ip/pools/default">
    <add uri="http://server2ip/pools/default">
</servers>

当我关闭server1时,请求转到server2,因此备份工作正常

但是我不确定是否从服务器1上的客户端发送请求,它将始终选择最近的服务器(将请求始终发送到服务器1IP)


如何实现这一点?

我认为负载平衡器会有所帮助。您可以在两个couchbase服务器前面放置一个负载平衡器,并将每个客户端指向负载平衡器。如果负载平衡器具有这种能力,它可以根据某些内容(ip地址?)确定首选服务器。如果首选服务器不可用,它可以转到另一台。

如果在配置中添加两台服务器,我不确定couchbase是否选择最近的服务器,它可以使用循环。但我注意到,服务器的配置顺序会影响它们的负载,所以可能只有第一个服务器具有更高的优先级,但并不是所有的请求都会转到它。我还没有看到.Net客户端的任何配置选项,可以将其中一个服务器设置为“main”,另一个服务器设置为“backup”。所以也许你可以试试:

  • 询问couchbase上的couchbase.net库开发人员是否有某种解决方案可以在配置中设置主服务器和备份服务器
  • 使用HA代理作为中间件,选择合适的运行服务器。(正如唐·迪金森所建议的那样)
  • 在应用程序中创建两个couchbase连接(一个用于主服务器,一个用于备份:您需要两个配置部分)。如果主服务器上的某些操作失败,请重复备份请求。因此,您的代码将如下所示:

    var getResult=_ClientMain.ExecuteGet(键); 如果(!getResult.success){ getResult=_ClientBackup.ExecuteGet(键); }

  • 修改.Net客户端库以满足您的需要


  • 当您创建Couchbase集群时,它被视为“单个”数据库。数据总是分布在同一个集群中

    因此,如果您想将数据自动“备份”到其他节点,您必须使用XDCR(跨数据中心复制),它将数据从一个集群复制到另一个集群。(如您所见,我没有使用“节点”一词,因为Couchbase数据库应该部署在多个节点上。)

    我邀请您查看以下资源以了解更多信息:

    • XDCR的通用文档:
    • 网络研讨会:

    有没有不使用负载平衡器就能实现这一点的方法?不知道。我只是提供了一个可能的解决方案:)我想不出其他方法来做你想做的事。如前所述,如果你有一个2节点群集,你不需要负载平衡器,因为它们是同一个“数据库”的一部分,负载将由客户端管理。谢谢你的评论。如何使用配置为备份的第二个群集?我的意思是,我如何定义我的客户机总是向集群A发送请求,但将集群B作为备份?因此,这里要做的就是将XDCR放在两个集群之间。所以,您将应用程序连接到ClusterA,并使用XDCR将单向复制a和B放在一起。你可以看一看:但是如果我在集群a上有一个客户端,它会一直转到该服务器而不是B吗?是的,你可以做的是,如果到集群a的连接丢失,你可以在代码中捕获它并重新连接到集群B。如果我在C#上写,我如何检查连接是否处于活动状态?我找不到任何API来检查连接是否处于活动状态。只能在尝试对Couchbase DB执行操作时执行此操作吗?