-
簡介:大數據量和吞吐量的數據庫會對單機的性能 造成較大壓力,大量的數據查詢會將單機的CPU耗盡,大的數據量對單機的存儲壓力較大,最終會耗盡系統的內存,將壓力轉移到磁盤IO上。
-
優點:1.使用分片減少了每個分片需要處理的請求數。2.使用分片減少了每個分片存儲的數據。
-
mongodb分片羣集的組成:shard(分片服務器),config server(配置服務器),route(路由服務器)
- 分片服務器:存儲數據
- 配置服務器:管理分片服務器
- 路由服務器:作爲前端路由
安裝mongodb3.2:
安裝openssl-devel並解壓到/opt下
便於管理mongo和mongod,做個鏈接
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
ln -s /usr/local/mongodb/bin/mongo /usr/bin/mongo
ln -s /usr/local/mongodb/bin/mongod /usr/bin/mongod
創建四個實例的數據文件和日誌文件
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
nlimit -u和ulimit -n的值大於20000
ulimit -n 25000
ulimit -u 25000
配置服務器
cd /usr/local/mongodb/bin/ //在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
mongod -f /usr/local/mongodb/bin/mongodb1.conf //啓動服務
sysctl -w vm.zone_reclaim_mode=0
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
//某節點內存不足時,從其他節點分配內存
分片服務器
#mongodb2.conf
cp -p mongodb1.conf mongodb2.conf
vim mongodb2.conf //對mongodb2.conf進行配置
port=47017 //端口號爲47017
dbpath=/data/mongodb/mongodb2 //數據文件
logpath=/data/mongodb/logs/mongodb2.log //日誌文件
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
shardsvr=true
#mongodb3.conf
cp -p mongodb1.conf mongodb3.conf
vim mongodb3.conf
port=47018 //端口爲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
啓動路由服務器
./mongos --port 27017 --fork --logpath=/usr/local/mongodb/bin/route.log --configdb 192.168.235.204:37017 --chunkSize 1 //必須在/usr/local/mongodb/bin下
啓用分片服務器
mongo
mongos> show dbs
mongos> sh.status() //shards下爲空,沒有分片服務器
mongos> sh.addShard("192.168.177.133:47017") //添加47017端口的分片服務器
mongos> sh.addShard("192.168.177.133:47018") //添加47018端口的分片服務器
mongos> sh.status()
分片功能
先添加一個數據庫,在集合裏創建數據
mongos> sh.enableSharding("school") #啓用數據庫分片
mongos> db.info.createIndex({"id":1}) #對info表創建索引
mongos> sh.shardCollection("school.info",{"id":1}) #表分片
mongos> sh.status()