天天看點

MongoDB分片叢集 Shard Cluster 搭建

一、為什麼要分片

1.存儲容量需求超出單機磁盤容量。
2.活躍的資料集超出單機記憶體容量,導緻很多請求都要從磁盤讀取資料,影響性能。
3.IOPS超出單個MongoDB節點的服務能力,随着資料的增長,單機執行個體的瓶頸會越來越明顯。
4.副本集具有節點數量限制。

垂直擴充:增加更多的CPU和存儲資源來擴充容量。
水準擴充:将資料集分布在多個伺服器上。水準擴充即分片。
           

二、分片的工作原理

MongoDB分片叢集 Shard Cluster 搭建

三、分片集搭建

3.1配置 并啟動config 節點叢集

# 資料庫檔案位置
dbpath=config/config1
#日志檔案位置
logpath=config/logs/config1.log
# 以追加方式寫入日志
logappend=true
# 是否以守護程序方式運作
fork = true
bind_ip=0.0.0.0
port = 17017
# 表示是一個配置伺服器
configsvr=true
#配置伺服器副本集名稱
replSet=configsvr
           

節點2、3同上,配置完畢後啟動配置節點

進入任意節點的mongo shell 并添加 配置節點叢集 注意use admin

./bin/mongo --port 17017
use admin
var cfg ={"_id":"configsvr",
"members":[
{"_id":1,"host":"192.168.211.133:17017"},
{"_id":2,"host":"192.168.211.133:17018"},
{"_id":3,"host":"192.168.211.133:17019"}]
};
rs.initiate(cfg)
           

3.2配置shard叢集

shard1叢集搭建37017到37019

dbpath=shard/shard1/shard1-37017
bind_ip=0.0.0.0
port=37017
fork=true
logpath=shard/shard1/shard1-37017.log
replSet=shard1
shardsvr=true
dbpath=shard/shard1/shard1-37018
bind_ip=0.0.0.0
port=37018
fork=true
logpath=shard/shard1/logs/shard1-37018.log
replSet=shard1
shardsvr=true
dbpath=shard/shard1/shard1-37019
bind_ip=0.0.0.0
port=37019
fork=true
logpath=shard/shard1/logs/shard1-37019.log
replSet=shard1
shardsvr=true
           

shard2叢集、shard3叢集、shard4叢集 同上

啟動每個mongod 然後進入其中一個進行叢集配置
var cfg ={"_id":"shard1",
"protocolVersion" : 1,
"members":[
{"_id":1,"host":"192.168.211.133:37017"},
{"_id":2,"host":"192.168.211.133:37018"},
{"_id":3,"host":"192.168.211.133:37019"}
]
};
rs.initiate(cfg)
rs.status()
           

3.3配置和啟動 路由節點

route-27017.conf

port=27017
bind_ip=0.0.0.0
fork=true
logpath=route/logs/route.log
configdb=configsvr/192.168.211.133:17017,192.168.211.133:17018,192.168.211.133:17019
           

啟動路由節點使用 mongos (注意不是mongod)

./bin/mongos -f route/route-27017.conf
           

3.4 mongos(路由)中添加分片節點

進入路由mongos添加分片資訊

mongo --port 27017
sh.status()
sh.addShard("shard1/192.168.211.133:37017,192.168.211.133:37018,192.168.211.133:37019");
sh.addShard("shard2/192.168.211.133:47017,192.168.211.133:47018,192.168.211.133:47019");
sh.status()
           
MongoDB分片叢集 Shard Cluster 搭建

3.5 開啟資料庫和集合分片(指定片鍵)

繼續使用mongos完成分片開啟和分片大小設定

為資料庫開啟分片功能
sh.enableSharding("lagou_resume")
為指定集合開啟分片功能
sh.shardCollection("lagou_resume.lagou_resume_datas",{"片鍵字段名如 name":索引說明})
           

3.6 驗證結果

我們插入一點資料然後檢視是否有資料

use lg_resume; 
for(var i=1;i<= 1000;i++){ 
db.lg_resume_datas.insert({"name":"test"+i, salary:(Math.random()*20000).toFixed(2)}); 
}
           
MongoDB分片叢集 Shard Cluster 搭建

繼續閱讀