基於CentOS7的mongodb分區群集

來源:互聯網
上載者:User

標籤:錯誤   writer   enable   ffffff   一個   mit   text   .com   open   

基於CentOS7的mongodb分區群集簡介

高資料量和輸送量的資料庫應用會對單機的效能造成較大的壓力,大的查詢量會將單機的CPU耗盡,大的資料量對單機的儲存壓力較大,最終會耗盡系統的記憶體而將壓力轉移到磁碟IO上。
mongodb分區是使用多個伺服器儲存資料的方法,以支援巨大的資料存放區和對資料進行操作。分區技術可以滿足Mongodb資料量大量增長的需求。,當一台mongodb伺服器不足以儲存海量資料或不足以提供可接受的讀寫輸送量時,就可以通過在多台伺服器上分割資料,使得資料庫系統能儲存和處理更多的資料。

分區的優勢
  • 使用分區減少了每個分區需要處理的請求數,通過水平擴充,群集可以提高自己的儲存容量和輸送量。

  • 使用分區減少了每個分區儲存的資料
分區群集的組成
  1. Shard:分區伺服器,用於儲存實際的資料區塊
  2. configserver:設定管理員,儲存整個分區群集的配置資訊
  3. routers:路由伺服器
分區群集管理的實驗

實驗配置圖如上

下面開始實驗,這裡我在一台機器上開啟多個執行個體來代替多台伺服器

安裝mongodb3.2版本(手工編譯安裝)
  • 安裝軟體環境包

yum -y install openssl-devel

  • 解壓縮mongodb軟體包

tar zxvf mongodb-linux-x86_64-3.2.1.tgz -C /opt

  • 移動軟體包至系統識別的目錄下

mv mongodb-linux-x86_64-3.2.1/ /usr/local/mongodb

  • 建立mongodb的資料存放區(/data/mongodb1、2、3、4、)和日誌儲存目錄(/data/logs)

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和ulimit -u 的值

當mongodb處於頻繁訪問的狀態,如果shell啟動進程所佔用的資源設定過低,將會產生錯誤導致無法串連mongodb執行個體,所以這裡需要設定ulimit -n和ulimit -u 的值大於20000
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   #錯誤記錄檔採用追加模式,配置這個選項後mongodb的日誌會追加到現有的記錄檔,而不是從新建立一個新檔案     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

  • 開啟第一個執行個體(設定管理員)

  • 配置分區伺服器的執行個體
    複製組建組態檔案

    cp -p mongodb1.conf mongodb2.conf #複製設定管理員的設定檔產生執行個體2的設定檔
    cp -p mongodb1.conf mongodb3.conf #複製設定管理員的設定檔產生執行個體2的設定檔

  • 修改執行個體2、3的設定檔

vim mongodb2.conf

port=47017               #修改連接埠號碼 dbpath=/data/mongodb/mongodb2       #修改資料存放目錄logpath=/data/mongodb/logs/mongodb2.log      #修改日誌存放目錄logappend=true  fork=truemaxConns=5000storageEngine=mmapv1shardsvr=true          #指定分區伺服器的模式

vim mongodb3.conf

port=47018dbpath=/data/mongodb/mongodb3logpath=/data/mongodb/logs/mongodb3.loglogappend=truefork=truemaxConns=5000storageEngine=mmapv1shardsvr=true
  • 開啟兩個分區伺服器的執行個體

mongod -f mongodb2.conf
mongod -f mongodb3.conf

  • 啟動路由伺服器

./mongos --port 27017 --fork --logpath=/usr/local/mongodb/bin/route.log --configdb 192.168.234.177:37017 --chunkSize 1

這裡關於mongos命令不知道該怎麼使用,可以查看協助資訊

  • 啟用分區伺服器

mongo

  • 添加分區伺服器

sh.addShard("192.168.234.177:47017")
sh.addShard("192.168.234.177:47018")

添加分區伺服器之後再次查看

  • 測試分區功能

    mongos> show dbs
    config 0.031GB
    mongos> use kgc #進入並建立一個use的集合
    switched to db kgc
    mongos> db.users.insert({"id":1,"name":"zhangsan"}) #添加一條資料
    WriteResult({ "nInserted" : 1 })
    mongos> for(var i=2;i<=20000;i++)db.users.insert({"id":i,"name":"zyc"+i}) #使用for迴圈添加20000條資料
    WriteResult({ "nInserted" : 1 })
    mongos> show dbs #查看錶空間就會有一個kgc
    config 0.031GB
    kgc 0.078GB
    mongos> show tables #查看錶資訊也可以看到users表
    system.indexes
    users

  • 開啟分區功能

sh.enableSharding("kgc")

  • 對資料庫中的集合開啟分區

db.users.createIndex({"id":1}) #對users表建立索引
sh.shardCollection("kgc.users",{"id":1}) #表分區
sh.status() #此時再次查看,就可以已經進行分區處理了

到這裡mongodb分區群集管理的介紹就全部完成了,如果覺得有協助記得點贊、打賞下小弟哦!!!

基於CentOS7的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.