Mongodb集羣搭建一篇就夠了-複製集模式、分片模式、帶認證、不帶認證等(帶詳細步驟說明)

       本文主要介紹mongodb集羣的搭建安裝過程,對於學習mongodb的同窗頗有幫助,包括分片模式、複製集模式、是否啓用認證等,本文選取mongodb-3.6.3版本爲例進行詳細安裝說明,其餘版本搭建過程和本過程同樣,只需按照本文說明操做便可node

  1. Mongodb分片集羣架構

       如上圖所示,整個mongodb分片集羣由lvs、mongos、mongo-config集羣、mongodb複製集組成,其對應的功能以下:linux

Mongos: 提供路由功能mongodb

Mongo-config集羣:配置服務器至關於集羣的大腦,保存在集羣和路由分片的元數據,包括集羣有哪些分片、分片的是哪些集合、以及數據塊的分佈。數據庫

Mongodb複製集:用於多個mongod實例之間的數據複製,維護mongod集羣的穩定性,實現故障轉移,故障切換,故障恢復。服務器

有了該架構,能夠很方便的實現增長可用RAM、增長可用磁盤空間、減輕單臺服務器的負載、處理單個mongod集羣沒法承受的吞吐量。架構

如下按照mongod複製集、mongo-config集羣、mongos代理順序進行安裝介紹其地址信息分別以下:app

mongos節點: 127.0.0.1:9000,127.0.0.1:9000學習

mongo-cfg集羣節點: 127.0.0.1:8000,127.0.0.1:8001,127.0.0.1:8002測試

mongod複製分片1: 127.0.0.1: 27017,127.0.0.1: 27018,127.0.0.1: 27019url

mongod複製分片2: 127.0.0.1: 27027,127.0.0.1: 27028,127.0.0.1: 27029

2. 分片集羣(不帶認證)安裝構建過程

2.1下載mongodb安裝包

        到https://www.mongodb.org/dl/linux/x86_64-rhel62       https://www.mongodb.org/dl/linux/x86_64-rhel70下載對應mongodb二進制安裝而後解壓到安裝目錄,例如本文指定安裝目錄爲/usr/local/,以下圖所示:

       安裝完成後,檢查mongo二進制文件是否能夠正常運行,若是能正常運行,則會有相應提示,以下:

2.2 mongod分片複製集安裝過程

2.2.1 不帶認證分片集羣搭建過程

2.2.1.1建立mongo分片複製集節點相關目錄

       假設數據庫信息存放到/home/mongodb目錄,則根據下面步驟建立相關的子目錄同時修改配置文件。

cd  /home/mongodb

mkdir  taxi_business   //表明這個集羣是什麼業務

cd  taxi_business

mkdir  shardcluster1   //mongo賦值分片1的數據所有存放在這裏面若是有多分片,則這裏還會建立shardcluster2shardcluster-n根據本身實際須要建立

cd  shardcluster1   

mkdir node1 node2 node3  //該複製集分片有3個節點,相關數據分佈存入到node一、node2、node3節點

cd node1

mkdir  data  etc  keys  logs  //建立node1節點的相關配置、數據、日誌、key目錄

cd node2

mkdir  data  etc  keys  logs

cd node3

mkdir  data  etc  keys  logs

2.2.1.2 修改配置mongod文件

processManagement:

  fork: true

systemLog:

  destination: file

# 指定mongod服務日誌文件目錄,若是node2則把node1爲node2,類推

  path: /home/mongodb/taxi_business/shardcluster1/node1/logs/mongodb.log

  logAppend: true

storage:

  journal:

enabled: true

  # 指定數據存放的路徑若是node2則把node1爲node2,類推

  dbPath: /home/mongodb/taxi_business/shardcluster1/node1/logs/data/

  directoryPerDB: true

  engine: wiredTiger  #選擇存儲引擎

  wiredTiger:

    engineConfig:

      cacheSizeGB: 20  #指定存儲引擎的cache大小

      directoryForIndexes: true

    collectionConfig:

      blockCompressor: snappy

    indexConfig:

      prefixCompression: true

net:

   port: 27028          #設置mongod監聽端口

   maxIncomingConnections: 10000 #設置最大鏈接數

   bindIpAll: true

operationProfiling:

   slowOpThresholdMs: 100  #設置慢日誌時間

   mode: slowOp

sharding:       #是否支持分片,本集羣須要支持分片,所以須要加上配置

   clusterRole: shardsvr

   archiveMovedChunks: true

replication:  

   oplogSizeMB: 10240

   replSetName: featdoc_1  #表示這是featdoc集羣的第一個分片複製集中的全部node節點這個名字要同樣若是是第二個複製集,這裏能夠取名featdoc_2

#不帶認證須要屏蔽一下配置

#security:

#   keyFile: /home/mongodb/taxi_business/shardcluster1/node1/keys/keyfile

#   clusterAuthMode: keyFile

#   authorization: enabled

注意:把該配置文件拷貝到全部mongod集羣的etc配置文件中,並根據實際狀況修改端口和路徑

2.2.1.3 啓動mongod服務

       1. 根據前面的配置啓動mongod服務

numactl --interleave=all /usr/local/mongodb-3.6.3/bin/mongod -f /home/mongodb/taxi_business/shardcluster1/node1/etc/mongodb.cnf –fork

numactl --interleave=all /usr/local/mongodb-3.6.3/bin/mongod -f /home/mongodb/taxi_business/shardcluster1/node2/etc/mongodb.cnf –fork

numactl --interleave=all /usr/local/mongodb-3.6.3/bin/mongod -f /home/mongodb/taxi_business/shardcluster1/node3/etc/mongodb.cnf –fork

      注意: mongodb服務端使用numactl --interleave=all 能夠成倍的提升導入速度

2.2.1.4 構建node1 node2 node3同一個複製集

/usr/local/mongodb-3.6.3/bin/mongo  --port 27017

config = {_id : "featdoc_1",   members : [{_id : 0, host : "127.0.0.1:27017" },{_id : 1, host : "127.0.0.1:27018" },{_id : 2, host : "127.0.0.1:27019"}]}

rs.initiate(config)

Rs.initiate(config)執行後會進行主從選舉,選舉成功後能夠經過rs.status()查看複製集集羣狀態

rs.status()

       而後經過rs.status()查看集羣狀態能夠看到27017節點被選舉爲主節點該複製集1集羣搭建完成

若是要搭建其餘分片複製集2,過程相似,以此內推。 

2.2.2 mongo-cfg集羣搭建

2.2.2.1 建立mongo-cfg集羣相關節點目錄

cd /home/mongodb/taxi_business

mkdir mongocfg_cluster

mkdir node1  node2  node3

cd node1

mkdir data  etc  keys  logs

cd ../node2

mkdir data  etc  keys  logs

cd ../node3

mkdir data  etc  keys  logs

2.2.2.2 添加mongo-cfg配置文件

       以node1爲,在etc目錄下面建立mongocfg.cnf配置文件內容以下:

processManagement:

  fork: true

systemLog:

  destination: file

  #日誌路徑,node2 node3節點須要把node1改爲node2或者node3

  path: /home/mongodb/taxi_business/mongocfg_cluster/node1/logs/mongodb.log

  logAppend: true

storage:

  journal:

enabled: true

  #數據路徑,node2 node3節點須要把node1改爲node2或者node3

  dbPath: /home/mongodb/taxi_business/mongocfg_cluster/node1/data/

  directoryPerDB: true

  engine: wiredTiger

  wiredTiger:

    engineConfig:

      cacheSizeGB: 20

      directoryForIndexes: true

    collectionConfig:

      blockCompressor: snappy

    indexConfig:

      prefixCompression: true

net:

   port: 8000  #監聽的端口

   maxIncomingConnections: 10000  

   bindIpAll: true

operationProfiling:

   slowOpThresholdMs: 100

   mode: slowOp

sharding:

   clusterRole: configsvr #這裏是重點,表示該mongod進程提供mongo-cfg服務

   archiveMovedChunks: true

replication:

   oplogSizeMB: 10240

   replSetName: featdoc  #須要mongos configDB配置中的名字一致

 

#不認證集羣須要屏蔽如下配置

#security:

#key路徑,node2 node3節點須要把node1改爲node2或者node3

#   keyFile: /home/mongodb/taxi_business/mongocfg_cluster/node1/keys/keyfile

#   clusterAuthMode: keyFile

#   authorization: enabled

說明: 

  1. mongo-cfg集羣和mongod複製集都是mongod進程提供服務,他們的配置文件幾乎徹底一致,惟一的區別是clusterRole角色不同,複製集配置中角色爲shardsvr(表示分片)mongo-cfg集羣角色爲configsvr
  2. mongo-cfg配置中的replSetName名稱必須mongos configDB配置名稱同樣
  3. 同理,node2node3etc下面的配置文件修改過程相似
  4. Mongo-cfg目錄etc下面的配置文件最好取名爲mongocfg.cnf,這樣能夠很方便的從進程能知道是mongo分片集羣仍是mongo-cfg集羣

注意:把該配置文件拷貝到全部mongo-config集羣node節點etc配置文件中,並根據實際狀況修改端口和路徑

2.2.2.3 啓動mongo-cfg服務

numactl --interleave=all /usr/local/mongodb-3.6.3/bin/mongod -f /home/mongodb/taxi_business/shardcluster1/node1/etc/mongodb.cnf --fork

numactl --interleave=all /usr/local/mongodb-3.6.3/bin/mongod -f /home/mongodb/taxi_business/shardcluster1/node2/etc/mongodb.cnf --fork

numactl --interleave=all /usr/local/mongodb-3.6.3/bin/mongod -f /home/mongodb/taxi_business/shardcluster1/node3/etc/mongodb.cnf –fork

2.2.2.4 構建不帶認證的mongo-cfg集羣

       登陸任何一cfg節點,構建集羣:

config = {_id : "featdoc",   members : [{_id : 0, host : "127.0.0.1:8000" },{_id : 1, host : "127.0.0.1:8001" },{_id : 2, host : "127.0.0.1:8002"}]}

rs.initiate(config)

2.2.3 mongos不帶認證代理搭建

2.2.3.1 建立mongos相關的目錄

cd /home/mongodb/taxi_business

mkdir mongos

cd mongos

mkdir mongos_1 mongos_2

cd mongos_1

mkdir etc  keys  logs

cd mongos_2

mkdir etc  keys  logs

cd /home/mongodb/taxi_business/mongos/mongos_1/etc

該目錄建立mongos.cnf

2.2.3.2 添加mongos配置文件

#不帶認證須要屏蔽這兩行配置

#security:

#   keyFile: /home/mongodb/taxi_business/mongos/mongos_1/keys/keyfile

 

systemLog:

  destination: file

  logAppend: true

  path: /home/mongodb/taxi_business/mongos/mongos_1/logs/mongos.log

processManagement:

  fork: true

  pidFilePath: /home/mongodb/taxi_business/mongos/mongos_1/mongos.pid

net:

  port: 9000   #端口

  maxIncomingConnections: 20000

sharding:

  # 這裏的featdoc必須和mongs configDB配置名稱一致

  # 這裏的三個地址爲mongo-cfg集羣的地址

  configDB: featdoc/127.0.0.1:8000,127.0.0.1:8001,127.0.0.1:8002

2.2.3.3 啓動mongos服務

numactl --interleave=all /usr/local/mongodb-3.6.3/bin/mongos -f /home/mongodb/taxi_business/mongos/mongos_1/etc/mongos.cnf

 

2.2.3.4 mongos代理添加分片信息

sh.addShard("featdoc_1/127.0.0.1:27017,127.0.0.1:27018,127.0.0.1:27019")

2.2.3 mongos不帶認證代理搭建

2.2.3.1 建立mongos相關的目錄

cd /home/mongodb/taxi_business

mkdir mongos

cd mongos

mkdir mongos_1 mongos_2

cd mongos_1

mkdir etc  keys  logs

cd mongos_2

mkdir etc  keys  logs

cd /home/mongodb/taxi_business/mongos/mongos_1/etc

該目錄建立mongos.cnf

2.2.3.2 添加mongos配置文件

#不帶認證須要屏蔽這兩行配置

#security:

#   keyFile: /home/mongodb/taxi_business/mongos/mongos_1/keys/keyfile

systemLog:

  destination: file

  logAppend: true

  path: /home/mongodb/taxi_business/mongos/mongos_1/logs/mongos.log

processManagement:

  fork: true

  pidFilePath: /home/mongodb/taxi_business/mongos/mongos_1/mongos.pid

net:

  port: 9000   #端口

  maxIncomingConnections: 20000

sharding:

  # 這裏的featdoc必須和mongs configDB配置名稱一致

  # 這裏的三個地址爲mongo-cfg集羣的地址

  configDB: featdoc/127.0.0.1:8000,127.0.0.1:8001,127.0.0.1:8002

2.2.3.3 啓動mongos服務

numactl --interleave=all /usr/local/mongodb-3.6.3/bin/mongos -f /home/mongodb/taxi_business/mongos/mongos_1/etc/mongos.cnf

2.2.3.4 mongos代理添加分片信息

sh.addShard("featdoc_1/127.0.0.1:27017,127.0.0.1:27018,127.0.0.1:27019")

注意: featdoc_1必須分片對應的複製集的replSetName名字一致

若是要再搭建一個mongos,搭建步驟相似

3. 分片集羣(帶認證)安裝構建過程

       接前面的第2章節認證分片集羣搭建過程,首先須要搭建好不帶認證分片集羣(mongos+mongo-cfg集羣+mongo複製集集羣),參考前面

而後爲mongos和mongod集羣添加帳號信息添加成功後退出服務,而後修改配置加上認證配置,從新啓動服務便可,注意退出服務順序爲:

  1. stop mongos
  2. stop mongod
  3. Stop mongo-cfg

       重啓服務的啓動順序爲:

  1. start mongo-cfg
  2. start mongod
  3. start mongos

3.1 爲不帶認證的mongo複製集和mongos添加帳號

       1. 登陸mongo複製集集羣主節點,mongo複製集集羣添加帳號

/home/yyz/mongodb-test/bin/mongo 127.0.0.1:27017

use admin

db.createUser({user: "root", pwd: "123456", roles: [{role: "root", db: "admin"}]});

db.createUser( { user: "admin", pwd: "123456", roles: [{role: "userAdminAnyDatabase", db: "admin"}]});

2. mongos代理添加帳號

/home/yyz/mongodb-test/bin/mongo 127.0.0.1:9000

use admin

db.createUser({user: "root", pwd: "123456", roles: [{role: "root", db: "admin"}]});

db.createUser( { user: "admin", pwd: "123456", roles: [{role: "userAdminAnyDatabase", db: "admin"}]});

3.2 shutdown關閉mongos、mongod集羣、mongo-cfg

       依次登陸mongos、mongod節點、mongo-cfg節點,而後執行:
use admin

db.shutdownServer()

3.3 生成key文件,並拷貝到全部node節點的keys目錄

1. 生成key文件,並修改權限

openssl rand -base64 666 > keyfile

chmod 600 keyfile

2.拷貝keyfilemongosmongod集羣節點、mongo-cfg集羣節點的相應目錄中

cp keyfile keys

cp keyfile ../node2/keys/

cp keyfile ../node3/keys/

3.4 修改配置文件,在mongodmongo-cfg配置文件中,使能認證配置

1. mongo-cfgmongod集羣配置中,把如下配置加上

security:

#key路徑,node2 node3節點須要把node1改爲node2或者node3

   keyFile: /home/mongodb/taxi_business/mongocfg_cluster/node1/keys/keyfile

   clusterAuthMode: keyFile

   authorization: enabled

2. 在mongos配置文件中,把如下配置加上:

security:

   keyFile: /home/mongodb/taxi_business/mongos/mongos_1/keys/keyfile

3.4 依次重啓mongo-cfg集羣、mongo複製集集羣、mongos代理

1. 啓動mong-cfg集羣實例

numactl --interleave=all /usr/local/mongodb-3.6.3/bin/mongod -f /home/mongodb/taxi_business/mongocfg_cluster/node1/etc/mongocfg.cnf

numactl --interleave=all /usr/local/mongodb-3.6.3/bin/mongod -f /home/mongodb/taxi_business/mongocfg_cluster/node2/etc/mongocfg.cnf

numactl --interleave=all /usr/local/mongodb-3.6.3/bin/mongod -f /home/mongodb/taxi_business/mongocfg_cluster/node3/etc/mongocfg.cnf

2.啓動mongo複製集集羣實例

numactl --interleave=all  /usr/local/mongodb-3.6.3/bin/mongod -f /home/mongodb/taxi_business/shardcluster1/node1/etc/mongodb.cnf

numactl --interleave=all /usr/local/mongodb-3.6.3/bin/mongod -f /home/mongodb/taxi_business/shardcluster1/node2/etc/mongodb.cnf

numactl --interleave=all /usr/local/mongodb-3.6.3/bin/mongod -f /home/mongodb/taxi_business/shardcluster1/node3/etc/mongodb.cnf

3.啓動mongos代理實例

numactl --interleave=all /usr/local/mongodb-3.6.3/bin/mongos -f /home/mongodb/taxi_business/mongos/mongos_1/etc/mongos.cnf

numactl --interleave=all /usr/local/mongodb-3.6.3/bin/mongos -f /home/mongodb/taxi_business/mongos/mongos_2/etc/mongos.cnf

3.5帶認證分片集羣測試

       經過上面的步驟整個分片集羣已經安裝完畢,進行簡單測試: 

      插入後查找,查找成功,說明認證分片集羣搭建完成

相關文章
相關標籤/搜索