您好,登錄后才能下訂單哦!
1、什么是分片
高數據量和吞吐量的數據庫應用會對單機的性能造成較大壓力,大的查詢會將單機的CPU耗盡,大的數據量對單機的存儲壓力比較大,最終會耗盡系統的內存而將壓力轉移到磁盤IO上。
MongoDB分片是使用多個服務器存儲數據的方法,以支持巨大的數據存儲和對數據進行操作。分片技術可以滿足MongoDB數據量大量增長的需求,當一臺MongoDB服務器不足以存儲海量數據或不足以提供可接受的讀寫吞吐量時,我們就可以通過在多臺服務器上分割數據,使得數據庫系統能存儲和處理更多的數據。
2、MongoDB分片優勢
(1)分配為應對高吞吐量與大數據量提供了方法。
(2)使用分片減少了每個分片需要處理的請求數,因此,通過水平擴展,群集可以提高自己的存儲容量和吞吐量。比如,當插入一條數據時,應用只需要訪問存儲這條數據的分片。
(3)使用分片減少了每個分片存儲的數據。
(4)分片的優勢在提供類似線性增長的架構,提高數據可用性,提高大型數據庫查詢服務器的性能。當MongoDB單點數據庫服務器存儲成為瓶頸、單點數據庫服務器的性能成為瓶頸或者需要部署大型應用以充分利用內存時,可以使用分片技術。MongoDB分片的結構如下:
3、MongoDB分片群集的組成
MongoDB分片群集主要有如下三個主要組件:
Shard:分片服務器,用于存儲實際的數據塊,實際生產環境中一個shard server角色可由幾臺服務器組成一個 Replica Set承擔,防止主機單點故障。
Config Server:配置服務器,存儲了整個分片群集的配置信息,其中包括chunk信息。
Router:前端路由,客戶端由此接入,且讓整個集群看上去像一個單一數據庫,前端應用可以透明使用。
MongoDB分片群集的組成如下圖:
系統環境:
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} //創建多實列庫
mkdir /data/mongodb/logs
touch /data/mongodb/logs/mongodb{1,2,3}.log //創建對應的日志文件
chmod -R 777 /data/mongodb/logs/*.log //提權
ulimit -n 25000 //設置每個進程可打開的文件數
ulimit -u 25000 //設置最大進程數
2、部署配置服務器(config server)
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 //開啟配置服務功能
對配置服務器做優化:
某節點內存不足時,從其他節點分配內存
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
開啟配置服務器的實列mongod -f /usr/local/mongodb/bin/mongodb1.conf
3、部署分片服務器
cp -p mongodb1.conf mongodb2.conf //復制主配置文件對應第一臺shard實列
cp -p mongodb2.conf mongodb3.conf //對應第二臺實列
vi mongodb2.conf //修改對應的端口號和相應的路徑
mongod -f mongodb2.conf //分別開啟分片服務器實列
mongod -f mongodb3.conf
4、啟動路由服務器./mongos --port 27017 --fork --logpath=/usr/local/mongodb/bin/route.log --configdb 192.168.80.100:37017 --chunkSize 1
5、進入路由實例中啟動分片服務器
mongo //進入實列,默認端口27017
show dbs //查看配置的大小
sh.status() //查看分片狀態,沒有分片服務器
sh.addShard("192.168.80.100:47017") //添加分片服務器
sh.addShard("192.168.80.100:47018")
sh.status()
6、驗證數據分片功能
use kgc
for(var i=1;i<=50000;i++)db.users.insert({"id":i,"name":"jerry"+i}) //插入數據
注意:ulimit指定了每個進程的文件數量25000,因此要插入大于25000的數據才能體現出分片功能
db.users.find().limit(5) //查看是否創建成功
sh.enableSharding("kgc") //啟用數據庫分片
sh.status()
db.users.createIndex({"id":1}) //創建索引
sh.shardCollection("kgc.users",{"id":1}) //對數據集合分片id=n就是數據以n為單位分塊
sh.status()
7、分片管理
添加標簽
sh.addShardTag("shard0000","sales00")
sh.addShardTag("shard0001","sales01")
連接配置服務器
db.chunks.findOne() //查看分塊信息
db.collections.find() //查看分片集合信息
db.databases.find() //查看分片數據庫信息
添加分片服務器
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 //進入前端路由服務器
sh.addShard("192.168.80.100:47019") //添加分片服務器
sh.status() //查看分片狀態
刪除分片節點
use admin //進入管理模塊
db.runCommand({"removeshard":"192.168.80.100:47019"})
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。