本文主要介紹mongodb集羣的搭建安裝過程,對於學習mongodb的同窗頗有幫助,包括分片模式、複製集模式、是否啓用認證等,本文選取mongodb-3.6.3版本爲例進行詳細安裝說明,其餘版本搭建過程和本過程同樣,只需按照本文說明操做便可。node
- 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的數據所有存放在這裏面,若是有多個分片,則這裏還會建立shardcluster2,shardcluster-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
說明:
- mongo-cfg集羣和mongod複製集都是由mongod進程提供服務,他們的配置文件幾乎徹底一致,惟一的區別是clusterRole角色不同,複製集配置中角色爲shardsvr(表示分片),mongo-cfg集羣角色爲configsvr
- mongo-cfg配置中的replSetName名稱必須和mongos configDB配置名稱同樣
- 同理,node2和node3中的etc下面的配置文件修改過程相似
- 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集羣添加帳號信息,添加成功後退出服務,而後修改配置加上認證配置,從新啓動服務便可,注意退出服務順序爲:
- stop mongos
- stop mongod
- Stop mongo-cfg
重啓服務的啓動順序爲:
- start mongo-cfg
- start mongod
- 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.拷貝keyfile到mongos、mongod集羣節點、mongo-cfg集羣節點的相應目錄中
cp keyfile keys
cp keyfile ../node2/keys/
cp keyfile ../node3/keys/
3.4 修改配置文件,在mongod和mongo-cfg的配置文件中,使能認證配置
1. mongo-cfg和mongod集羣配置中,把如下配置加上
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帶認證分片集羣測試
經過上面的步驟整個分片集羣已經安裝完畢,進行簡單測試:
插入後查找,查找成功,說明帶認證分片集羣搭建完成