CentOS7上的mongodb分片羣集

CentOS7的mongodb分片羣集

簡介

高數據量和吞吐量的數據庫應用會對單機的性能形成較大的壓力,大的查詢量會將單機的CPU耗盡,大的數據量對單機的存儲壓力較大,最終會耗盡系統的內存而將壓力轉移到磁盤IO上。
mongodb分片是使用多個服務器存儲數據的方法,以支持巨大的數據存儲和對數據進行操做。分片技術能夠知足Mongodb數據量大量增加的需求。,當一臺mongodb服務器不足以存儲海量數據或不足以提供可接受的讀寫吞吐量時,就能夠經過在多臺服務器上分割數據,使得數據庫系統能存儲和處理更多的數據。linux

分片的優點

  • 使用分片減小了每一個分片須要處理的請求數,經過水平擴展,羣集能夠提升本身的存儲容量和吞吐量。mongodb

  • 使用分片減小了每一個分片存儲的數據

分片羣集的組成

  1. Shard:分片服務器,用於存儲實際的數據塊
  2. configserver:配置服務器,存儲整個分片羣集的配置信息
  3. routers:路由服務器

分片羣集管理的實驗

CentOS7上的mongodb分片羣集

實驗配置圖如上shell

下面開始實驗,這裏我在一臺機器上開啓多個實例來代替多臺服務器數據庫

安裝mongodb3.2版本(手工編譯安裝)

  • 安裝軟件環境包

yum -y install openssl-develvim

  • 解壓縮mongodb軟件包

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

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

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

  • 建立mongodb的數據存儲(/data/mongodb一、二、三、四、)和日誌存儲目錄(/data/logs)

mkdir -p /data/mongodb/mongodb{1,2,3,4}ide

mkdir /data/mongodb/logs性能

touch /data/mongodb/logs/mongodb{1,2,3,4}.log測試

chmod -R 777 /data/mongodb/logs/*.log

CentOS7上的mongodb分片羣集

  • 設置ulimit -n和ulimit -u 的值

當mongodb處於頻繁訪問的狀態,若是shell啓動進程所佔用的資源設置太低,將會產生錯誤致使沒法鏈接mongodb實例,因此這裏須要設置ulimit -n和ulimit -u 的值大於20000
ulimit -n 25000
ulimit -u 25000

CentOS7上的mongodb分片羣集

  • 建立配置服務器的配置文件

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

  • 開啓第一個實例(配置服務器)

CentOS7上的mongodb分片羣集

  • 配置分片服務器的實例
    複製生成配置文件

    cp -p mongodb1.conf mongodb2.conf #複製配置服務器的配置文件生成實例2的配置文件
    cp -p mongodb1.conf mongodb3.conf #複製配置服務器的配置文件生成實例2的配置文件

  • 修改實例二、3的配置文件

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          #指定分片服務器的模式

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

CentOS7上的mongodb分片羣集

  • 啓動路由服務器

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

CentOS7上的mongodb分片羣集

這裏關於mongos命令不知道該怎麼使用,能夠查看幫助信息

CentOS7上的mongodb分片羣集

  • 啓用分片服務器

mongo

CentOS7上的mongodb分片羣集

  • 添加分片服務器

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

添加分片服務器以後再次查看

CentOS7上的mongodb分片羣集

  • 測試分片功能

    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

CentOS7上的mongodb分片羣集

  • 開啓分片功能

sh.enableSharding("kgc")

CentOS7上的mongodb分片羣集

  • 對數據庫中的集合開啓分片

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

CentOS7上的mongodb分片羣集

CentOS7上的mongodb分片羣集

到這裏mongodb分片羣集管理的介紹就所有完成了,若是以爲有幫助記得點贊、打賞下小弟哦!!!

相關文章
相關標籤/搜索