部署MongoDB分區群集

來源:互聯網
上載者:User

標籤:服務   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()       // 查看資料庫分區資訊

    • 分區功能管理

      > use kgc> for(var i=1;i<=10000;i++) db.users.insert({"id":i,"name":"tom"+i})mongos> show dbsmongos> use kgcmongos> show collections    //查看集合mongos> db.users.find().limit(5)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分區群集

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.