標籤:服務 replica 提高 for 是你 管理 功能 選項 str
MongoDB分區
在Mongodb裡面存在另一種叢集,就是分區技術,可以滿足MongoDB資料量大量增長的需求。
當MongoDB儲存海量的資料時,一台機器可能不足以儲存資料,也可能不足以提供可接受的讀寫輸送量。這時,我們就可以通過在多台機器上分割資料,使得資料庫系統能儲存和處理更多的資料。
分區的優勢
分區為應對高輸送量與大資料量提供了方法。
使用分區減少了每個分區需要處理的請求數,因此,通過水平擴充,叢集可以提高自己的儲存容量和輸送量。舉例來說,當插入一條資料時,應用只需要訪問儲存這條資料的分區.
使用分區減少了每個分區儲存的資料。
分區的優勢在於提供類似線性增長的架構,提高資料可用性,提高大型資料庫查詢服務器的效能,當MongoDB的單點資料庫伺服器儲存成為瓶頸,單點資料庫伺服器的效能成為瓶頸或者需要部署大型應用以充分利用記憶體時,可以使用分區技術。
- MongoDB分區群集的組成:
- Shard:分區伺服器,用於儲存實際的資料區塊,實際生產環境中一個shard server角色可由幾台機器組個一個replica set承擔,防止主機單點故障
- Config Server:設定管理員,mongod執行個體,儲存了整個 ClusterMetadata,其中包括 chunk資訊。
Query Routers:前端路由,用戶端由此接入,且讓整個叢集看上去像單一資料庫,前端應用可以透明使用。
- 部署MongoDB分區群集
- 安裝mongodb3.2
- 建立多執行個體的資料目錄和記錄檔
修改ulimit -n 和ulimit -u 的值為25000
# 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,4}# mkdir /data/mongodb/logs# touch /data/mongodb/logs/mongodb{1,2,3,4}.log# chmod -R 777 /data/mongodb/logs/*.log# ulimit -n 25000# ulimit -u 25000
設定管理員
# cd /usr/local/mongodb/bin/# 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# 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 # mongo --port 37017
分區伺服器
# cp -p mongodb1.conf mongodb2.conf# vim mongodb2.conf port=47017 dbpath=/data/mongodb/mongodb2 logpath=/data/mongodb/logs/mongodb2.log logappend=true fork=true maxConns=5000 storageEngine=mmapv1 shardsvr=true# cp -p mongodb1.conf mongodb3.conf# vim mongodb3.conf port=47018 dbpath=/data/mongodb/mongodb3 logpath=/data/mongodb/logs/mongodb3.log logappend=true fork=true maxConns=5000 storageEngine=mmapv1 shardsvr=true# mongod -f mongodb2.conf# mongod -f mongodb3.conf# mongo --port 47017# mongo --port 47018# ./mongos --help //查看參數選項
- 啟動路由伺服器
- --port指定對方串連入口27017
- --fork後台運行
- --logpath指定記錄檔儲存路徑
--configdb指定給誰處理
# ./mongos --port 27017 --fork --logpath=/usr/local/mongodb/bin/route.log --configdb 192.168.86.129:37017 --chunkSize 1
啟用分區伺服器
> mongo> mongos> show dbs> mongos> sh.status() #shards下為空白,沒有分區伺服器> mongos> sh.addShard("192.168.86.129 :47017") //添加分區伺服器> mongos> sh.addShard("192.168.86.129 :47018")> mongos> sh.status() // 查看資料庫分區資訊
?
?
啟用資料庫分區
mongos> sh.enableSharding("kgc") //啟用資料庫分區mongos> sh.status() //再查看資料庫分區資訊
- 此時資料庫分區開啟了,但是你的集合沒有開發分區
- 下面要開啟集合的分區
- 先對users集合建立索引
然後對集合的索引進行分區
mongos> use kgc mongos> db.users.createIndex({"id":1}) //對users表建立索引mongos> sh.shardCollection("kgc.users",{"id":1}) //表分區mongos> sh.status()
部署MongoDB分區群集