MongoDB分片是使用多個服務器存儲數據的方法,以支持巨大的數據存儲和對數據進行操做。分片技術能夠知足MongoDB數據量大量增加的需求,當一臺MongoDB服務器不足以存儲海量數據或不足以提供可接受的讀寫吞吐量時,咱們就能夠在多臺服務器上分割數據,使得數據庫系統能存儲和處理更多的數據。前端
實驗環境:linux
1.安裝MongoDB3.2mongodb
[root@localhost ~]# yum install openssl-devel -y [root@localhost tomcat]# tar zxvf mongodb-linux-x86_64-3.2.1.tgz -C /opt/
2.建立4個實例數據庫
[root@localhost opt]# mkdir -p /data/mongodb/mongodb{1,2,3,4} [root@localhost mongodb]# mkdir logs [root@localhost mongodb]# touch logs/mongodb{1,2,3,4}.log [root@localhost logs]# chmod -R 777 *.log [root@localhost logs]# ulimit -n 25000 //最大進程數// [root@localhost logs]# ulimit -u 25000 //最大文件數//
3.部署配置服務器vim
[root@localhost bin]# vim mongodb1.conf port=37017 dbpath=/data/mongodb/mongodb1 logpath=/data/mongodb/logs/mongodb1.log logappend=true fork=true maxConns=5000 storageEngine=mmapv1 configsvr=true ~
1)某節點內存不足時,從其餘節點分配內存tomcat
[root@localhost bin]# sysctl -w vm.zone_reclaim_mode=0 //內核參數爲0的話,那麼系統會傾向於從其餘節點分配內存// [root@localhost bin]# echo never > /sys/kernel/mm/transparent_hugepage/enabled [root@localhost bin]# echo never > /sys/kernel/mm/transparent_hugepage/defrag [root@localhost bin]# ln -s /usr/local/mongodb/bin/mongo /usr/bin/mongo [root@localhost bin]# ln -s /usr/local/mongodb/bin/mongod /usr/bin/mongod
2)啓動配置服務器服務器
[root@localhost bin]# mongod -f mongodb1.conf
4.配置分片服務器app
[root@localhost bin]# vim mongodb2.conf port=47017 dbpath=/data/mongodb/mongodb2 logpath=/data/mongodb/logs/mongodb2.log logappend=true fork=true maxConns=5000 storageEngine=mmapv1 shardsvr=true [root@localhost bin]# vim mongodb3.conf port=47018 dbpath=/data/mongodb/mongodb3 logpath=/data/mongodb/logs/mongodb3.log logappend=true fork=true maxConns=5000 storageEngine=mmapv1 shardsvr=true
1)啓動mongodb二、mongodb3ide
[root@localhost bin]#mongod -f mongodb2.conf [root@localhost bin]#mongod -f mongodb3.conf
5.啓動路由服務器spa
[root@localhost bin]# ./mongos --port 27017 --fork --logpath=/usr/local/mongodb/bin/route.log --configdb 192.168.126.141:37017 --chunkSize 1 ************顯示******************************************* 2018-07-18T09:21:53.507+0800 W SHARDING [main] Running a sharded cluster with fewer than 3 config servers should only be done for testing purposes and is not recommended for production. about to fork child process, waiting until server is ready for connections. forked process: 3580 child process started successfully, parent exiting
6.啓用分片服務器
[root@localhost bin]# mongo mongos> show dbs config 0.031GB mongos> sh.status() //#shards下爲空,沒有分片服務器// mongos> sh.addShard("192.168.126.204:47017") mongos> sh.addShard("192.168.126.204:47018") mongos> sh.status() shards: { "_id" : "shard0000", "host" : "192.168.126.141:47017" } { "_id" : "shard0001", "host" : "192.168.126.141:47018" }
1)建立Kgc數據庫,建立users集合而且插入100000條數據
mongos> use kgc mongos> db.createCollection('users') mongos> for(var i=1;i<=100000;i++)db.users.insert({"id":1,"name":"jack"+i}) mongos> db.users.find() { "_id" : ObjectId("5b4e9b580f25d0730817aea1"), "id" : 1, "name" : "jack1" } { "_id" : ObjectId("5b4e9b580f25d0730817aea2"), "id" : 2, "name" : "jack1" } { "_id" : ObjectId("5b4e9b580f25d0730817aea3"), "id" : 3, "name" : "jack1" } { "_id" : ObjectId("5b4e9b580f25d0730817aea4"), "id" : 4, "name" : "jack1" } { "_id" : ObjectId("5b4e9b590f25d0730817aea5"), "id" : 5, "name" : "jack1" } { "_id" : ObjectId("5b4e9b590f25d0730817aea6"), "id" : 6, "name" : "jack1" } { "_id" : ObjectId("5b4e9b590f25d0730817aea7"), "id" : 7, "name" : "jack1" } { "_id" : ObjectId("5b4e9b590f25d0730817aea8"), "id" : 8, "name" : "jack1" } { "_id" : ObjectId("5b4e9b590f25d0730817aea9"), "id" : 9, "name" : "jack1" } { "_id" : ObjectId("5b4e9b590f25d0730817aeaa"), "id" : 10, "name" : "jack1" } ..........//省略//
7.實現分片功能
[root@localhost bin]# ./mongoimport -d kgc -c users --file /opt/testdb.txt mongos> show dbs config 0.031GB kgc 0.078GB mongos> use kgc switched to db kgc mongos> show tables system.indexes users mongos> sh.status() //查看數據庫分片信息// databases: { "_id" : "kgc", "primary" : "shard0000", "partitioned" : false } //數據庫還沒有分片//
1)啓用數據庫分片
mongos> sh.enableSharding("kgc") //啓用數據庫分片// mongos> sh.status() databases: { "_id" : "kgc", "primary" : "shard0000", "partitioned" : true } mongos> db.users.createIndex({"id":1}) //對users表建立索引// mongos> sh.shardCollection("kgc.users",{"id":1}) //表分片// mongos> sh.status() shards: { "_id" : "shard0000", "host" : "192.168.126.141:47017" } { "_id" : "shard0001", "host" : "192.168.126.141:47018" }