我一直在按照教程中的步骤将副本集部署到开发/测试环境:http://docs.mongodb.org/manual/tutorial/deploy-replica-set/#deploy-a-development-or-test-replica-set
我有三个运行mongod.exe的实例,并且这三个实例都能正常连接。
我想在插件发生时验证Secondaries是否正确同步到Primary,但是当我执行Insert时,似乎没有任何迹象表明Secondaries正在跟进。
例如,我有一个MongoShell连接到主节点,我运行命令:
db.createCollection("testCol")
db.testCol.insert( { item: "card", qty: 15 } )
这会创建'testCol'集合并在其中插入一个值。
当我这样做时:
show collections
'testCol'集合显示正常,我插入的项目存在。
我的问题是: Secondaries不应该与主节点同步并复制集合和项目吗?
启动另一个MongoShell并连接到其中一个Secondaries,我发现我在Primary上创建的集合没有显示。
我只是误解了副本集的工作原理,还是我需要设置其他东西才能让Secondaries复制插入动作?
我按照我在开头提供的链接中的说明进行操作,因此我设置的所有配置都完全相同。
答案 0 :(得分:1)
那太令人尴尬了。
原来我正在查看我身边不正确的数据库。我配置的方式,我需要使用名为test
的数据库,但我一直在local
上插入。
回顾副本集的设置说明,我不太确定将MongoShell配置为连接到test
的位置,但是连接到该数据库并对主节点进行更改似乎可以解决所有问题。< / p>
以下是我的MongoShell连接到Primary的方式:
MongoDB shell version: 2.4.5
connecting to: 127.0.0.1.27017/test
首次设置MongoDB时,可能是否配置了与test
的连接?现在不太确定。
再看一下,看起来当你连接MongoShell时,它会自动连接到test
数据库。不知道如何更改我正在使用的快捷方式中的参数,以使其指向不同的数据库。
http://docs.mongodb.org/manual/reference/mongo-shell/#basic-shell-javascript-operations
在mongo shell中,db是引用当前的变量 数据库。该变量自动设置为默认数据库 test或在使用use切换当前数据库时设置。
我想这意味着您无法传入任何参数,而且您必须手动执行use <db>
?
发现它!
如果设置了mongo.exe的快捷方式,请将其设置为目标:
C:\mongodb\bin\mongo.exe <db name> --host <host> --port <port>
以前我只有--port
参数,但在其余部分添加允许我直接在特定数据库中启动。