我有一个MongoDB实例,set up using a config file and a key file。在
我想initiate a replica set using pymongo。当我试图启动replcia集时,通过对将成为主副本集的服务器执行python脚本,如下所示:
from pymongo import MongoClient
uri = "mongodb://correctWorkingUsername:password@localhost:27017"
c = MongoClient(uri)
config = {'_id': 'RelicaSetName', 'members': [
{'_id': 0, 'host': 'FirstServer:27017'},
{'_id': 1, 'host': 'SecondServer:27017'},
{'_id': 2, 'host': 'ThirdServer:27017'}]}
c.admin.command("replSetInitiate", config)
我收到一条错误消息,如下所示:
^{pr2}$但是,如果我使用
mongo admin -u correctWorkingUsername -p password
我可以启动复制,并成功添加成员:
rs.initiate()
rs.add('SecondServer:27017')
我不确定这是否与keyfile身份验证有关,或者用户已经通过脚本在其他服务器上创建的事实有关。每台服务器都用一个配置文件启动,mongod.conf网站,其中包含副本集名称。在
为什么会失败?这个rs.启动()和印度卢比()工作得很好,但是python脚本不能正常工作,尽管它可以直接连接到数据库。在
当您一次初始化完整副本集时,每个节点都不应该有数据。在
当您将现有的单个节点转换为副本集时,其数据将成为副本集数据,然后添加其他节点会将数据复制到这些节点,从而清除其现有数据。在
您应该做的是启动节点,初始化副本集,然后然后创建用户(仅在主节点上)。在
这是核心问题-唯一可以对未初始化的副本集成员执行此操作的方法是,首先将其作为非副本集节点启动,然后添加用户,然后使用
replSet
选项重新启动。这不是正确的顺序。以获得正确的步骤列表check the docs。在相关问题 更多 >
编程相关推荐