1、什么是分片
成都創(chuàng)新互聯(lián)公司專注于丹鳳企業(yè)網(wǎng)站建設(shè),自適應(yīng)網(wǎng)站建設(shè),商城網(wǎng)站開發(fā)。丹鳳網(wǎng)站建設(shè)公司,為丹鳳等地區(qū)提供建站服務(wù)。全流程按需規(guī)劃網(wǎng)站,專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)高數(shù)據(jù)量和吞吐量的數(shù)據(jù)庫應(yīng)用會對單機(jī)的性能造成較大壓力,大的查詢會將單機(jī)的CPU耗盡,大的數(shù)據(jù)量對單機(jī)的存儲壓力比較大,最終會耗盡系統(tǒng)的內(nèi)存而將壓力轉(zhuǎn)移到磁盤IO上。
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ù)。
2、MongoDB分片優(yōu)勢
(1)分配為應(yīng)對高吞吐量與大數(shù)據(jù)量提供了方法。
(2)使用分片減少了每個分片需要處理的請求數(shù),因此,通過水平擴(kuò)展,群集可以提高自己的存儲容量和吞吐量。比如,當(dāng)插入一條數(shù)據(jù)時,應(yīng)用只需要訪問存儲這條數(shù)據(jù)的分片。
(3)使用分片減少了每個分片存儲的數(shù)據(jù)。
(4)分片的優(yōu)勢在提供類似線性增長的架構(gòu),提高數(shù)據(jù)可用性,提高大型數(shù)據(jù)庫查詢服務(wù)器的性能。當(dāng)MongoDB單點數(shù)據(jù)庫服務(wù)器存儲成為瓶頸、單點數(shù)據(jù)庫服務(wù)器的性能成為瓶頸或者需要部署大型應(yīng)用以充分利用內(nèi)存時,可以使用分片技術(shù)。MongoDB分片的結(jié)構(gòu)如下:
3、MongoDB分片群集的組成
MongoDB分片群集主要有如下三個主要組件:
Shard:分片服務(wù)器,用于存儲實際的數(shù)據(jù)塊,實際生產(chǎn)環(huán)境中一個shard server角色可由幾臺服務(wù)器組成一個 Replica Set承擔(dān),防止主機(jī)單點故障。
Config Server:配置服務(wù)器,存儲了整個分片群集的配置信息,其中包括chunk信息。
Router:前端路由,客戶端由此接入,且讓整個集群看上去像一個單一數(shù)據(jù)庫,前端應(yīng)用可以透明使用。
MongoDB分片群集的組成如下圖:
系統(tǒng)環(huán)境:
1臺路由實列(端口27017)
1臺配置實列(端口37017)
2臺Shard實列(端口47017,47018)
1、源碼編譯安裝MongoDB3.2
yum install openssl-devel -y //安裝依賴包
tar zxvf mongodb-linux-x86_64-3.2.1.tgz -C /opt/ //解壓源碼包
mv mongodb-linux-x86_64-3.2.1/ /usr/local/mongodb //將源碼包移動到本地安裝軟件目錄
mkdir -p /data/mongodb/mongodb{1,2,3} //創(chuàng)建多實列庫
mkdir /data/mongodb/logs
touch /data/mongodb/logs/mongodb{1,2,3}.log //創(chuàng)建對應(yīng)的日志文件
chmod -R 777 /data/mongodb/logs/*.log //提權(quán)
ulimit -n 25000 //設(shè)置每個進(jìn)程可打開的文件數(shù)
ulimit -u 25000 //設(shè)置大進(jìn)程數(shù)
2、部署配置服務(wù)器(config server)
vim mongodb1.conf
加入下列內(nèi)容
port=37017 //配置服務(wù)器的端口號
dbpath=/data/mongodb/mongodb1 //實列庫的路徑
logpath=/data/mongodb/logs/mongodb1.log //日志路徑
logappend=true //開啟日志功能
fork=true //開啟守護(hù)進(jìn)程
maxConns=5000 //大端口連接數(shù)量
storageEngine=mmapv1 //指定存儲引擎
configsvr=true //開啟配置服務(wù)功能
對配置服務(wù)器做優(yōu)化:
某節(jié)點內(nèi)存不足時,從其他節(jié)點分配內(nèi)存
sysctl -w vm.zone_reclaim_mode=0
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
做對mongodb/bin下的常用命令做一個軟件鏈接
ln -s /usr/local/mongodb/bin/mongo /usr/bin/mongo
ln -s /usr/local/mongodb/bin/mongod /usr/bin/mongod
開啟配置服務(wù)器的實列mongod -f /usr/local/mongodb/bin/mongodb1.conf
3、部署分片服務(wù)器
cp -p mongodb1.conf mongodb2.conf //復(fù)制主配置文件對應(yīng)第一臺shard實列
cp -p mongodb2.conf mongodb3.conf //對應(yīng)第二臺實列
vi mongodb2.conf //修改對應(yīng)的端口號和相應(yīng)的路徑
mongod -f mongodb2.conf //分別開啟分片服務(wù)器實列
mongod -f mongodb3.conf
4、啟動路由服務(wù)器./mongos --port 27017 --fork --logpath=/usr/local/mongodb/bin/route.log --configdb 192.168.80.100:37017 --chunkSize 1
5、進(jìn)入路由實例中啟動分片服務(wù)器
mongo //進(jìn)入實列,默認(rèn)端口27017
show dbs //查看配置的大小
sh.status() //查看分片狀態(tài),沒有分片服務(wù)器
sh.addShard("192.168.80.100:47017") //添加分片服務(wù)器
sh.addShard("192.168.80.100:47018")
sh.status()
6、驗證數(shù)據(jù)分片功能
use kgc
for(var i=1;i<=50000;i++)db.users.insert({"id":i,"name":"jerry"+i}) //插入數(shù)據(jù)
注意:ulimit指定了每個進(jìn)程的文件數(shù)量25000,因此要插入大于25000的數(shù)據(jù)才能體現(xiàn)出分片功能
db.users.find().limit(5) //查看是否創(chuàng)建成功
sh.enableSharding("kgc") //啟用數(shù)據(jù)庫分片
sh.status()
db.users.createIndex({"id":1}) //創(chuàng)建索引
sh.shardCollection("kgc.users",{"id":1}) //對數(shù)據(jù)集合分片id=n就是數(shù)據(jù)以n為單位分塊
sh.status()
7、分片管理
添加標(biāo)簽
sh.addShardTag("shard0000","sales00")
sh.addShardTag("shard0001","sales01")
連接配置服務(wù)器
db.chunks.findOne() //查看分塊信息
db.collections.find() //查看分片集合信息
db.databases.find() //查看分片數(shù)據(jù)庫信息
添加分片服務(wù)器
mkdir -p /data/mongodb/mongodb4
touch /data/mongodb/logs/mongodb4.log
chmod -R 777 /data/mongodb/logs/*.log
cp -p mongodb3.conf mongodb4.conf
vi mongodb4.conf
mongod -f mongodb4.conf //開啟實例
mongo //進(jìn)入前端路由服務(wù)器
sh.addShard("192.168.80.100:47019") //添加分片服務(wù)器
sh.status() //查看分片狀態(tài)
刪除分片節(jié)點
use admin //進(jìn)入管理模塊
db.runCommand({"removeshard":"192.168.80.100:47019"})
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。