我有2个couchbase节点。
应该备份另一个,但我不希望服务器平衡它们之间的文档。
所以我尝试将它们添加到一个群集中,并将副本设置为“禁用”,但仍然可以平衡这两个服务器之间的文档。
然后我尝试将服务器用作不同的群集,并在它们之间进行复制。 我还在客户端配置中添加了这两个服务器:
<servers bucket="default" bucketPassword="private">
<add uri="http://server1ip/pools/default">
<add uri="http://server2ip/pools/default">
</servers>
当我关闭server1时,请求转到server2,因此备份工作正常!
但是我不确定我是否从server1上的客户端发送请求,它总是会选择最近的服务器(始终将请求发送到server1ip)。
我怎样才能做到这一点?
答案 0 :(得分:1)
创建Couchbase群集时,会将其视为“单个”数据库。数据始终分布在同一个集群中。
因此,如果要将数据自动“备份”到其他节点,则必须使用的是XDCR(跨数据中心复制),它将数据从一个群集复制到另一个群集。 (正如您所看到的,我没有使用“node”这个词,因为Couchbase数据库应该部署在多个节点上。)
我邀请您查看以下资源以了解详情:
答案 1 :(得分:0)
我认为负载均衡器会有所帮助。您可以将负载均衡器放在两个couchbase服务器的前面,并将每个客户端定向到负载均衡器。如果负载均衡器具有该功能,它可以根据某些内容确定首选服务器(IP地址?)。如果首选服务器不可用,则可以转到另一台服务器。
答案 2 :(得分:0)
如果在配置中添加2个服务器,我不确定couchbase选择最近的服务器,它可能只使用roundrobin。但是我注意到,配置中的服务器顺序会影响它们的负载,所以可能只有第一台服务器具有更高的优先级,但并非所有请求都会进入它。我还没有看到.Net客户端的任何配置选项设置其中一个服务器,如“主”和其他像“备份”。所以也许你可以试试:
在您的应用中创建两个couchbase连接(一个用于主服务器,一个用于备份:您需要两个配置部分)。如果主服务器上的某些操作失败,请重复请求备份。所以你的代码看起来像:
var getResult = _ClientMain.ExecuteGet(key); if(!getResult.Sucess){ getResult = _ClientBackup.ExecuteGet(key); }
修改.Net clien库以满足您的需求。