① 使用分片解決磁盤空間的問題。
②經過分片讓寫壓力分散到各個分片上面,使用分片服務器自身的資源。
③想把大量數據放到內存裏提升性能。和上面同樣,經過分片使用分片服務器自身的資源。linux
4、角色介紹
① 配置服務器。是一個獨立的mongod進程,保存集羣和分片的元數據,即各分片包含了哪些數據的信息。最早開始創建,啓用日誌功能。像啓動普通的mongod同樣啓動配置服務器,指定configsvr選項。當服務不可用,則變成只讀,沒法分塊、遷移數據。
② 路由服務器。即mongos,起到一個路由的功能,供程序鏈接。自己不保存數據,在啓動時從配置服務器加載集羣信息,開啓mongos進程須要知道配置服務器的地址,指定configdb選項。
③ 分片服務器。是一個獨立普通的mongod進程,保存數據信息。能夠是一個副本集也能夠是單獨的一臺服務器。
原理拓撲圖
實驗環境:
版本:MongoDB 3.2.1
安裝包:連接:https://pan.baidu.com/s/1Dfy6Ria49Dc_oMKOBUNY1g 密碼:fnwvmongodb
主機 | 虛擬機 | IP地址 | 端口 |
---|---|---|---|
配置服務器 | CentOS-7-x86_64 | 192.168.37.128 實例1 | 37017 |
路由服務器 | CentOS-7-x86_64 | 192.168.37.128 實例1 | 37017 |
分片服務器1 | CentOS-7-x86_64 | 192.168.37.128 實例2 | 47017 |
分片服務器2 | CentOS-7-x86_64 | 192.168.37.128 實例3 | 47018 |
實驗過程:
一、解壓mongodb安裝包數據庫
mkdir /opt/abc
mount.cifs //192.168.37.1/SHARE /opt/abc
cd /opt/abc
tar zxvf mongodb-linux-x86_64-3.2.1.tgz -C /optvim
二、將mongodb文件移動到/usr/local目錄下服務器
cd /opt
mv mongodb-linux-x86_64-3.2.1/ /usr/local/mongodbapp
三、將mongo、mongod作快捷引用ide
ln -s /usr/local/mongodb/bin/mongo /usr/bin/mongo
ln -s /usr/local/mongodb/bin/mongod /usr/bin/mongod性能
四、建立實例(4個實例:驗3個,1個備用)的數據存放目錄及日誌存放目錄優化
mkdir -p /data/mongodb/mongodb{1,2,3,4} #數據存放目錄
cd /data/mongodb/
mkdir logs
touch logs/mongodb{1,2,3,4}.log #日誌存放文件
chmod 777 logs/*.logspa
五、優化
ulimit -u 25000 #放大進程數
ulimit -n 25000 #放大打開文件數
配置服務器
六、編輯配置服務器文件
cd /usr/local/mongodb/bin
vim mongodb1.confport=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
八、開啓配置服務器
mongod -f mongodb.conf
mongo --port 37017
片服務器
九、複製實例1配置文件(實例2)
cp -p mongodb.conf mongodb2.conf
十、修改配置文件(實例2)
vim mongodb2.conf
port=47017 dbpath=/data/mongodb/mongodb2 logpath=/data/mongodb/logs/mongodb2.log shardsvr=true #分片服務器模式十一、複製實例2配置文件(實例3)
cp -p mongodb2.conf mongodb3.conf
十、修改配置文件(實例3)
vim mongodb3.conf
port=47018 dbpath=/data/mongodb/mongodb3 logpath=/data/mongodb/logs/mongodb3.log
十一、開啓分片服務器
mongod -f mongodb2.conf
mongo --port 47017
mongod -f mongodb3.conf
mongo --port 47018
路由服務器
十二、開啓路由服務
./mongos --port 27017 --fork --logpath=/usr/local/mongodb/bin/route.log --configdb 192.168.37.128:37017 --chunkSize 1
--port 27017:路由配置服務器入口 --fork:後臺運行 logpath:日誌文件存儲路徑 --configdb:指定真正處理請求的服務器(配置服務器) --chunkSize 1 :不加也可,默認200MB
啓用分片服務
1三、登陸數據庫
mongo
1四、查看分片服務器是否存在
sh.status() #shards下爲空,無分片服務器
1五、添加分片服務器
sh.addShard("192.168.37.128:47017")
sh.addShard("192.168.37.128:47018")
驗證分片服務功能
1六、建立數據庫kgc---集合users---添加數據
use kgc
for(var i=1;i<=10000;i++)db.users.insert({"id":1,"name":"tom"+i}) #寫入數據
mongos> show dbsconfig 0.031GB kgc 0.078GB
1七、查看是否進行分片處理
sh.status()
1八、啓用數據庫分片
sh.enableSharding("kgc")
sh.status()
1九、建立索引,根據索引進行分片
db.users.createIndex({"id":1}) #對user表建立索引
sh.shardCollection("kgc.users",{"id":1}) #表分片
sh.status()
20、到此,實驗已完成。另外,可依照上述步驟添加實例4,又會從新進行分片處理。