应用程序参考mongo集群

时间:2015-10-10 20:20:27

标签: mongodb dns

任何需要连接到MongoDB副本集的应用程序都会有一个以下sort的URI用于连接到副本集:r.table('test').filter(function(doc) { return r.expr(['foo', 'bar']).contains(doc('name')) }) 。它有效地枚举了副本集成员的不同主机名。

然而,MongoDB副本集是动态的,成员列表可能会在应用程序的生命周期内发生变化。这在大多数情况下都很好 - 我相信如果它可以连接到URI中列出的单个主机,它将发现当前RS的任何其他成员。

如果副本集的成员资格具有完全转换率,并且没有MongoDB进程正在监听mongodb://host-1,host-2,host-3/?replicaSet=myReplicaSethost-1host-2,但现在他们已经在host-3host-4host-5处,URI停止有用。

我的问题是:确保您的应用程序引用永远无效的副本集的正确方法是什么?

您可以使用带有cnames的交错方法。为应用程序提供引用host-6,然后,当服务器添加/删除到副本集时,将更新cnames。

初始状态:

mongodb://host-a,host-b,host-c/?replicaSet=myReplicaSet

将服务器添加到RS:

CNAMES: host-a -> host-1, host-b -> host-2, host-c -> host-3
RS: host-1, host-2, host-3

在从RS中删除host-1之前,请更改host-a cname:

CNAMES: host-a -> host-1, host-b -> host-2, host-c -> host-3
RS: host-1, host-2, host-3, host-4

最后,从RS中删除host-1:

CNAMES: host-a -> host4, host-b -> host-2, host-c -> host-3
RS: host-1, host-2, host-3, host-4

这是解决此问题的适当方法,还是有更简单的方法?

0 个答案:

没有答案
相关问题