如果我有一个mongodb副本集,其中有3个节点(primary、secondary、arbiter),而primary节点出现故障,secondary采用primary,那么如何在客户端中动态处理该更改,以便它们现在写入primary?
我在一个开发环境中体验到了这一点,并开始考虑处理这一问题的最佳方法。这不是一个碎片集群,只是一个独立的副本集。
你是否检查了“isprimary”这样的连接,如果它不是你写的地方,你就改变了?
如有任何建议,将不胜感激。
谢谢,
S
最佳答案
一旦建立了连接,驱动程序就应该足够聪明,能够对数据应该发送到哪个节点进行排序。
For the C# driver
要连接到副本集,请通过提供
多个主机名(和端口号,如果需要)用逗号分隔。
例如:mongodb://server1,server2:27017,server2:27018
For the Python driver
可以使用
connection()构造函数,指定集合的一个或多个成员。
例如,以下任何一项都将创建到集合的连接
我们刚刚创建了:
Connection("morton.local", replicaset='foo')
Connection([u'morton.local:27019', 'morton.local:27017', u'morton.local:27018'])
Connection("morton.local:27018", replicaset='foo')
Connection([u'morton.local:27019', u'morton.local:27017', 'morton.local:27018'])
Connection("morton.local", 27019, replicaset='foo')
Connection(['morton.local:27019', u'morton.local:27017', u'morton.local:27018'])
Connection(["morton.local:27018", "morton.local:27019"])
Connection(['morton.local:27019', u'morton.local:27017', 'morton.local:27018'])
Connection("mongodb://morton.local:27017,morton.local:27018,morton.local:27019")
Connection(['morton.local:27019', 'morton.local:27017', 'morton.local:27018'])
传递给connection()的节点称为种子。如果只有一个
已指定主机必须使用replicaset参数来指示
这不是到单个节点的连接。只要至少有一个
种子在线,驱动程序将能够“发现”所有
并与当前主节点建立连接。
关于c# - 主要下降和辅助现在主要 - 如何写入新主要?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11990765/