高數(shù)據(jù)量和吞吐量的數(shù)據(jù)庫應(yīng)用會對單機(jī)的性能造成較大的壓力,大的查詢量會將單機(jī)的CPU耗盡,大的數(shù)據(jù)量對單機(jī)的存儲壓力較大,最終會耗盡系統(tǒng)的內(nèi)存而將壓力轉(zhuǎn)移到磁盤IO上。
創(chuàng)新互聯(lián)主營無棣網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶APP軟件開發(fā),無棣h5微信小程序定制開發(fā)搭建,無棣網(wǎng)站營銷推廣歡迎無棣等地區(qū)企業(yè)咨詢MongoDB分片是使用多個服務(wù)器儲存數(shù)據(jù)的方法,以支持巨大的數(shù)據(jù)存儲和對數(shù)據(jù)進(jìn)行操作。分片技術(shù)可以滿足MongoDB數(shù)據(jù)量大量增長的需求,當(dāng)一臺MongoDB服務(wù)器不足以存儲海量數(shù)據(jù)或者不足以能提供可接受打讀寫吞吐量時,我們可以通過在多臺服務(wù)器上分割數(shù)據(jù),使得數(shù)據(jù)庫系統(tǒng)能存儲和處理更多的數(shù)據(jù)。
分片為應(yīng)對吞吐量和大數(shù)據(jù)量提供了方法。
1、使得分片減少了每個分片需要處理的請求數(shù),因此,通過水平擴(kuò)展,群集可以提高自己的存儲容量和吞吐量。比如,當(dāng)插入一條數(shù)據(jù)時,應(yīng)用只需要訪問存儲這條數(shù)據(jù)的分片。
2、使用分片減少了每個分片存儲的數(shù)據(jù)。
如下圖所示,假設(shè)一個collection中有1TB的數(shù)據(jù),通過分片可以將1TB數(shù)據(jù)分片到四個shard中,當(dāng)查詢對應(yīng)數(shù)據(jù)時,就會去對應(yīng)的分片服務(wù)器查詢,可以提高數(shù)據(jù)可用性。
MongoDB分片集群主要有三個主要組件:
1、Shard:分片服務(wù)器,用于存儲實(shí)際的數(shù)據(jù)塊,實(shí)際生產(chǎn)環(huán)境中一個shard server角色可以由幾臺服務(wù)器組成一個復(fù)制集(Replica Set)承擔(dān),防止主機(jī)單點(diǎn)故障。
2、Config Server:配置服務(wù)器,存儲了整個分片群集的配置信息,其中包括chunk信息。
3、Routers:前端路由,客戶端由此接入,且讓整個群集看上去像單一數(shù)據(jù)庫,前端應(yīng)用可以透明使用。
這里實(shí)驗(yàn)是在同一臺服務(wù)器上搭建MongoDB分片,但是MongoDB3.4以后Shard默認(rèn)都是要搭建MongoDB服務(wù)集,為了方便起見,我們使用的MongoDB版本是3.2的。
組件 | 端口號 |
---|---|
路由實(shí)例 | 27017 |
配置實(shí)例 | 37017 |
Shard1實(shí)例 | 47017 |
Shard2實(shí)例 | 47018 |
安裝相關(guān)依賴包和解壓軟件到指定目錄中。
[root@localhost ~]# yum install openssl-devel -y #安裝依賴包
[root@localhost ~]# tar xfvz mongodb-linux-x86_64-3.2.1.tgz -C /opt/
[root@localhost ~]# cd /opt/
[root@localhost opt]# mv mongodb-linux-x86_64-3.2.1/ /usr/local/mongodb
#將軟件包重命名,方便下面使用
將即將創(chuàng)建的實(shí)例所需要的數(shù)據(jù)目錄,日志目錄和日志文件先創(chuàng)建好。
[root@localhost opt]# mkdir -p /data/mongodb/mongodb{1,2,3,4}
#創(chuàng)建實(shí)例的數(shù)據(jù)存儲目錄
[root@localhost opt]# mkdir /data/mongodb/logs
#創(chuàng)建實(shí)例的日志目錄
[root@localhost opt]# touch /data/mongodb/logs/mongodb{1,2,3,4}.log
#創(chuàng)建實(shí)例的日志文件
[root@localhost opt]# chmod -R 777 /data/mongodb/logs/*.log
#修改日志權(quán)限
[root@localhost opt]# ulimit -n 25000
#將可以打開的大進(jìn)程數(shù)修改為25000
[root@localhost opt]# ulimit -u 25000
#將可以打開的大文件數(shù)修改為25000
[root@localhost opt]# sysctl -w vm.zone_reclaim_mode=0
#當(dāng)某個節(jié)點(diǎn)可用內(nèi)存不足時,如果為0的話,那么系統(tǒng)會傾向于從其他節(jié)點(diǎn)分配內(nèi)存。如果為1的話,那么系統(tǒng)會傾向于從本地節(jié)點(diǎn)回收Cache內(nèi)存多數(shù)時候。
[root@localhost opt]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
[root@localhost opt]# echo never > /sys/kernel/mm/transparent_hugepage/defrag
#當(dāng)節(jié)點(diǎn)可用內(nèi)存不足時,選擇關(guān)閉占內(nèi)存多的大頁面
[root@localhost opt]# export PATH=$PATH:/usr/local/mongodb/bin/
#將MongoDB路徑添加到環(huán)境變量中
[root@localhost bin]# vim mongodb1.conf
#創(chuàng)建配置服務(wù)器的配置文件
port=37017
dbpath=/data/mongodb/mongodb1
logpath=/data/mongodb/logs/mongodb1.log
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
configsvr=true #設(shè)置為配置服務(wù)器
[root@localhost mongodb]# mongod -f /usr/local/mongodb/bin/mongodb1.conf
#啟動配置服務(wù)器進(jìn)程
編輯mongodb2.conf配置文件,端口為47017,設(shè)置為shardsvr=true,同樣編輯mongodb3.conf,端口為47018,shardsvr=true,然后同時啟動。
[root@localhost mongodb]# cd /usr/local/mongodb/bin/
[root@localhost bin]# cp -p mongodb1.conf mongodb2.conf
[root@localhost bin]# vim mongodb2.conf
port=47017 #設(shè)置端口
dbpath=/data/mongodb/mongodb2 #數(shù)據(jù)存儲目錄要修改
logpath=/data/mongodb/logs/mongodb2.log #日志文件也要修改
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
shardsvr=true #設(shè)置為分片服務(wù)器
[root@localhost bin]# cp -p mongodb2.conf mongodb3.conf
[root@localhost bin]# vim mongodb3.conf
port=47018 #設(shè)置端口
dbpath=/data/mongodb/mongodb3 #數(shù)據(jù)存儲目錄要修改
logpath=/data/mongodb/logs/mongodb3.log #日志文件也要修改
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
shardsvr=true
都修改完后,將兩個分片服務(wù)器啟動。
[root@localhost bin]# ./mongos --port 27017 --fork --logpath=/usr/local/mongodb/bin/route.log --configdb 192.168.58.131:37017 --chunkSize 1
#這條命令意思就是凡事訪問mongodb 27017端口的,都會轉(zhuǎn)到 192.168.58.131:37017上面
[root@localhost bin]# ./mongos --port 27017 --fork --logpath=/usr/local/mongodb/bin/route.log --configdb 192.168.58.131:37017 --chunkSize 1
2018-07-17T17:20:58.990+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: 6430
child process started successfully, parent exiting
[root@localhost ~]# mongo
MongoDB shell version: 3.2.1
connecting to: test
Server has startup warnings:
2018-07-17T17:20:59.120+0800 I CONTROL [main] ** WARNING: You are running this process as the root user, which is not recommended.
2018-07-17T17:20:59.120+0800 I CONTROL [main]
mongos> sh.status()
--- Sharding Status ---
sharding version: {
"_id" : 1,
"minCompatibleVersion" : 5,
"currentVersion" : 6,
"clusterId" : ObjectId("5b4db4fdf19287c74d1a4081")
}
shards:
active mongoses:
"3.2.1" : 1
balancer:
Currently enabled: yes
Currently running: no
Failed balancer rounds in last 5 attempts: 0
Migration Results for the last 24 hours:
No recent migrations
databases:
#可以看到shards下面為空,所以我們需要將兩個分片服務(wù)器添加進(jìn)去
mongos> sh.addShard("192.168.58.131:47017")
#將47017端口的分片服務(wù)器添加進(jìn)去
{ "shardAdded" : "shard0000", "ok" : 1 }
mongos> sh.addShard("192.168.58.131:47018")
#將47018端口的分片服務(wù)器添加進(jìn)去
{ "shardAdded" : "shard0001", "ok" : 1 }
進(jìn)行測試,查看是否能夠進(jìn)行分片功能,我們創(chuàng)建一個collection,在里面插入50000條數(shù)據(jù)。
mongos> use test
switched to db test
mongos> for(var i=1;i<=50000;i++) db.users.insert({"id":i,"name":"tom"+i})
#利用for循環(huán)往collection中插入50000條數(shù)據(jù)
mongos> db.users.find().limit(10)
#查看collection中的前10條數(shù)據(jù),表示插入成功。
mongos> sh.status()
--- Sharding Status ---
sharding version: {
"_id" : 1,
"minCompatibleVersion" : 5,
"currentVersion" : 6,
"clusterId" : ObjectId("5b4db4fdf19287c74d1a4081")
}
shards:
{ "_id" : "shard0000", "host" : "192.168.58.131:47017" }
{ "_id" : "shard0001", "host" : "192.168.58.131:47018" }
active mongoses:
"3.2.1" : 1
balancer:
Currently enabled: yes
Currently running: no
Failed balancer rounds in last 5 attempts: 0
Migration Results for the last 24 hours:
No recent migrations
databases:
{ "_id" : "test", "primary" : "shard0000", "partitioned" : false }
#可以看到partitioned:false,說明并沒有進(jìn)行分片。
mongos> sh.enableSharding("test")
{ "ok" : 1 }
#啟用分片功能
mongos> sh.status()
{ "_id" : "test", "primary" : "shard0000", "partitioned" : true }
mongos> db.users.createIndex({"id":1})
{
"raw" : {
"192.168.58.131:47017" : {
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
},
"ok" : 1
}
#創(chuàng)建索引,方便分片
mongos> sh.shardCollection("test.users",{"id":1})
{ "collectionsharded" : "test.users", "ok" : 1 }
#執(zhí)行分片,可以看到分片成功1-20165,寫入到shard0001中,20166-50000寫入到shard0000中
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
標(biāo)題名稱:部署MongoDB分片群集-創(chuàng)新互聯(lián)
網(wǎng)頁路徑:http://aaarwkj.com/article16/hoegg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、網(wǎng)站建設(shè)、建站公司、App開發(fā)、用戶體驗(yàn)、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容