標籤:錯誤 writer enable ffffff 一個 mit text .com open
基於CentOS7的mongodb分區群集簡介
高資料量和輸送量的資料庫應用會對單機的效能造成較大的壓力,大的查詢量會將單機的CPU耗盡,大的資料量對單機的儲存壓力較大,最終會耗盡系統的記憶體而將壓力轉移到磁碟IO上。
mongodb分區是使用多個伺服器儲存資料的方法,以支援巨大的資料存放區和對資料進行操作。分區技術可以滿足Mongodb資料量大量增長的需求。,當一台mongodb伺服器不足以儲存海量資料或不足以提供可接受的讀寫輸送量時,就可以通過在多台伺服器上分割資料,使得資料庫系統能儲存和處理更多的資料。
分區的優勢
分區群集的組成
- Shard:分區伺服器,用於儲存實際的資料區塊
- configserver:設定管理員,儲存整個分區群集的配置資訊
- routers:路由伺服器
分區群集管理的實驗
實驗配置圖如上
下面開始實驗,這裡我在一台機器上開啟多個執行個體來代替多台伺服器
安裝mongodb3.2版本(手工編譯安裝)
yum -y install openssl-devel
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
當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分區群集