- 高數(shù)據(jù)量和吞吐量的數(shù)據(jù)庫應(yīng)用會對單機的性能造成較大壓力,大的查詢量會將單機的 CPU 耗盡,大的數(shù)據(jù)量對單機的存儲壓力較大,最終會耗盡系統(tǒng)的內(nèi)存而將壓力轉(zhuǎn)移到磁盤 IO 上。
- MongoDB 分片是使用多個服務(wù)器存儲數(shù)據(jù)的方法,以支持巨大的數(shù)據(jù)存儲和對數(shù)據(jù)進行操作。分片技術(shù)可以滿足 MongoDB 數(shù)據(jù)量大量增長的需求,當(dāng)一臺 MongoDB 服務(wù)器不足以存儲海量數(shù)據(jù)或不足以提供可接受的讀寫吞吐量時,我們就可以通過在多臺服務(wù)器上分割數(shù)據(jù),使得數(shù)據(jù)庫系統(tǒng)能存儲和處理更多的數(shù)據(jù)。
- 分片為應(yīng)對高吞吐量與大數(shù)據(jù)量提供了方法:
- 使用分片減少了每個分片需要處理的請求數(shù),因此,通過水平擴展,群集可以提高自己的存儲容量。比如,當(dāng)插入一條數(shù)據(jù)時,應(yīng)用只需要訪問存儲這條數(shù)據(jù)的分片。
- 使用分片減少了每個分片村存儲的數(shù)據(jù)。
分片的優(yōu)勢在于提供類似線性增長的架構(gòu),提高數(shù)據(jù)可用性,提高大型數(shù)據(jù)庫查詢服務(wù)器的性能。當(dāng)MongoDB單點數(shù)據(jù)庫服務(wù)器存儲成為瓶頸、單點數(shù)據(jù)庫服務(wù)器的性能成為瓶頸或需要部署大型應(yīng)用以充分利用內(nèi)存時,可以使用分片技術(shù)。
成都創(chuàng)新互聯(lián)是一家專業(yè)提供都昌企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、H5開發(fā)、小程序制作等業(yè)務(wù)。10年已為都昌眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計公司優(yōu)惠進行中。
MongoDB分片群集主要有如下三個組件:
- Shard:分片服務(wù)器,用于存儲實際的數(shù)據(jù)塊,實際生產(chǎn)環(huán)境中一個shard server 角色可以由幾臺服務(wù)器組成一個Peplica Set 承擔(dān),防止主機單點故障。
- Config Server:配置服務(wù)器,存儲了整個分片群集的配置信息,其中包括chunk信息。
- Routers:前端路由,客戶端由此接入,且讓整個群集看上去像單一數(shù)據(jù)庫,前端應(yīng)用可以透明使用。
| IP地址 | 路由服務(wù)器(Routers) | 配置服務(wù)器(Config Server) | Shard1 | Shard2 | Shard3 |
|---|---|---|---|---|---|
| 192.168.125.119 | 27017 | 27018 | 27001 | 27002 | 27003 |
| 192.168.125.120 | 27017 | 27018 | 27001 | 27002 | 27003 |
| 192.168.125.121 | 27017 | 27018 | 27001 | 27002 | 27003 |
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.0.tgz
tar zxvf mongodb-linux-x86_64-4.0.0.tgz -C /opt
mv /opt/mongodb-linux-x86_64-4.0.0/ /usr/local/mongodbmkdir -p /data/mongodb/config
mkdir -p /data/mongodb/shard{1,2,3}
mkdir -p /data/mongodb/logs
touch /data/mongodb/logs/shard{1,2,3}.log
touch /data/mongodb/logs/mongos.log
touch /data/mongodb/logs/config.log
chmod 777 /data/mongodb/logs/*.loguseradd -M -s /sbin/nologin mongo
chown -R mongo:mongo /usr/local/mongodb
chown -R mongo:mongo /data/mongodbecho 'export MONGODB_HOME=/usr/local/mongodb' >> /etc/profile
echo 'export PATH=$PATH:$MONGODB_HOME/bin' >> /etc/profile
source /etc/profileulimit -n 25000 //可以打開的最大文件數(shù)量
ulimit -u 25000 //用戶最大可用的進程數(shù)
sysctl -w vm.zone_reclaim_mode=0 //內(nèi)存不足時,從其他節(jié)點分配內(nèi)存
# 從CentOS7開始,MongoDB會建議關(guān)閉系統(tǒng)的THP特性,否則可能會導(dǎo)致性能下降
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag //*注意*這些優(yōu)化都是臨時的,重啟失效# vim config.conf
dbpath=/data/mongodb/config //數(shù)據(jù)文件存放位置
logpath=/data/logs/config.log //日志文件
port=27018 //端口號
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
replSet=configs //復(fù)制集名稱
configsvr=true //設(shè)置參數(shù)為true
# mongod -f config.conf //啟動config實例
scp /usr/local/mongodb/bin/config.conf root@192.168.125.120:/usr/local/mongodb/bin
scp /usr/local/mongodb/bin/config.conf root@192.168.125.121:/usr/local/mongodb/binmongo --port 27018
config={_id:"configs",members:[{_id:0,host:"192.168.125.119:27018"},{_id:1,host:"192.168.125.120:27018"},{_id:2,host:"192.168.125.121:27018"}]} //創(chuàng)建復(fù)制集
rs.initiate(config) //初始化復(fù)制集# vim shard1.conf
dbpath=/data/mongodb/shard1
logpath=/data/logs/shard1.log
port=27001
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
shardsvr=true
# mongod -f shard1.conf
# 與另外兩臺配置實例配置文件相同,僅端口、數(shù)據(jù)文件存放及日志文件要改,只需配置完成后啟動即可mongo --port 27001
use admin
config={_id:"shard1",members:[{_id:0,host:"192.168.125.119:27001"},{_id:1,host:"192.168.125.120:27001"},{_id:2,host:"192.168.125.121:27001"}]} //創(chuàng)建復(fù)制集
rs.initiate(config) //初始化復(fù)制集# vim mongos.conf
logpath=/data/mongodb/logs/mongos.log
logappend = true
port = 27017
fork = true
configdb = configs/192.168.125.119:27018,192.168.125.120:27018,192.168.125.121:27018
maxConns=20000mongs -f /usr/local/mongodb/bin/mongos.conf
# 注意,這邊啟動mongos實例用的是mongos命令mongo //默認進入27017端口
mongos> use admin
mongos> sh.addShard("shard1/192.168.125.119:27001,192.168.125.120:27001,172.16.10.29:27001")
mongos> sh.addShard("shard2/192.168.125.119:27002,192.168.125.120:27002,172.16.10.29:27002")
mongos> sh.status() //查看群集狀態(tài)
# 此處為添加兩臺分片服務(wù)器,后續(xù)添加的也會均勻分配分片數(shù)據(jù)
mongos> use config
mongos> db.settings.save({"_id":"chunksize","value":1})
# 設(shè)置塊大小為1M是方便實驗,不然需要插入海量數(shù)據(jù)mongos> use school
mongos> show collections
mongos> for(i=1;i<=50000;i++){db.user.insert({"id":i,"name":"jack"+i})}
# 在school庫的user表中循環(huán)寫入五萬條數(shù)據(jù)mongos>sh.enableSharding("school")
# 我們可以自定義需要分片的庫或表mongos> db.user.createIndex({"id":1})
# 以"id"作為索引
mongos> sh.shardCollection("school.user",{"id":1})
# 根據(jù)"id"對user表進行分片
mongos> sh.status()
# 查看分片情況
mongos> sh.help()
# 查看分片相關(guān)的命令
標題名稱:MongoDB4.0構(gòu)建分布式分片群集
標題鏈接:http://chinadenli.net/article8/ppcsip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、外貿(mào)建站、移動網(wǎng)站建設(shè)、網(wǎng)站制作、標簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)