MongoDB集群配置帮助文档
- 格式:docx
- 大小:91.45 KB
- 文档页数:11
一、介绍随着互联网和大数据技术的不断发展,数据存储和管理的需求也越来越迫切。
在这样的背景下,NoSQL(Not Only SQL)数据库成为了一个备受关注的技术方向。
MongoDB作为NoSQL数据库中的一员,以其高性能、扩展性强、灵活的数据模型等特点,受到了业界的广泛关注和应用。
在实际应用中,随着数据量的增加,单机部署的MongoDB系统已经无法满足高可用、高并发的需求。
构建MongoDB集群已经成为了一种常见的做法,来保证数据的安全性、可靠性和性能。
本文将从零开始,详细介绍如何搭建一个MongoDB集群环境,以满足大规模数据存储和访问的需求。
在本文中,我们将介绍搭建MongoDB集群的前期准备工作、集群架构的设计、搭建过程中的注意事项以及搭建完成后的验证工作。
希望本文能对需要搭建MongoDB集群的读者提供一些帮助。
二、前期准备1. 硬件准备:在搭建MongoDB集群之前,需要做好硬件的准备工作。
包括选择适当配置的服务器、网络设备、磁盘空间等。
根据实际需要和预算,选择性能和可靠性较好的硬件设备。
2. 软件准备:除了硬件设备以外,还需要准备好操作系统、MongoDB数据库软件等。
选择稳定的操作系统版本,并安装MongoDB数据库软件的最新版本。
3. 网络规划:在搭建MongoDB集群之前,需要进行网络规划,包括IP位置区域的规划、子网划分、网络拓扑结构的设计等。
保证所有节点可以互相通信,并且保证数据在集群内的快速传输。
4. 安全性规划:在搭建MongoDB集群时,要考虑数据的安全性。
建议在搭建集群之前,设置好访问控制、认证授权等安全策略,以确保数据不被未授权的访问。
三、集群架构设计1. 架构选择:MongoDB集群可以采用不同的架构,包括副本集、分片集群等。
在设计集群架构时,需要根据实际需要选择合适的架构。
副本集适用于数据量较小,需要高可用的场景;分片集群适用于数据量较大,需要水平扩展的场景。
Mongodb集群配置(sharding with replica set)长期以来我就对分布式系统原理与实践非常感兴趣,对于Mongodb我一直很好奇,最近终于有时间能动手实验一把!我在一台Windows机器下搭建了一个Replica Sets + Sharding 测试集群环境,以此作为我后续对于Mongodb更进一步学习的实验平台。
只有一台windows机器,配置方案:1、3个分片sharding2、每一个分片由3个节点构成1主2备的Replica Sets3、3个配置节点Configsever4、1个路由节点Mongos分片复制集A(三个分片节点构成一个复制集):127.0.0.1:10000 127.0.0.1:10001 127.0.0.1:10002分片复制集B(三个分片节点构成一个复制集):127.0.0.1:20000 127.0.0.1:20001 127.0.0.1:20002分片复制集C(三个分片节点构成一个复制集):127.0.0.1:30000 127.0.0.1:30001 127.0.0.1:30002Configsvc(三个配置服务器节点):127.0.0.1:40000 127.0.0.1:40001 127.0.0.1:4002 mongos(一个路由节点):127.0.0.1:50000详细操作步骤如下:(1)下载mongodb-win32-i386-1.8.0下载mongodb-win32-i386-1.8.0版本的Mongodb,放置在d:/mongodb-win32-i386-1.8.0目录下。
(2)创建数据和日志文件目录进入d:/mongodb-win32-i386-1.8.0目录下创建如下目录创建数据文件目录:data/a/r0data/a/r1data/a/r2data/b/r0data/b/r1data/b/r2data/c/r0data/c/r1data/c/r2data/configsvr/r0data/configsvr/r1data/configsvr/r2创建日志文件目录:logs/alogs/blogs/clogs/configsvr(3)创建分片和复制集配置第一组:从命令行进入d:/mongodb-win32-i386-1.8.0/bin目录,分别执行如下命令!mongod.exe --logpath d:/mongodb-win32-i386-1.8.0/logs/a/r0.log --logappend --dbpath d:/mongodb-win32-i386-1.8.0/data/a/r0 --port 10000 --shardsvr--replSet setA --rest --oplogSize 64mongod.exe --logpath d:/mongodb-win32-i386-1.8.0/logs/a/r1.log --logappend --dbpath d:/mongodb-win32-i386-1.8.0/data/a/r1 --port 10001 --shardsvr--replSet setA --rest --oplogSize 64mongod.exe --logpath d:/mongodb-win32-i386-1.8.0/logs/a/r2.log --logappend --dbpath d:/mongodb-win32-i386-1.8.0/data/a/r2 --port 10002 --shardsvr--replSet setA --rest --oplogSize 64启动上述分片节点之后,再使用mongo的命令行来初始化复制集D:/mongodb-win32-i386-1.8.0/bin>call mongo.exe 127.0.0.1:10000/admin MongoDB shell version: 1.8.0connecting to: 127.0.0.1:10000/admin> config={_id: 'setA', members:[{_id:0,host:'127.0.0.1:10000'},{_id:1,host:'127.0.0.1:10001'},{_id:2,host:'127.0.0.1:10002'}]}{"_id" : "setA","members" : [{"_id" : 0,"host" : "127.0.0.1:10000"},{"_id" : 1,"host" : "127.0.0.1:10001"},{"_id" : 2,"host" : "127.0.0.1:10002"}]}setA> rs.initiate(config);配置第二组:从命令行进入d:/mongodb-win32-i386-1.8.0/bin目录,分别执行如下命令!mongod.exe --logpath d:/mongodb-win32-i386-1.8.0/logs/b/r0.log --logappend --dbpath d:/mongodb-win32-i386-1.8.0/data/b/r0 --port 20000 --shardsvr--replSet setB --rest --oplogSize 64mongod.exe --logpath d:/mongodb-win32-i386-1.8.0/logs/b/r1.log --logappend --dbpath d:/mongodb-win32-i386-1.8.0/data/b/r1 --port 20001 --shardsvr--replSet setB --rest --oplogSize 64mongod.exe --logpath d:/mongodb-win32-i386-1.8.0/logs/b/r2.log --logappend --dbpath d:/mongodb-win32-i386-1.8.0/data/b/r2 --port 20002 --shardsvr--replSet setB --rest --oplogSize 64启动上述分片节点之后,再使用mongo的命令行来初始化复制集D:/mongodb-win32-i386-1.8.0/bin>call mongo.exe 127.0.0.1:20000/admin MongoDB shell version: 1.8.0connecting to: 127.0.0.1:20000/admin> config={_id: 'setB', members:[{_id:0,host:'127.0.0.1:20000'},{_id:1,host:'127.0.0.1:20001'},{_id:2,host:'127.0.0.1:20002'}]}{"_id" : "setB","members" : [{"_id" : 0,"host" : "127.0.0.1:20000"},{"_id" : 1,"host" : "127.0.0.1:20001"},{"_id" : 2,"host" : "127.0.0.1:20002"}]}> rs.initiate(config);配置第三组:从命令行进入d:/mongodb-win32-i386-1.8.0/bin目录,分别执行如下命令!mongod.exe --logpath d:/mongodb-win32-i386-1.8.0/logs/c/r0.log --logappend --dbpath d:/mongodb-win32-i386-1.8.0/data/c/r0 --port 30000 --shardsvr--replSet setC --rest --oplogSize 64mongod.exe --logpath d:/mongodb-win32-i386-1.8.0/logs/c/r1.log --logappend --dbpath d:/mongodb-win32-i386-1.8.0/data/c/r1 --port 30001 --shardsvr--replSet setC --rest --oplogSize 64mongod.exe --logpath d:/mongodb-win32-i386-1.8.0/logs/c/r2.log --logappend --dbpath d:/mongodb-win32-i386-1.8.0/data/c/r2 --port 30002 --shardsvr--replSet setC --rest --oplogSize 64D:/mongodb-win32-i386-1.8.0/bin>call mongo.exe 127.0.0.1:30000/admin MongoDB shell version: 1.8.0connecting to: 127.0.0.1:30000/admin> config={_id: 'setC', members:[{_id:0,host:'127.0.0.1:30000'},{_id:1,host:'127.0.0.1:30001'},{_id:2,host:'127.0.0.1:30002'}]}{"_id" : "setC","members" : [{"_id" : 0,"host" : "127.0.0.1:30000"},{"_id" : 1,"host" : "127.0.0.1:30001"},{"_id" : 2,"host" : "127.0.0.1:30002"}]}> rs.initiate(config);(4)启动三个配置服务节点Configsvr从命令行分别执行如下命令,配置三个Configsvr cd d:/mongodb-win32-i386-1.8.0/bincall mongod.exe --configsvr --logpathd:/mongodb-win32-i386-1.8.0/logs/configsvr/r0.log --logappend --dbpath d:/mongodb-win32-i386-1.8.0/data/configsvr/r0 --port 40000 --shardsvrcd d:/mongodb-win32-i386-1.8.0/bincall mongod.exe --configsvr --logpathd:/mongodb-win32-i386-1.8.0/logs/configsvr/r1.log --logappend --dbpath d:/mongodb-win32-i386-1.8.0/data/configsvr/r1 --port 40001 --shardsvrcd d:/mongodb-win32-i386-1.8.0/bincall mongod.exe --configsvr --logpathd:/mongodb-win32-i386-1.8.0/logs/configsvr/r2.log --logappend --dbpath d:/mongodb-win32-i386-1.8.0/data/configsvr/r2 --port 40002 --shardsvr (5)启动一个路由节点mongoscd d:/mongodb-win32-i386-1.8.0/bincall mongos.exe --configdb 127.0.0.1:40000,127.0.0.1:40001,127.0.0.1:40002 --logpath d:/mongodb-win32-i386-1.8.0/logs/mongos.log --logappend --port 50000(6)配置分片D:/mongodb-win32-i386-1.8.0/cmd>cd d:/mongodb-win32-i386-1.8.0/bin D:/mongodb-win32-i386-1.8.0/bin>call mongo.exe 127.0.0.1:50000 MongoDB shell version: 1.8.0connecting to: 127.0.0.1:50000/test> use adminswitched to db admin>db.runCommand({addshard:"setA/127.0.0.1:10000,127.0.0.1:10001,127.0.0.1:10002 ",name:"ShardSetA"}){ "shardAdded" : "ShardSetA", "ok" : 1 }>db.runCommand({addshard:"setB/127.0.0.1:20000,127.0.0.1:20001,127.0.0.1:20002 ",name:"ShardSetB"}){ "shardAdded" : "ShardSetB", "ok" : 1 }>db.runCommand({addshard:"setC/127.0.0.1:30000,127.0.0.1:30001,127.0.0.1:30002 ",name:"ShardSetC"}){ "shardAdded" : "ShardSetC", "ok" : 1 }> printShardingStatus()--- Sharding Status ---sharding version: { "_id" : 1, "version" : 3 }shards:{"_id" : "ShardSetA","host" : "setA/127.0.0.1:10000,127.0.0.1:10001,127.0.0.1:10002"标准实用文案}{"_id" : "ShardSetB","host" : "setB/127.0.0.1:20000,127.0.0.1:20001,127.0.0.1:20002"}{"_id" : "ShardSetC","host" : "setC/127.0.0.1:30000,127.0.0.1:30001,127.0.0.1:30002"}databases:{ "_id" : "admin", "partitioned" : false, "primary" : "config" }配置到这里,集群搭建完毕了!在完成了集群的搭建工作之后,需要做的就是建立一个数据库,建立表,设置分片主键来初始化数据了!文档。
mongodb分片集群(shardingwithreplicaset)配置一共有4台机器,各自挂接一个存储,希望实现:1.尽量节约存储2.高可用性3.存储大量数据配置方案:1.每一台机器做一个分片的主数据库2.每一台机器做一个分片的后备数据库3.每一台机器做一个分片的仲裁服务4.两个两个一组交叉作对方的后备5.有三台机器开配置服务6.有一台机器开路由服务(生产环境可以在每一台Windows App服务器上开路由服务,App服务器集群做负载均衡)这样的话,任何一台服务器完全离线(或者交叉的两台服务器离线),都能保证整个系统正常运行。
不过在服务器和服务器起来之后需要:1.在升级成为主数据库的那个后备数据库上运行rs.StepDown(100)来让它让出主数据库的位置,因为每一个分片的活动数据库都应该由独立服务器担当,以获得最好的性能2.配置服务和后备数据库起来之后不需要做任何调整192.168.129.142mkdir -p /usr/data/shard1mkdir -p /usr/data/shard2mkdir -p /usr/data/shard3mkdir -p /usr/data/config1/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongod --fork --shardsvr --port 10001 --dbpath /usr/data/shard1/ --logpath /usr/data/shard1/log.log --replSet shard1 --rest/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongod --fork --shardsvr --port 10002 --dbpath /usr/data/shard2/ --logpath /usr/data/shard2/log.log --replSet shard2 --rest/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongod --fork --shardsvr --port 10003 --dbpath /usr/data/shard3/ --logpath /usr/data/shard3/log.log --replSet shard3 --rest/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongod --fork --configsvr --port 20001 --dbpath /usr/data/config1/ --logpath /usr/data/config1/log.log --restps aux | grep mongodb | grep -v grep/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongo --port 10001config = {_id: 'shard1', members: [{_id: 0, host: '192.168.129.142:10001'},{_id: 1, host: '192.168.129.172:10001'},{_id: 2, host: '192.168.129.173:10001', arbiterOnly: true}]}rs.initiate(config)rs.status()192.168.129.172mkdir -p /usr/data/shard2mkdir -p /usr/data/shard1mkdir -p /usr/data/shard4mkdir -p /usr/data/config2/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongod --fork --shardsvr --port 10002 --dbpath /usr/data/shard2/ --logpath /usr/data/shard2/log.log --replSet shard2 --rest/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongod --fork --shardsvr --port 10001 --dbpath /usr/data/shard1/ --logpath/usr/data/shard1/log.log --replSet shard1 --rest/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongod --fork --shardsvr --port 10004 --dbpath /usr/data/shard4/ --logpath /usr/data/shard4/log.log --replSet shard4 --rest/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongod --fork --configsvr --port 20002 --dbpath /usr/data/config2/ --logpath /usr/data/config2/log.log --restps aux | grep mongodb | grep -v grep/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongo --port 10002config = {_id: 'shard2', members: [{_id: 0, host: '192.168.129.172:10002'},{_id: 1, host: '192.168.129.142:10002'},{_id: 2, host: '192.168.129.175:10002', arbiterOnly: true}]}rs.initiate(config)rs.status()192.168.129.173mkdir -p /usr/data/shard3mkdir -p /usr/data/shard4mkdir -p /usr/data/shard1mkdir -p /usr/data/config3/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongod --fork --shardsvr --port 10003 --dbpath /usr/data/shard3/ --logpath /usr/data/shard3/log.log --replSet shard3 --rest/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongod --fork --shardsvr --port 10004 --dbpath /usr/data/shard4/ --logpath /usr/data/shard4/log.log --replSet shard4 --rest/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongod --fork--shardsvr --port 10001 --dbpath /usr/data/shard1/ --logpath /usr/data/shard1/log.log --replSet shard1 --rest/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongod --fork --configsvr --port 20003 --dbpath /usr/data/config3/ --logpath /usr/data/config3/log.log --restps aux | grep mongodb | grep -v grep/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongo --port 10003config = {_id: 'shard3', members: [{_id: 0, host: '192.168.129.173:10003'},{_id: 1, host: '192.168.129.175:10003'},{_id: 2, host: '192.168.129.142:10003', arbiterOnly: true}]}rs.initiate(config)rs.status()192.168.129.175mkdir -p /usr/data/shard4mkdir -p /usr/data/shard3mkdir -p /usr/data/shard2mkdir -p /usr/data/master/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongod --fork --shardsvr --port 10004 --dbpath /usr/data/shard4/ --logpath /usr/data/shard4/log.log --replSet shard4 --rest/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongod --fork --shardsvr --port 10003 --dbpath /usr/data/shard3/ --logpath /usr/data/shard3/log.log --replSet shard3 --rest/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongod --fork --shardsvr --port 10002 --dbpath /usr/data/shard2/ --logpath /usr/data/shard2/log.log --replSet shard2 --rest/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongos --fork --port 40000 --logpath /usr/data/master/log.log --chunkSize 1 "192.168.129.142:20001,192.168.129.172:20002,192.168.129 .173:20003"ps aux | grep mongodb | grep -v grep/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongo --port 10004config = {_id: 'shard4', members: [{_id: 0, host: '192.168.129.175:10004'},{_id: 1, host: '192.168.129.173:10004'},{_id: 2, host: '192.168.129.172:10004', arbiterOnly: true}]}rs.initiate(config)rs.status()/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongo --port 40000use admindb.runCommand({ addshard:'shard1/192.168.129.142:10001 ,192.168.129.172:10001' })db.runCommand({ addshard:'shard2/192.168.129.172:10002 ,192.168.129.142:10002' })db.runCommand({ addshard:'shard3/192.168.129.173:10003 ,192.168.129.175:10003' })db.runCommand({ addshard:'shard4/192.168.129.175:10004 ,192.168.129.173:10004' })db.runCommand({ listshards:1 })db.runCommand({ enablesharding:'test' })db.runCommand({ shardcollection:'test.data', key:{_id:1} }) printShardingStatus()插入大量数据后的结果:db.data.stats(){"sharded" : true,"ns" : "test.data","count" : 1992002,"size" : 2103555152, "avgObjSize" : 1056.0005220878293, "storageSize" : 2464232960, "nindexes" : 1, "nchunks" : 23,"shards" : {"shard1" : {"ns" : "test.data","count" : 1271788,"size" : 1343008448, "avgObjSize" : 1056.0002516142627, "storageSize" : 1568785152, "numExtents" : 25, "nindexes" : 1, "lastExtentSize" : 267987712, "paddingFactor" : 1, "flags" : 1, "totalIndexSize" : 52658176, "indexSizes" : {"_id_" : 52658176},"ok" : 1},"shard2" : {"ns" : "test.data", "count" : 98494,"size" : 104009808, "avgObjSize" : 1056.001462017991, "storageSize" : 111137536, "numExtents" : 12, "nindexes" : 1, "lastExtentSize" : 25047552, "paddingFactor" : 1, "flags" : 1, "totalIndexSize" : 4087808, "indexSizes" : {"_id_" : 4087808},"ok" : 1},"shard3" : {"ns" : "test.data", "count" : 487410,"size" : 514705248, "avgObjSize" : 1056.000590878316, "storageSize" : 607047424, "numExtents" : 20, "nindexes" : 1, "lastExtentSize" : 107698688, "paddingFactor" : 1, "flags" : 1, "totalIndexSize" : 20250624, "indexSizes" : {"_id_" : 20250624},"ok" : 1},"shard4" : {"ns" : "test.data","count" : 134310,"size" : 141831648, "avgObjSize" : 1056.0021442930533, "storageSize" : 177262848, "numExtents" : 14, "nindexes" : 1, "lastExtentSize" : 36068352, "paddingFactor" : 1,"flags" : 1, "totalIndexSize" : 5570560, "indexSizes" : {"_id_" : 5570560},"ok" : 1}},"ok" : 1}printShardingStatus()--- Sharding Status ---sharding version: { "_id" : 1, "version" : 3 } shards:{"_id" : "shard1","host" : "shard1/192.168.129.142:10001,192.168.129.172:10001"}{"_id" : "shard2","host" : "shard2/192.168.129.172:10002,192.168.129.142:10002"}{"_id" : "shard3","host" : "shard3/192.168.129.173:10003,192.168.129.175:10003"}{"_id" : "shard4","host" : "shard4/192.168.129.175:10004,192.168.129.173:10004"}databases:{ "_id" : "admin", "partitioned" : false, "primary" : "config" }{ "_id" : "test", "partitioned" : true, "primary" : "shard1" }test.data chunks:{ "_id" : { $minKey : 1 } } -->> { "_id" : ObjectId("4d01c5bc926adb17b8000001") } on : shard2 { "t" : 8000, "i" : 0 }{ "_id" : ObjectId("4d01c5bc926adb17b8000001") } -->> { "_id" : ObjectId("4d01c620926adb17b800d1dd") } on : shard2 { "t" : 10000, "i" : 0 }{ "_id" : ObjectId("4d01c620926adb17b800d1dd") } -->> { "_id" : ObjectId("4d01c669926adb17b80180bf") } on : shard4{ "t" : 9000, "i" : 0 }{ "_id" : ObjectId("4d01c669926adb17b80180bf") } -->> { "_id" : ObjectId("4d01c6b6926adb17b8022fa1") } on : shard2 { "t" : 12000, "i" : 0 }{ "_id" : ObjectId("4d01c6b6926adb17b8022fa1") } -->> { "_id" : ObjectId("4d01c6fd926adb17b802de83") } on : shard1 { "t" : 5000, "i" : 1 }{ "_id" : ObjectId("4d01c6fd926adb17b802de83") } -->> { "_id" : ObjectId("4d01c74c926adb17b8038d65") } on : shard4 { "t" : 11000, "i" : 0 }{ "_id" : ObjectId("4d01c74c926adb17b8038d65") } -->> { "_id" : ObjectId("4d01c795926adb17b8043c47") } on : shard4 { "t" : 13000, "i" : 0 }{ "_id" : ObjectId("4d01c795926adb17b8043c47") } -->> { "_id" : ObjectId("4d01c7e6926adb17b804eb29") } on : shard1 { "t" : 6000, "i" : 2 }{ "_id" : ObjectId("4d01c7e6926adb17b804eb29") } -->> { "_id" : ObjectId("4d01c82f926adb17b8059a0b") } on : shard1 { "t" : 6000, "i" : 4 }{ "_id" : ObjectId("4d01c82f926adb17b8059a0b") } -->> { "_id" : ObjectId("4d01c8d4926adb17b806f7cf") } on : shard1 { "t" : 12000, "i" : 1 }{ "_id" : ObjectId("4d01c8d4926adb17b806f7cf") } -->> { "_id" : ObjectId("4d01c963926adb17b8085593") } on : shard3 { "t" : 7000, "i" : 2 }{ "_id" : ObjectId("4d01c963926adb17b8085593") } -->> { "_id" : ObjectId("4d01ca1c926adb17b809b357") } on : shard3 { "t" : 7000, "i" : 4 }{ "_id" : ObjectId("4d01ca1c926adb17b809b357") } -->> { "_id" : ObjectId("4d01caf7926adb17b80b306a") } on : shard3{ "t" : 7000, "i" : 6 }{ "_id" : ObjectId("4d01caf7926adb17b80b306a") } -->> { "_id" : ObjectId("4d01cbc2926adb17b80d09fd") } on : shard3 { "t" : 13000, "i" : 2 }{ "_id" : ObjectId("4d01cbc2926adb17b80d09fd") } -->> { "_id" : ObjectId("4d01cc54926adb17b80e67c1") } on : shard3 { "t" : 14000, "i" : 1 }{ "_id" : ObjectId("4d01cc54926adb17b80e67c1") } -->> { "_id" : ObjectId("4d01cec7926adb125c00d1dc") } on : shard1 { "t" : 14000, "i" : 2 }{ "_id" : ObjectId("4d01cec7926adb125c00d1dc") } -->> { "_id" : ObjectId("4d01ced2926adb125c022fa0") } on : shard1 { "t" : 14000, "i" : 4 }{ "_id" : ObjectId("4d01ced2926adb125c022fa0") } -->> { "_id" : ObjectId("4d01cedf926adb125c038d64") } on : shard1 { "t" : 14000, "i" : 6 }{ "_id" : ObjectId("4d01cedf926adb125c038d64") } -->> { "_id" : ObjectId("4d01ceeb926adb125c04eb28") } on : shard1 { "t" : 14000, "i" : 8 }{ "_id" : ObjectId("4d01ceeb926adb125c04eb28") } -->> { "_id" : ObjectId("4d01cf1a926adb125c07a6ab") } on : shard1 { "t" : 14000, "i" : 10 }{ "_id" : ObjectId("4d01cf1a926adb125c07a6ab") } -->> { "_id" : ObjectId("4d01cf3c926adb125c0a622e") } on : shard1 { "t" : 14000, "i" : 12 }{ "_id" : ObjectId("4d01cf3c926adb125c0a622e") } -->> { "_id" : ObjectId("4d01cf52926adb125c0d1db1") } on : shard1 { "t" : 14000, "i" : 14 }{ "_id" : ObjectId("4d01cf52926adb125c0d1db1") } -->> { "_id" : ObjectId("4d01d58c926adb16480096f4") } on : shard1{ "t" : 14000, "i" : 16 }{ "_id" : ObjectId("4d01d58c926adb16480096f4") } -->> { "_id" : { $maxKey : 1 } } on : shard1 { "t" : 14000, "i" : 17 }另,这套配置插入1万条1KB数据的时间大约在1.4秒,如果使用最简单单进程配置的话速度稍快,在1.2秒,性能下降不是很厉害,可以接受。
MongoDB数据库技术手册MongoDB是一个高性能、可扩展的开源数据库管理系统,由于其灵活的数据模型和强大的查询能力,成为了当今互联网应用开发中备受关注的选择之一。
本手册旨在为读者提供MongoDB数据库技术的全面介绍,包括概述、安装配置、基本操作、高级查询、数据建模和性能调优等方面的内容。
一、概述1.1 MongoDB数据库概述MongoDB是一种非关系型数据库,旨在解决传统关系型数据库在大数据应用场景下的性能瓶颈问题。
它采用文档型数据存储方式,支持灵活的数据模型和快速的数据查询。
1.2 MongoDB的特点MongoDB具有许多令人称赞的特点,例如高可扩展性、灵活的数据模型、强大的查询语言、高性能读写操作以及分布式存储和自动故障恢复等。
二、安装配置2.1 MongoDB的安装在本节中,我们将介绍MongoDB的安装步骤,包括下载安装包、解压缩、配置环境变量等操作。
2.2 MongoDB的配置配置文件是MongoDB配置的重要组成部分,我们将介绍如何修改配置文件以满足具体需求,并说明其中的重要参数及其作用。
三、基本操作3.1 数据库的创建和删除在本节中,我们将学习如何创建和删除MongoDB数据库,并介绍相关的命令和操作。
3.2 集合的创建和删除集合是MongoDB中的数据组织单元,我们将学习如何创建和删除集合,并介绍集合相关的操作方法。
3.3 文档的插入、查询和删除文档是MongoDB中的基本数据单元,我们将介绍如何插入、查询和删除文档,并介绍查询条件、投影、排序等操作。
四、高级查询4.1 条件查询MongoDB支持丰富的查询操作符,我们将介绍常用的查询操作符,并说明它们的使用方法和示例。
4.2 聚合操作聚合操作可以对文档进行分组、筛选、排序和计算等操作,我们将介绍聚合管道的使用方法和常见的聚合操作。
4.3 索引的创建和使用索引可以提高查询性能,我们将介绍如何创建和使用索引,并介绍常见的索引类型和使用场景。
说明1、集群的组件A、mongos(query routers):查询路由,负责client的连接,并把任务分给shards,然后收集结果。
一个集群可以有多个query routers(replica sets),以分担客户端请求(负载均衡)。
B、config server:配置服务器。
保存了集群的元数据(比如数据放在哪个shards上),query router通过config server中的配置信息决定把任务分配到哪个shards上。
从3.2开始,config servers可以做成replica sets。
C、shards:分片,即数据结点,存储数据和执行计算。
为了保证高可用和数据一致性,生产环境中shards应该做成replicasets(防止丢失数据)。
2、IP及端口规划3、linux目录规划一、准备工作1、下载mongodb软件https:///download-center?jmp=nav#community2、服务器IP设置[root@node1]$vi /etc/sysconfig/network-scripts/ifcfg-eth0 将BOOTPROTO=dhcp修改成=static,将ONBOOT=no 改成=yes在文件末添加:IPADDR=192.168.75.10NETMASK=255.255.255.0GATEWAY=192.168.75.1[root@node1]$service network restart3、新建用户组及用户[root@node1]$groupadd minstall[root@node1]$groupadd dba[root@node1]$useradd -g minstall -G dba -m mongo[root@node1]$passwd mongo4、开放端口根据上面端口的规划,将相应的端口开放。
[root@node1]$vi /etc/sysconfig/iptables-A INPUT -m state --state NEW -m tcp -p tcp --dport 17017 -j ACCEPT-A INPUT -m state --state NEW -m tcp -p tcp --dport 27017 -j ACCEPT-A INPUT -m state --state NEW -m tcp -p tcp --dport 37017 -j ACCEPT-A INPUT -m state --state NEW -m tcp -p tcp --dport 47017 -j ACCEPT-A INPUT -m state --state NEW -m tcp -p tcp --dport 57017 -j ACCEPT5、重启服务器,以mongo用户登录系统[root@node1]$reboot6、建立相应的目录[mongo@node1]$mkdir -p /home/mongo/dbs/{config,router,shard}[mongo@node1]$mkdir -p /home/mongo/dbs/config/{data,logs}[mongo@node1]$mkdir -p /home/mongo/dbs/router/logs[mongo@node1]$mkdir -p /home/mongo/dbs/shard/{data,logs}[mongo@node1]$mkdir -p /home/mongo/dbs/shard/data/{shard1,shard2,shard3} 7、安装mongo实例在每台服务器上分别安装3个mongo实例:route、config、shard。
MongoDB的安装及配置⽂件选项全解安装部分1. 安装包1.1 mongodb-org可以⾃动安装以下的四个包1.2 mongodb-org-servermongod进程和配置⽂件,启动脚本1.3 mongodb-org-mongosmongos进程1.4 mongodb-org-shellmongo shell1.5 mongodb-org-tools其他mongodb⼯具,mongoimport,mongoexport,mongodump,mongrestore,mongofiles,bsondump,mongooplog,mongoperf,mongostat,mongotop, (mongosniff)2. 脚本⽂件2.1 /etc/rc.d/init.d/mongod启动脚本2.2 /etc/mongod.conf配置⽂件3. 安装mongodb3.1 配置yum源/etc/yum.repos.d/mongodb.repo ->[mongodb]name=MongoDB Repositorybaseurl=/repo/redhat/os/x86_64/gpgcheck=0enabled=1如果是32bit系统[mongodb]name=MongoDB Repositorybaseurl=/repo/redhat/os/i686/gpgcheck=0enabled=13.2 安装mongodb版本sudo yum install mongodb-org安装指定版本mongodbyum install mongodb-org-2.6.1 mongodb-org-server-2.6.1 mongodb-org-shell-2.6.1 mongodb-org-mongos-2.6.1 mongodb-org-tools-2.6.13.3 为了避免⽆意识的升级/etc/yum.conf ->exclude=mongodb-org,mongodb-org-server,mongodb-org-shell,mongodb-org-mongos,mongodb-org-tools4. 运⾏mongodb注意mongodb的默认端⼝和SELinux服务的状态。
MongoDB_使用手册-中文版MongoDB 使用手册-中文版1:简介1.1 MongoDB 简介1.2 MongoDB 的优势1.3 安装 MongoDB1.4 启动和关闭 MongoDB2:数据库操作2.1 创建数据库2.2 切换数据库2.3 删除数据库2.4 数据库的备份和还原2.5 数据库的访问控制3:集合操作3.1 创建集合3.2 删除集合3.3 查找集合3.4 更新集合3.5 排序和限制集合结果4:文档操作4.1 插入文档4.2 查询文档4.3 更新文档4.4 删除文档4.5 索引和性能优化5:聚合操作5.1 聚合管道5.2 查询优化技巧5.3 数据分析和处理6:数据备份和恢复6.1 数据备份策略6.2 数据恢复方法7:复制和分片7.1 复制集7.2 分片集群8:安全性和权限控制8.1 认证和授权8.2 数据加密8.3 安全配置建议9: MongoDB 驱动程序9.1 Python 驱动程序 9.2 Java 驱动程序9.3 Node:js 驱动程序 9.4 :NET 驱动程序10:性能调优10:1 集合级别的优化 10:2 查询优化10:3 索引优化10:4 内存和磁盘配置11:故障排除11.1 常见问题11.2 日志分析11.3 性能监控12: MongoDB 与关系型数据库的比较12.1 数据模型比较12.2 查询语言比较12.3 事务和一致性比较本文档涉及附件:1:示例代码文件:[附件1](附件1:zip)2:配置文件示例:[附件2](附件2:txt)本文所涉及的法律名词及注释:1:认证和授权:指通过身份验证和权限控制来确保只有经过授权的用户才能访问和操作数据库的过程。
2:数据加密:指使用加密算法对数据库中的敏感数据进行加密保护的过程。
3:复制集:指一组 MongoDB 服务器的集合,其中包含主服务器(primary)和多个副本服务器(secondary),用于提供数据冗余和高可用性支持。
mongodb操作手册MongoDB是一种流行的文档型数据库,逐渐成为许多公司的首选。
但是,操作MongDB可能对新手来说有些棘手。
下面将为你提供MongoDB操作手册,以帮助你更高效地操作MongoDB。
1. 安装MongoDB首先,你需要安装MongoDB。
在MongoDB官网下载传递给操作系统的安装包(Windows、Linux或Mac OS),然后按照安装向导完成安装。
2. 启动MongoDB一旦安装完成,你便可以启动MongoDB。
在命令行中输入mongod 命令,这将启动MongoDB服务。
mongodb://localhost:27017是默认的MongoDB连接字符串。
这将启动默认的MongoDB实例,并连接到localhost上的端口27017。
3. 创建数据库当你成功启动MongoDB服务之后,你可以创建你的数据库。
使用MongoDB的命令createDatabase()可以轻松创建一个新的数据库。
只需在命令行中输入以下命令:> use mydatabasemydatabase是你所创建的数据库名称。
4. 插入数据在创建数据库之后,你可以开始向数据库中插入数据。
使用insert()命令,可以将数据插入到指定的集合中。
如下所示:> db.myCollection.insert( { name: "Tom", age: 25 } )这将在myCollection集合中插入一条数据。
注意,如果指定的集合还不存在,MongoDB会自动创建该集合。
5. 查询数据当你插入了许多数据之后,你可能需要查询数据。
使用find()命令,可以查找指定集合中的数据。
如下所示:> db.myCollection.find()这将为你提供myCollection集合中的所有文档。
你也可以使用过滤器,如下所示:> db.myCollection.find( { name: "Tom" } )这将为你提供名称为Tom的所有文档。
mongodb的配置⽂件详解()以下页⾯描述了MongoDB 4.0中可⽤的配置选项。
有关其他版本MongoDB的配置⽂件选项,请参阅相应版本的MongoDB⼿册。
配置⽂件您可以使⽤配置⽂件在启动时配置和实例。
配置⽂件包含与命令⾏选项等效的设置。
请参阅。
使⽤配置⽂件可以简化管理和选项,尤其适⽤于⼤规模部署。
您还可以向配置⽂件添加注释以解释服务器的设置。
在Linux上,/etc/mongod.conf使⽤包管理器安装MongoDB时会包含默认配置⽂件。
在Windows上,安装期间包含默认配置⽂件。
<install directory>/bin/mongod.cfg在macOS上,安装不包含默认配置⽂件; 相反,要使⽤配置⽂件,请创建⼀个⽂件。
⽂件格式在2.6版中更改: MongoDB 2.6引⼊了基于YAML的配置⽂件格式。
的仍是向后兼容性。
MongoDB配置⽂件使⽤格式。
以下⽰例配置⽂件包含可以适应本地配置的⼏个设置:注意YAML不⽀持缩进的制表符:使⽤空格代替。
复制systemLog:destination: filepath: "/var/log/mongodb/mongod.log"logAppend: truestorage:journal:enabled: trueprocessManagement:fork: truenet:bindIp: 127.0.0.1port: 27017setParameter:enableLocalhostAuthBypass: false...包括在官⽅的MongoDB包的Linux软件包init脚本依赖于特定的值,和。
如果在默认配置⽂件中修改这些设置,则可能⽆法启动。
YAML是的超集。
使⽤配置⽂件要配置或使⽤配置⽂件,请使⽤--config选项或-f选项指定配置⽂件,如以下⽰例所⽰:例如,以下⽤途:复制mongod --config /etc/mongod.confmongos --config /etc/mongos.conf您还可以使⽤-f别名指定配置⽂件,如下所⽰:复制mongod -f /etc/mongod.confmongos -f /etc/mongos.conf如果您从软件包安装并使⽤系统的启动了MongoDB ,那么您已经在使⽤配置⽂件。
MongoDB集群帮助手册2016年5月修订记录一、Mongodb集群架构简介这是一种可以水平扩展的模式,在数据量很大时特给力,实际大规模应用一般会采用这种架构去构建monodb系统。
要构建一个MongoDB Sharding Cluster,需要三种角色:●Shard Server: mongod 实例,用于存储实际的数据块,实际生产环境中一个shardserver角色可由几台机器组个一个relica set承担,防止主机单点故障●Config Server: mongod 实例,存储了整个Cluster Metadata,其中包括chunk 信息。
●Route Server: mongos 实例,前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。
本例架构示例图:1.分别在3台机器运行一个mongod实例(称为mongod shard11,mongod shard12,mongodshard13)组织replica set1,作为cluster的shard12.分别在3台机器运行一个mongod实例(称为mongod shard21,mongod shard22,mongodshard23)组织replica set2,作为cluster的shard23.每台机器运行一个mongod实例,作为3个config server4.每台机器运行一个mongs进程,用于客户端连接二、集群配置2.1软件准备1.安装monodb软件su – mongodbtar zxvf mongodb-linux-x86_64-1.6.2.tar创建数据目录根据本例sharding架构图所示,在各台sever上创建shard数据文件目录Server1:su – monodbcd /monodbmkdir -p data/shard11mkdir -p data/shard21Server2:su – monodbcd /monodbmkdir -p data/shard11mkdir -p data/shard22Server3:su – monodbcd /monodbmkdir -p data/shard13mkdir -p data/shard232.2配置relica sets(复制集)1.配置shard1所用到的replica sets:Server1:cd /mongodb/mongodb-linux-x86_64-1.6.2/bin./mongod –shardsvr –replSet shard1 –port 27017 –dbpath /mongodb/data/shard11 –oplogSize 100 –logpath /mongodb/data/shard11.log –logappend –forkServer2:cd /mongodb/mongodb-linux-x86_64-1.6.2/bin./mongod –shardsvr –replSet shard1 –port 27017 –dbpath /mongodb/data/shard12 –oplogSize 100 –logpath /mongodb/data/shard12.log –logappend –forkServer3:cd /mongodb/mongodb-linux-x86_64-1.6.2/bin./mongod –shardsvr –replSet shard1 –port 27017 –dbpath /mongodb/data/shard13 –oplogSize 100 –logpath /mongodb/data/shard13.log –logappend –fork初始化replica set用mongo连接其中一个mongod,执行:> config = {_id: ‘shard1′, members: [{_id: 0, host: '10.1.1.1:27017'},{_id: 1, host: '10.1.1.2:27017'},{_id: 2, host: '10.1.1.3:27017'}]}> rs.initiate(config);同样方法,配置shard2用到的replica sets:server1:cd /mongodb/mongodb-linux-x86_64-1.6.2/bin./mongod –shardsvr –replSet shard2 –port 27018 –dbpath /mongodb/data/shard21–oplogSize 100 –logpath /mongodb/data/shard21.log –logappend –forkserver2:cd /mongodb/mongodb-linux-x86_64-1.6.2/bin./mongod –shardsvr –replSet shard2 –port 27018 –dbpath /mongodb/data/shard22–oplogSize 100 –logpath /mongodb/data/shard22.log –logappend –forkserver3:cd /mongodb/mongodb-linux-x86_64-1.6.2/bin./mongod –shardsvr –replSet shard2 –port 27018 –dbpath /mongodb/data/shard23 –oplogSize 100 –logpath /mongodb/data/shard23.log –logappend –fork初始化replica set用mongo连接其中一个mongod,执行:> config = {_id: ‘shard2′, members: [{_id: 0, host: '10.1.1.1:27018'},{_id: 1, host: '10.1.1.2:27018'},{_id: 2, host: '10.1.1.3:27018'}]}> rs.initiate(config);到此就配置好了二个replica sets,也就是准备好了二个shards2.3配置三台config serverServer1:mkdir -p /mongodb/data/config./mongod –configsvr –dbpath /mongodb/data/config –port 20000 –logpath/mongodb/data/config.log –logappend –fork #config server也需要dbpathServer2:mkdir -p /mongodb/data/config./mongod –configsvr –dbpath /mongodb/data/config –port 20000 –logpath/mongodb/data/config.log –logappend –forkServer3:mkdir -p /mongodb/data/config./mongod –configsvr –dbpath /mongodb/data/config –port 20000 –logpath/mongodb/data/config.log –logappend –fork2.4配置mongs在server1,server2,server3上分别执行:./mongos –configdb 10.1.1.1:20000,10.1.1.2:20000,10.1.1.3:20000 –port 30000 –chunkSize 5 –logpath /mongodb/data/mongos.log –logappend –fork#mongs不需要dbpath2.5添加复制集连接到其中一个mongos进程,并切换到admin数据库做以下配置1. 连接到mongs,并切换到admin./mongo 10.1.1.1:30000/admin>dbAdmin2. 加入shards如里shard是单台服务器,用>db.runCommand( { addshard : “<serverhostname>[:<port>]” } )这样的命令加入,如果shard是replica sets,用replicaSetName/<serverhostname>[:port][,serverhostname2[:port],…]这样的格式表示,例如本例执行:>db.runCommand( { addshard :“shard1/10.1.1.1:27017,10.1.1.2:27017,10.1.1.3:27017″,name:”s1″,maxsize:20480} );>db.runCommand( { addshard :“shard2/10.1.1.1:27018,10.1.1.2:27018,10.1.1.3:27018″,name:”s2″,maxsize:20480} );注意:在添加第二个shard时,出现error:test database 已经存在的错误,这里用mongo命令连接到第二个replica set,用db.dropDatabase()命令把test数据库给删除然后就可加入3. 可选参数Name:用于指定每个shard的名字,不指定的话系统将自动分配maxSize:指定各个shard可使用的最大磁盘空间,单位megabytes4. Listing shards>db.runCommand( { listshards : 1 } )如果列出了以上二个你加的shards,表示shards已经配置成功5.2.6数据库分片以及Collecton分片1、激活数据库分片命令:> db.runCommand( { enablesharding : “<dbname>” } );通过执行以上命令,可以让数据库跨shard,如果不执行这步,数据库只会存放在一个shard,一旦激活数据库分片,数据库中不同的collection将被存放在不同的shard上,但一个collection仍旧存放在同一个shard上,要使单个collection也分片,还需单独对collection作些操作2、Collection分片要使单个collection也分片存储,需要给collection指定一个分片key,通过以下命令操作:> db.runCommand( { shardco llection : “<namespace>”,key : <shardkeypatternobject> });注:a. 分片的collection系统会自动创建一个索引(也可用户提前创建好)b. 分片的collection只能有一个在分片key上的唯一索引,其它唯一索引不被允许One note: a sharded collection can have only one unique index, which must exist on the shard key. No other unique indexes can exist on the collection.2.7分片collection例子>db.runCommand( { shardcollection : “test.c1″,key : {id: 1} } )>for (var i = 1; i <= 200003; i++)db.c1.save({id:i,value1:”1234567890″,value2:”1234567890″,value3:”1234567890″,value 4:”1234567890″});> db.c1.stats()(该命令可以查看表的存储状态)2.8 Mongodb运行时添加节点1、查看复制集节点配置./mongo 192.168.1.207:27017rs0:PRIMARY> rs.conf();{"_id" : "rs0","version" : 3,"members" : [{"_id" : 0,"host" : "192.168.1.207:27017"},{"_id" : 1,"host" : "192.168.1.207:27018"},]}2、添加节点添加新的数据目录mkdir –p /mongodb/data/shard4启动节点./mongod –shardsvr –replSet shard1 –port 27019 –dbpath /mongodb/data/shard4 –oplogSize 100 –logpath /mongodb/data/shard4.log –logappend –fork连接主节点mongo 192.168.1.207:27017rs0:PRIMARY> rs.isMaster();{"setName" : "rs0","ismaster" : true,"secondary" : false,"hosts" : ["192.168.1.207:27017","192.168.1.207:27018"],"primary" : "192.168.1.207:27017","me" : "192.168.1.207:27018","maxBsonObjectSize" : 16777216,"localTime" : ISODate("2013-05-22T13:04:36.501Z"),"ok" : 1}添加节点rs0:PRIMARY>rs.add("192.168.1.207:27019");{ "ok" : 1 }3、再次查看状态rs0:PRIMARY> rs.conf();{"_id" : "rs0","version" : 3,"members" : [{"_id" : 0,"host" : "192.168.1.207:27017"},{"_id" : 1,"host" : "192.168.1.207:27018"},{"_id" : 1,"host" : "192.168.1.207:27019"},]}添加成功2.9 Mongodb运行时移除节点其他步骤同上,其中只是将添加命令改为移除命令rs0:PRIMARY> rs.remove("192.168.1.207:27019");最后还需要关掉192.168.1.207:27019 该服务Ps –ef | grep mongo 查找该服务然后通过kill -9 pid 关闭服务。