接MongoDB集羣部署搭建(二)
config server 集羣配置
根據之前的服務器規劃,需要在三臺機器上部署config server 副本集,首先在該三臺服務器上分別添加一下配置文件:
vi /application/component/mongodb/conf/config.conf
加入以下內容:
# log日誌路徑
systemLog:
destination: file
logAppend: true
path: /application/component/mongodb/config/logs/config.log
# data目錄
storage:
dbPath: /application/component/mongodb/config/data/
journal:
enabled: true
# 運行pid文件
processManagement:
fork: true
pidFilePath: /application/component/mongodb/config/logs/configsrv.pid
# network配置
net:
port: 21000
bindIp: 0.0.0.0
# 集羣名稱
replication:
replSetName: configs
# 聲明集羣的配置數據服務
sharding:
clusterRole: configsvr
保存並退出並啓動三臺服務器的config server:
mongod -f /application/component/mongodb/conf/config.conf
登錄任意一臺配置服務器(注意是配置端口),初始化配置副本集,輸入命令
mongo --port 21000
控制檯輸入並執行
#定義副本集配置(鍵“_id”對應的值必須與配置文件中的replicaction.replSetName一致)
config = {
_id : "configs",
members : [
{_id : 0, host : "192.168.0.120:21000" },
{_id : 1, host : "192.168.0.121:21000" },
{_id : 2, host : "192.168.0.122:21000" }
]
}
#初始化副本集
rs.initiate(config)
#查看分區狀態
rs.status();
輸出結果如下:
注:rs.initiate(config)初始化,若不成功的話,路由服務器與配置服務器連接不上。其中”_id”:”configs” 應與配置文件中配置的replicaction:replSetName一致,”members”中的”host”爲三個節點的ip和配置port。
shard server 分片服務器集羣配置
配置第一個分片副本集
根據服務器規劃:
192.168.0.120:27001 – 主節點
192.168.0.121:27001 – 副節點
192.168.0.122:27001 – 仲裁節點
192.168.0.120:27001 – 副節點
192.168.0.121:27001 – 仲裁節點
192.168.0.122:27001 – 主節點
192.168.0.120:27001 – 仲裁節點
192.168.0.121:27001 – 主節點
192.168.0.122:27001 – 副節點
三臺服務器上分別添加以下配置文件:
進入配置文件:
vi /application/component/mongodb/conf/shard1.conf #分片配置文件
加入如下文件內容:
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /application/component/mongodb/shard1/logs/shard1.log
# Where and how to store data.
storage:
dbPath: /application/component/mongodb/shard1/data
journal:
enabled: true
# how the process runs
processManagement:
fork: true
pidFilePath: /application/component/mongodb/shard1/logs/shard1.pid
# network interfaces
net:
port: 27001
bindIp: 0.0.0.0
# 副本集名稱
replication:
replSetName: shard1
# 聲明這是一個集羣的分片服務;
sharding:
clusterRole: shardsvr
啓動三臺服務器的shard1 server:
mongod -f /application/component/mongodb/conf/shard1.conf
登錄任意一臺服務器(注意是分片端口),初始化副本集。
mongo --port 27001
執行:
#定義副本集配置
config = {
_id : "shard1",
members : [
{_id : 0, host : "192.168.0.120:27001", priority : 2 },
{_id : 1, host : "192.168.0.121:27001", arbiterOnly :true },
{_id : 2, host : "192.168.0.122:27001", priority : 1 }
]
}
#初始化副本集:
rs.initiate(config)
如下結果:
#查看分區狀態:
rs.status();
其他副本集都按照以上方式進行配置
第二個副本集在第二臺機器上執行,第三個副本集在第三個機器上執行
第二臺機器執行內容如下:
#定義副本集配置
config = {
_id : "shard2",
members : [
{_id : 0, host : "192.168.0.120:27002", priority : 1 },
{_id : 1, host : "192.168.0.121:27002", priority : 2 },
{_id : 2, host : "192.168.0.122:27002", arbiterOnly :true }
]
}
#初始化副本集
rs.initiate(config)
#查看分區狀態
rs.status()
第三臺機器執行內容如下:
#定義副本集配置
config = {
_id : "shard3",
members : [
{_id : 0, host : "192.168.0.120:27003", arbiterOnly :true },
{_id : 1, host : "192.168.0.121:27003", priority : 1 },
{_id : 2, host : "192.168.0.122:27003", priority : 2 }
]
}
#初始化副本集
rs.initiate(config)
#查看分區狀態
rs.status()
mongos server 路由服務器集羣配置
注意啓動mongodb時,需要先啓動配置服務器,再啓動分片服務器,最後啓動路由服務器。
根據服務器規劃,在每臺服務器都配置了mongos:
192.168.0.120: 20000 - mongos
192.168.0.121: 20000 - mongos
192.168.0.122: 20000 – mongos
三臺服務器上分別添加一下配置文件:
進入配置文件:
vi /application/component/mongodb/conf/mongos.conf
加入如下配置文件內容:
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /application/component/mongodb/mongos/logs/mongos.log
# how the process runs
processManagement:
fork: true
# pidFilePath: /var/log/nginx/mongos.pid
# network interfaces
net:
port: 20000
bindIp: 0.0.0.0
#監聽的配置服務器,只能有1個或者3個,configs爲配置服務器的副本集名字,ip:configs配置服務器的端口
sharding:
configDB: configs/192.168.0.120:21000,192.168.0.121:21000,192.168.0.122:21000
啓動三臺服務器的mongo server
mongos -f /application/component/mongodb/conf/mongos.conf
目前已經搭建好配置服務器、數據分片服務器、路由服務器,下面進行分片啓用,是的應用程序連接到路由服務器時可以使用分片機制。
串聯路由服務器與分配副本集
登錄任意一臺mongos
mongo --port 20000
使用admin 數據庫
use admin
串聯路由服務器與分片副本集
#串聯路由服務器與分片副本集
sh.addShard("shard1/192.168.0.120:27001,192.168.0.121:27001,192.168.0.122:27001")
#sh.addShard("shard2/192.168.0.120:27002,192.168.0.121:27002,192.168.0.122:27002")
#sh.addShard("shard3/192.168.0.120:27003,192.168.0.121:27003,192.168.0.122:27003")
執行結果如下:
查看集羣狀態:
sh.status()
注:執行sh.status()命令可能報如下錯誤
解決方案:
給admin用戶賦予集羣管理的權限:
db.grantRolesToUser(“admin”,[“clusterAdmin”])
下一節:分片的使用