MongoDB4.0搭建分佈式集羣

MongoDB4.0搭建分佈式集羣

2018年09月15日 11:11:42 Calon Mo 閱讀數 3994前端

版權聲明:本文爲博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接和本聲明。linux

本文連接:http://www.javashuo.com/article/p-bmqjcvkr-cs.htmlmongodb

搭建以前先了解一下MongoDB分片羣集主要有以下三個組件:數據庫

  • Shard:分片服務器,用於存儲實際的數據塊,實際生產環境中一個shard server 角色能夠由幾臺服務器組成一個Peplica Set 承擔,防止主機單點故障。
  • Config Server:配置服務器,存儲了整個分片羣集的配置信息,其中包括chunk信息。
  • Routers:前端路由,客戶端由此接入,且讓整個羣集看上去像單一數據庫,前端應用能夠透明使用。

 

系統環境vim

Centos7.五、MongoDB4.0.二、關閉防火牆。bash

IP 路由服務端口 配置服務端口 分片1端口 分片2端口 分片3端口
10.211.55.3 27017 27018 27001 27002 27003
10.211.55.4 27017 27018 27001 27002 27003
10.211.55.5 27017 27018 27001 27002 27003

三臺機器的配置服務(27018)造成複製集,分片一、二、3也在各機器都部署一個實例,它們之間造成複製集,客戶端直接鏈接3個路由服務與之交互,配置服務和分片服務對客戶端是透明的。服務器

 

 

服務器的安裝及配置(3臺服務器執行相同操做)app

一、下載解壓MongoDB分佈式

到MongoDB官網下載:https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.2.tgzspa

解壓到/home/mongodb,設置環境變量:

export PATH=$PATH:/home/mongodb/bin

保存後執行:

srouce /etc/profile

二、建立路由、配置、分片等的相關目錄與文件

 
  1. 啓動配置文件存放的文件夾:mkdir -p /home/mongodb/conf

  2. 配置服務數據存放目錄:mkdir -p /home/mongodb/data/config

  3. 分片1服務數據存放目錄:mkdir -p /home/mongodb/data/shard1

  4. 分片2服務數據存放目錄:mkdir -p /home/mongodb/data/shard2

  5. 分片3服務數據存放目錄:mkdir -p /home/mongodb/data/shard3

  6. 配置服務日誌存放文件:mkdir -p /home/mongodb/log/config.log

  7. 路由服務日誌存放文件:mkdir -p /home/mongodb/log/mongos.log

  8. 分片1服務日誌存放文件:mkdir -p /home/mongodb/log/shard1.log

  9. 分片2服務日誌存放文件:mkdir -p /home/mongodb/log/shard2.log

  10. 分片3服務日誌存放文件:mkdir -p /home/mongodb/log/shard3.log

 

 

配置服務器部署(3臺服務器執行相同操做)

一、在/home/mongodb/conf目錄建立config.conf:

 
  1. dbpath=/home/mongodb/data/config

  2. logpath=/home/mongodb/log/config.log

  3. port=27018

  4. logappend=true

  5. fork=true

  6. maxConns=5000

  7. #複製集名稱

  8. replSet=configs

  9. #置參數爲true

  10. configsvr=true

  11. #容許任意機器鏈接

  12. bind_ip=0.0.0.0

二、配置複製集

分別啓動三臺服務器的配置服務: 

mongod -f /home/mongodb/conf/config.conf

鏈接mongo,只需在任意一臺機器執行便可:

mongo --host 10.211.55.3 --port 27018

切換數據庫:

use admin

初始化複製集:

rs.initiate({_id:"configs",members:[{_id:0,host:"10.211.55.3:27018"},{_id:1,host:"10.211.55.4:27018"}, {_id:2,host:"10.211.55.5:27018"}]})

其中_id:"configs"的configs是上面config.conf配置文件裏的複製集名稱,把三臺服務器的配置服務組成複製集。

查看狀態:

rs.status()

等幾十秒左右,執行上面的命令查看狀態,三臺機器的配置服務就已造成複製集,其中1臺爲PRIMARY,其餘2臺爲SECONDARY。

 

 

分片服務部署(3臺服務器執行相同操做)

一、在/home/mongodb/conf目錄建立shard1.conf、shard2.conf、shard3.conf,內容以下:        

 
  1. dbpath=/home/mongodb/data/shard1 #其餘2個分片對應修改成shard二、shard3文件夾

  2. logpath=/home/mongodb/log/shard1.log #其餘2個分片對應修改成shard2.log、shard3.log

  3. port=27001 #其餘2個分片對應修改成2700二、27003

  4. logappend=true

  5. fork=true

  6. maxConns=5000

  7. storageEngine=mmapv1

  8. shardsvr=true

  9. replSet=shard1 #其餘2個分片對應修改成shard二、shard3

  10. bind_ip=0.0.0.0

端口分別是2700一、2700二、27003,分別對應shard1.conf、shard2.conf、shard3.conf。

還有數據存放目錄、日誌文件這幾個地方都須要對應修改。

在3臺機器的相同端口造成一個分片的複製集,因爲3臺機器都須要這3個文件,因此根據這9個配置文件分別啓動分片服務:

mongod -f /home/mongodb/conf/shard{1/2/3}.conf

二、將分片配置爲複製集

鏈接mongo,只需在任意一臺機器執行便可:

mongo --host 10.211.55.3 --port 27001 //這裏以shard1爲例,其餘兩個分片則再需對應鏈接到2700二、27003的端口進行操做便可

切換數據庫:

use admin

初始化複製集:

rs.initiate({_id:"shard1",members:[{_id:0,host:"10.211.55.3:27001"},{_id:1,host:"10.211.55.4:27001"},{_id:2,host:"10.211.55.5:27001"}]})

以上是基於分片1來操做,同理,其餘2個分片也要連到各自的端口來執行一遍上述的操做,讓3個分片各自造成1主2從的複製集,注意端口及仲裁節點的問題便可,操做完成後3個分片都啓動完成,並完成複製集模式。

 

路由服務部署(3臺服務器執行相同操做)

一、在/home/mongodb/conf目錄建立mongos.conf,內容以下:        

 
  1. logpath=/home/mongodb/log/mongos.log

  2. logappend = true

  3. port = 27017

  4. fork = true

  5. configdb = configs/10.211.55.3:27018,10.211.55.4:27018,10.211.55.5:27018

  6. maxConns=20000

  7. bind_ip=0.0.0.0

 

二、啓動mongos

分別在三臺服務器啓動:

mongos -f /home/mongodb/conf/mongos.conf

 

三、啓動分片功能

鏈接mongo:

mongo --host 10.211.55.3 --port 27017

切換數據庫:

use admin

添加分片,只需在一臺機器執行便可:        

 
  1. sh.addShard("shard1/10.211.55.3:27001,10.211.55.4:27001,10.211.55.5:27001")

  2. sh.addShard("shard2/10.211.55.3:27002,10.211.55.4:27002,10.211.55.5:27002")

  3. sh.addShard("shard3/10.211.55.3:27003,10.211.55.4:27003,10.211.55.5:27003")

查看集羣狀態:

sh.status()

 

四、實現分片功能

設置分片chunk大小        

 
  1. use config

  2. db.setting.save({"_id":"chunksize","value":1}) # 設置塊大小爲1M是方便實驗,否則須要插入海量數據

 

五、模擬寫入數據        

 
  1. use calon

  2. for(i=1;i<=50000;i++){db.user.insert({"id":i,"name":"jack"+i})} #模擬往calon數據庫的user表寫入5萬數據

 

七、啓用數據庫分片

sh.enableSharding("calon")

 

八、建立索引,對錶進行分片        

 
  1. db.user.createIndex({"id":1}) # 以"id"做爲索引

  2. sh.shardCollection("calon.user",{"id":1}) # 根據"id"對user表進行分片

  3. sh.status() # 查看分片狀況

 

到此,MongoDB分佈式集羣就搭建完畢。

 

vim  /etc/rc.d/rc.local

#!/bin/bash
export PATH=$PATH:/data/mongodb/bin

mongod -f /data/mongodb/conf/config.conf
mongod -f /data/mongodb/conf/shard1.conf
mongod -f /data/mongodb/conf/shard2.conf
mongod -f /data/mongodb/conf/shard3.conf
mongos -f /data/mongodb/conf/mongos.conf
設置開機自動啓動

vim /data/mongodb/conf/config.conf

dbpath=/data/mongodb/data/config
logpath=/data/mongodb/log/config.log/config.log
port=27018
logappend=true
fork=true
maxConns=5000
#複製集名稱
replSet=configs
#置參數爲true
configsvr=true
#容許任意機器鏈接
bind_ip=0.0.0.0
auth = true
keyFile=/data/mongodb/testKeyFile.file
setParameter=enableLocalhostAuthBypass=1
 

vim /data/mongodb/conf/shard1.conf


dbpath=/data/mongodb/data/shard1 #其餘2個分片對應修改成shard二、shard3文件夾

logpath=/data/mongodb/log/shard1.log #其餘2個分片對應修改成shard2.log、shard3.log

port=27001 #其餘2個分片對應修改成2700二、27003

logappend=true

fork=true

maxConns=5000

storageEngine=mmapv1

shardsvr=true

replSet=shard1 #其餘2個分片對應修改成shard二、shard3

bind_ip=0.0.0.0

auth = true
keyFile=/data/mongodb/testKeyFile.file

 

vim /data/mongodb/conf/shard2.conf

dbpath=/data/mongodb/data/shard2 #其餘2個分片對應修改成shard二、shard3文件夾

logpath=/data/mongodb/log/shard2.log #其餘2個分片對應修改成shard2.log、shard3.log

port=27002 #其餘2個分片對應修改成2700二、27003

logappend=true

fork=true

maxConns=5000

storageEngine=mmapv1

shardsvr=true

replSet=shard2 #其餘2個分片對應修改成shard二、shard3

bind_ip=0.0.0.0

auth = true
keyFile=/data/mongodb/testKeyFile.file
 

vim  /data/mongodb/conf/shard3.conf

dbpath=/data/mongodb/data/shard3 #其餘2個分片對應修改成shard二、shard3文件夾

logpath=/data/mongodb/log/shard3.log #其餘2個分片對應修改成shard2.log、shard3.log

port=27003 #其餘2個分片對應修改成2700二、27003

logappend=true

fork=true

maxConns=5000

storageEngine=mmapv1

shardsvr=true

replSet=shard3 #其餘2個分片對應修改成shard二、shard3

bind_ip=0.0.0.0

#auth = true
keyFile=/data/mongodb/testKeyFile.file
 

vim  /data/mongodb/conf/mongos.conf


logpath=/data/mongodb/log/mongos.log

logappend = true

port = 27017

fork = true
keyFile=/data/mongodb/testKeyFile.file

configdb = configs/192.168.1.228:27018,192.168.30.229:27018,192.168.30.204:27018,192.168.30.227:27018

maxConns=20000  

相關文章
相關標籤/搜索