本篇文章给大家分享的是有关如何搭建mongodb架构Replica Set&Sharding—ttlsa,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 一分钟搭建mongodb架构Replica Set&Sharding—ttlsa 在测试试验阶段,我们需要有一个模拟的测试环境来测试应用程序和系统架构各个方面的功能,是否符合需求。在我公司,我常常使用下面的方法来为开发人员搭建mongodb的复制集和分片架构进行测试。我也常用这个方法来模拟线上架构,测试相关内容。 开启一个MongoDB shell,不连接任何mongod ? 创建复制集,一个primary两个secondary ? 1 | > replicaSet = newReplSetTest({"nodes": 3})
|
启动三个mongod实例 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | > replicaSet.startSet()
ReplSetTest Starting Set
ReplSetTest n is: 0
ReplSetTest n: 0ports: [ 31000, 31001, 31002] 31000number
{
"useHostName": true,
"oplogSize": 40,
"keyFile": undefined,
"port": 31000,
"noprealloc": "",
"smallfiles": "",
"rest": "",
"replSet": "testReplSet",
"dbpath": "$set-$node",
"restart": undefined,
"pathOpts": {
"node": 0,
"set": "testReplSet"
}
}
ReplSetTest Starting....
Resetting db path '/data/db/testReplSet-0'
ReplSetTest n is: 1
ReplSetTest n: 1ports: [ 31000, 31001, 31002] 31001number
{
"useHostName": true,
"oplogSize": 40,
"keyFile": undefined,
"port": 31001,
"noprealloc": "",
"smallfiles": "",
"rest": "",
"replSet": "testReplSet",
"dbpath": "$set-$node",
"restart": undefined,
"pathOpts": {
"node": 1,
"set": "testReplSet"
}
}
ReplSetTest Starting....
Resetting db path '/data/db/testReplSet-1'
ReplSetTest n is: 2
ReplSetTest n: 2ports: [ 31000, 31001, 31002] 31002number
{
"useHostName": true,
"oplogSize": 40,
"keyFile": undefined,
"port": 31002,
"noprealloc": "",
"smallfiles": "",
"rest": "",
"replSet": "testReplSet",
"dbpath": "$set-$node",
"restart": undefined,
"pathOpts": {
"node": 2,
"set": "testReplSet"
}
}
ReplSetTest Starting....
Resetting db path '/data/db/testReplSet-2'
|
复制集初始化 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | > replicaSet.initiate()
{
"replSetInitiate": {
"_id": "testReplSet",
"members": [
{
"_id": 0,
"host": "nd0302012029:31000"
},
{
"_id": 1,
"host": "nd0302012029:31001"
},
{
"_id": 2,
"host": "nd0302012029:31002"
}
]
}
}
|
启动了三个实例,分别监听在31000,31001,31002端口上 当前MongoDB shell窗口会有大量的日志信息输出,影响操作,另开启一个MongoDB shell ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # ./mongo --nodb
> conn1 = newMongo("localhost:31000")
> primaryDB = conn1.getDB("test") //testReplSet是默认的复制集测试名
test
> primaryDB.isMaster()
{
"setName": "testReplSet",
"ismaster": true,
"secondary": false,
"hosts": [
"nd0302012029:31000",
"nd0302012029:31002",
"nd0302012029:31001"
],
"primary": "nd0302012029:31000",
"me": "nd0302012029:31000",
"maxBsonObjectSize": 16777216,
"maxMessageSizeBytes": 48000000,
"localTime": ISODate("2013-07-28T04:23:49.866Z"),
"ok": 1
}
|
插入1000条文档 ? 1 2 3 | >for(i=0; i<<>1000; i++) { primaryDB.coll.insert({count: i}) }
> primaryDB.coll.count()
1000
|
创建第二个连接,连接到secondary ? 1 2 3 4 5 6 | > conn2 = newMongo("localhost:31001")
connection to localhost:31001
> secondaryDB = conn2.getDB("test")
test
> secondaryDB.coll.find() //默认情况下secondary不可读不可写
error: { "$err": "not master and slaveOk=false", "code": 13435}
|
允许secondary可读 ? 尝试想secondary写数据 ? 1 2 3 4 5 6 7 8 9 10 | > secondaryDB.coll.insert({"count": 1001})
> secondaryDB.runCommand({"getLastError": 1})
{
"err": "not master",
"code": 10058,
"n": 0,
"lastOp": Timestamp(0, 0),
"connectionId": 75,
"ok": 1
}
|
可看到secondary不接收客户端写操作 测试复制集的automatic failover功能: shutdown 31000实例 查看哪个实例变成primary 可见31002实例变成新的master 关闭replica set sharding简易搭建方法参见: http://www.ttlsa.com/html/1787.html 以上就是如何搭建mongodb架构Replica Set&Sharding—ttlsa,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注天达云行业资讯频道。
|