1. 程式人生 > >MongoDB4.0搭建分布式集群

MongoDB4.0搭建分布式集群

https rim ber str 官網下載 問題 根據 tps 前端路由

搭建之前先了解一下MongoDB分片群集主要有如下三個組件:

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

系統環境

Centos7.5、MongoDB4.0.2、關閉防火墻。

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)形成復制集,分片1、2、3也在各機器都部署一個實例,它們之間形成復制集,客戶端直接連接3個路由服務與之交互,配置服務和分片服務對客戶端是透明的。

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

1、下載解壓MongoDB

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

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

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

保存後執行:

srouce /etc/profile

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

啟動配置文件存放的文件夾:mkdir -p /home/mongodb/conf
配置服務數據存放目錄:mkdir -p /home/mongodb/data/config
分片1服務數據存放目錄:mkdir -p /home/mongodb/data/shard1
分片2服務數據存放目錄:mkdir -p /home/mongodb/data/shard2
分片3服務數據存放目錄:mkdir -p /home/mongodb/data/shard3
配置服務日誌存放文件:mkdir -p /home/mongodb/log/config.log
路由服務日誌存放文件:mkdir -p /home/mongodb/log/mongos.log
分片1服務日誌存放文件:mkdir -p /home/mongodb/log/shard1.log
分片2服務日誌存放文件:mkdir -p /home/mongodb/log/shard2.log
分片3服務日誌存放文件:mkdir -p /home/mongodb/log/shard3.log

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

1、在/home/mongodb/conf目錄創建config.conf:

dbpath=/home/mongodb/data/config
logpath=/home/mongodb/log/config.log
port=27018
logappend=true
fork=true
maxConns=5000
#復制集名稱
replSet=configs
#置參數為true
configsvr=true
#允許任意機器連接
bind_ip=0.0.0.0

2、配置復制集

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

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臺服務器執行相同操作)

1、在/home/mongodb/conf目錄創建shard1.conf、shard2.conf、shard3.conf,內容如下:

dbpath=/home/mongodb/data/shard1 #其他2個分片對應修改為shard2、shard3文件夾
logpath=/home/mongodb/log/shard1.log #其他2個分片對應修改為shard2.log、shard3.log
port=27001 #其他2個分片對應修改為27002、27003
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
shardsvr=true
replSet=shard1 #其他2個分片對應修改為shard2、shard3
bind_ip=0.0.0.0

端口分別是27001、27002、27003,分別對應shard1.conf、shard2.conf、shard3.conf。

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

在3臺機器的相同端口形成一個分片的復制集,由於3臺機器都需要這3個文件,所以根據這9個配置文件分別啟動分片服務:

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

2、將分片配置為復制集

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

mongo --host 10.211.55.3 --port 27001 //這裏以shard1為例,其他兩個分片則再需對應連接到27002、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臺服務器執行相同操作)

1、在/home/mongodb/conf目錄創建mongos.conf,內容如下:

logpath=/home/mongodb/log/mongos.log
logappend = true
port = 27017
fork = true
configdb = configs/10.211.55.3:27018,10.211.55.4:27018,10.211.55.5:27018
maxConns=20000
bind_ip=0.0.0.0

2、啟動mongos

分別在三臺服務器啟動:

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

3、啟動分片功能

連接mongo:

mongo --host 10.211.55.3 --port 27017

切換數據庫:

use admin

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

sh.addShard("shard1/10.211.55.3:27001,10.211.55.4:27001,10.211.55.5:27001")
sh.addShard("shard2/10.211.55.3:27002,10.211.55.4:27002,10.211.55.5:27002")
sh.addShard("shard3/10.211.55.3:27003,10.211.55.4:27003,10.211.55.5:27003")

查看集群狀態:

sh.status()

4、實現分片功能

設置分片chunk大小

use config
db.setting.save({"_id":"chunksize","value":1}) # 設置塊大小為1M是方便實驗,不然需要插入海量數據

5、模擬寫入數據

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

7、啟用數據庫分片

sh.enableSharding("calon")

8、創建索引,對表進行分片

db.user.createIndex({"id":1}) # 以"id"作為索引
sh.shardCollection(calon.user",{"id":1}) # 根據"id"對user表進行分片
sh.status() # 查看分片情況

到此,MongoDB分布式集群就搭建完畢。

MongoDB4.0搭建分布式集群