在CentOS7上部署MongoDB分片羣集

概述

MongoDB分片是使用多個服務器存儲數據的方法,以支持巨大的數據存儲和對數據進行操作。分片技術可以滿足MongoDB數據量大量增長的需求,當一臺MongoDB服務器不足以存儲海量數據或不足以提供可接受的讀寫吞吐量時,我們就可以在多臺服務器上分割數據,使得數據庫系統能存儲和處理更多的數據。

MongoDB分片羣集的組成

  • Shard:分片服務器,用於存儲實際的數據塊,實際生產環境中一個shard server角色可由幾臺服務器組成一個Replica Set承擔,防止主機單點故障。
  • Config Server:配置服務器,存儲了整個分片羣集的配置信息,其中包括chunk信息。
  • Routers:路由器,客戶端由此接入,且讓整個羣集看上去像單一數據庫,前端應用可以透明使用。

部署MongoDB分片羣集

實驗環境:

  • 1臺路由實例(端口27017)
  • 1臺配置實例(端口37017)
  • 2臺shard實例(端口47017,47018)

1.安裝MongoDB3.2

[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.部署配置服務器

[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)某節點內存不足時,從其他節點分配內存

[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.配置分片服務器

[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)啓動mongodb2、mongodb3

[root@localhost bin]#mongod -f mongodb2.conf
[root@localhost bin]#mongod -f mongodb3.conf

5.啓動路由服務器

[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" }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章