Mongodb分片集群安装部署
1.1 集群架构图
2 搭建分片集群
2.1 服务器角色规划
| 操作系统 | mongo版本 | 主机ip | 角色(端口) |
|---|---|---|---|
| CentOS Linux release 7.5.1804 (Core) | mongodb4.2.8 | 192.168.1.71 | shard1(27017) shard2(27018) shard3(27019) config(28018) mongos(27016) |
| CentOS Linux release 7.5.1804 (Core) | mongodb4.2.8 | 192.168.1.72 | shard1(27017) shard2(27018) shard3(27019) config(28018) mongos(27016) |
| CentOS Linux release 7.5.1804 (Core) | mongodb4.2.8 | 192.168.1.73 | shard1(27017) shard2(27018) shard3(27019) config(28018) mongos(27016) |
2.2 搭建mongodb分片复制集
2.2.1 下载mongo包
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.8.tgz
tar -zxvf mongodb-linux-x86_64-rhel70-4.2.8.tgz -C /data/server/
mv /data/server/mongodb-linux-x86_64-rhel70-4.2.8/ /data/server/mongodb
2.2.2创建相关目录
mkdir -p /data/server/mongodb/mongos/log && mkdir -p /data/server/mongodb/config/data && mkdir -p /data/server/mongodb/config/log && mkdir -p /data/server/mongodb/shard1/data && mkdir -p /data/server/mongodb/shard1/log && mkdir -p /data/server/mongodb/shard2/data && mkdir -p /data/server/mongodb/shard2/log && mkdir -p /data/server/mongodb/shard3/data && mkdir -p /data/server/mongodb/shard3/log
2.2.3 环境变量
vim /etc/profile
export MONGODB_HOME=/data/server/mongodb/
export PATH=$MONGODB_HOME/bin:$PATH
source /etc/profile
2.2.4 搭建config节点复制集
1.修改对应的配置文件
cd /data/server/mongodb/
node1:
vim mongo-cfg.conf
systemLog:
destination: file
path: /data/server/mongodb/config/log/mongodb.log
logAppend: true
storage:
journal:
enabled: true
dbPath: /data/server/mongodb/config/data
directoryPerDB: true
wiredTiger:
engineConfig:
cacheSizeGB: 1
directoryForIndexes: true
collectionConfig:
blockCompressor: zlib
indexConfig:
prefixCompression: true
net:
bindIp: 192.168.1.71
port: 28018
replication:
oplogSizeMB: 2048
replSetName: configReplSet
sharding:
clusterRole: configsvr
processManagement:
fork: true
node2:
vim mongo-cfg.conf
systemLog:
destination: file
path: /data/server/mongodb/config/log/mongodb.log
logAppend: true
storage:
journal:
enabled: true
dbPath: /data/server/mongodb/config/data
directoryPerDB: true
wiredTiger:
engineConfig:
cacheSizeGB: 1
directoryForIndexes: true
collectionConfig:
blockCompressor: zlib
indexConfig:
prefixCompression: true
net:
bindIp: 192.168.1.72
port: 28018
replication:
oplogSizeMB: 2048
replSetName: configReplSet
sharding:
clusterRole: configsvr
processManagement:
fork: true
node3:
vim mongo-cfg.conf
systemLog:
destination: file
path: /data/server/mongodb/config/log/mongodb.log
logAppend: true
storage:
journal:
enabled: true
dbPath: /data/server/mongodb/config/data
directoryPerDB: true
wiredTiger:
engineConfig:
cacheSizeGB: 1
directoryForIndexes: true
collectionConfig:
blockCompressor: zlib
indexConfig:
prefixCompression: true
net:
bindIp: 192.168.1.73
port: 28018
replication:
oplogSizeMB: 2048
replSetName: configReplSet
sharding:
clusterRole: configsvr
processManagement:
fork: true
2.启动配置复制集:
/data/server/mongodb/bin/mongod -f /data/server/mongodb/mongo-cfg.conf
3.登录配置节点
/data/server/mongodb/bin/mongo -host 192.168.1.71 -port 28018 admin
4.初始化命令:
rs.initiate(
{
"_id" : "configReplSet",
"members" : [
{"_id" : 0, "host" : "192.168.1.71:28018"},
{"_id" : 1, "host" : "192.168.1.72:28018"},
{"_id" : 2, "host" : "192.168.1.73:28018"}
]
}
)
2.2.5 shard集群配置
[root@DEV-CLOUD1 mongodb]# cat mongod1.conf
systemLog:
destination: file
path: "/data/server/mongodb/shard1/log/mongo.log"
logAppend: true
storage:
journal:
enabled: true
dbPath: "/data/server/mongodb/shard1/data"
processManagement:
fork: true
net:
bindIp: 0.0.0.0
port: 27017
setParameter:
enableLocalhostAuthBypass: false
replication:
replSetName: "shard1_repl"
sharding:
clusterRole: shardsvr
[root@DEV-CLOUD1 mongodb]# cat mongod2.conf
systemLog:
destination: file
path: "/data/server/mongodb/shard2/log/mongo.log"
logAppend: true
storage:
journal:
enabled: true
dbPath: "/data/server/mongodb/shard2/data"
processManagement:
fork: true
net:
bindIp: 0.0.0.0
port: 27018
setParameter:
enableLocalhostAuthBypass: false
replication:
replSetName: "shard2_repl"
sharding:
clusterRole: shardsvr
[root@DEV-CLOUD1 mongodb]# cat mongod3.conf
systemLog:
destination: file
path: "/data/server/mongodb/shard3/log/mongo.log"
logAppend: true
storage:
journal:
enabled: true
dbPath: "/data/server/mongodb/shard3/data"
processManagement:
fork: true
net:
bindIp: 0.0.0.0
port: 27019
setParameter:
enableLocalhostAuthBypass: false
replication:
replSetName: "shard3_repl"
sharding:
clusterRole: shardsvr
[root@DEV-CLOUD1 mongodb]# scp mongod* 192.168.1.72:/data/server/mongodb/
[root@DEV-CLOUD1 mongodb]# scp mongod* 192.168.1.73:/data/server/mongodb/
启动副本集(每台启动)
[root@DEV-CLOUD1 mongodb]# /data/server/mongodb/bin/mongod -f /data/server/mongodb/mongod1.conf
[root@DEV-CLOUD1 mongodb]# /data/server/mongodb/bin/mongod -f /data/server/mongodb/mongod2.conf
[root@DEV-CLOUD1 mongodb]# /data/server/mongodb/bin/mongod -f /data/server/mongodb/mongod3.conf
初始化集群:
shard1:
[root@DEV-CLOUD1 mongodb]# /data/server/mongodb/bin/mongo -port 27017 admin
config = {_id: 'shard1_repl', members: [
{_id: 0, host: "192.168.1.71:27017",priority:2},
{_id: 1, host: "192.168.1.72:27017",priority:1},
{_id: 2, host: "192.168.1.73:27017"}]
}
rs.initiate(config)
查看
rs.status();
shard2:
[root@DEV-CLOUD1 mongodb]# /data/server/mongodb/bin/mongo -port 27018 admin
config = {_id: 'shard2_repl', members: [
{_id: 0, host: "192.168.1.71:27018",priority:1},
{_id: 1, host: "192.168.1.72:27018"},
{_id: 2, host: "192.168.1.73:27018",priority:2}]
}
rs.initiate(config)
shard3:
[root@DEV-CLOUD1 mongodb]# /data/server/mongodb/bin/mongo -port 27019 admin
config = {_id: 'shard3_repl', members: [
{_id: 0, host: "192.168.1.71:27019"},
{_id: 1, host: "192.168.1.72:27019",priority:2},
{_id: 2, host: "192.168.1.73:27019",priority:1}]
}
rs.initiate(config)
2.2.6 mongos节点配置
[root@DEV-CLOUD1 mongodb]# cat mongos.conf
systemLog:
destination: file
path: /data/server/mongodb/mongos/log/mongos.log
logAppend: true
net:
bindIp: 192.168.1.71
port: 27016
sharding:
configDB: configReplSet/192.168.1.71:28018,192.168.1.72:28018,192.168.1.73:28018
processManagement:
fork: true
启动mongos
/data/server/mongodb/bin/mongos -f /data/server/mongodb/mongos.conf
[root@DEV-CLOUD2 mongodb]# cat mongos.conf
systemLog:
destination: file
path: /data/server/mongodb/mongos/log/mongos.log
logAppend: true
net:
bindIp: 192.168.1.72
port: 27016
sharding:
configDB: configReplSet/192.168.1.71:28018,192.168.1.72:28018,192.168.1.73:28018
processManagement:
fork: true
启动mongos
/data/server/mongodb/bin/mongos -f /data/server/mongodb/mongos.conf
[root@DEV-CLOUD3 mongodb]# cat mongos.conf
systemLog:
destination: file
path: /data/server/mongodb/mongos/log/mongos.log
logAppend: true
net:
bindIp: 192.168.1.73
port: 27016
sharding:
configDB: configReplSet/192.168.1.71:28018,192.168.1.72:28018,192.168.1.73:28018
processManagement:
fork: true
启动mongos
/data/server/mongodb/bin/mongos -f /data/server/mongodb/mongos.conf
2.2.7 添加集群中的分片节点
[root@DEV-CLOUD1 mongodb]# /data/server/mongodb/bin/mongo -host 192.168.1.71 -port 27016
mongos> use admin
mongos> db.runCommand( { addshard : "shard1_repl/192.168.1.71:27017,192.168.1.72:27017,192.168.1.73:27017",name:"shard1"} )
mongos> db.runCommand( { addshard : "shard2_repl/192.168.1.71:27018,192.168.1.72:27018,192.168.1.73:27018",name:"shard2"} )
mongos> db.runCommand( { addshard : "shard3_repl/192.168.1.71:27019,192.168.1.72:27019,192.168.1.73:27019",name:"shard3"} )
查看分片状态
mongos> sh.status();
集群开启认证:
在192.168.1.71:
(1)
openssl rand -base64 756 > /data/server/mongodb/keyfile.file
chmod 400 /data/server/mongodb/keyfile.file
scp /data/server/mongodb/keyfile.file 192.168.1.72: /data/server/mongodb/
scp /data/server/mongodb/keyfile.file 192.168.1.73: /data/server/mongodb/
(2)
/data/server/mongodb/bin/mongo -host 192.168.1.71 -port 27016
use admin
db.createUser(
{
user:"root",
pwd:"1q2w3e4r",
roles:[{role:"root",db:"admin"}]
}
)
在mongo-cfg.conf 、mongod1.conf、mongod2.conf、mongod3.conf增加:
security:
keyFile: /data/server/mongodb/keyfile.file
authorization: enabled
在mongos.conf增加:
security:
keyFile: /data/server/mongodb/keyfile.file
(3)重启集群
(4)测试:
/data/server/mongodb/bin/mongo -host 192.168.1.71 -port 27016
mongos> use admin
switched to db admin
mongos> db.auth("root","1q2w3e4r")
(5)添加只读账户:
/data/server/mongodb/bin/mongo -host 192.168.1.71 -port 27016
mongos> use admin
switched to db admin
mongos> db.auth("root","1q2w3e4r")
db.createUser(
{
user:"starbucks_read",
pwd:"e2lcadhESUj",
roles:[{role:"readAnyDatabase",db:"admin"}]
}
)
3 测试分片集群
3.1 激活数据库分片功能
mongos> use admin
mongos> db.runCommand( { enablesharding : "testdb" } )
3.2 创建索引
use testdb
db.users.ensureIndex( { id: 1 } )
3.3 创建分片的键(id)
db.runCommand( { shardcollection : "testdb.users",key : {id: 1} } )
3.4 集合分片验证
创建测试数据,用来测试分片功能,下面的代码向数据库中插入了200w条数据,由于数据量比较大,所以批量插入的时候,时间会稍微有点久.
var arr=[]; for(var i=0;i<2000000;i++){ var uid = i; var name = "mongodb"+i; arr.push({"id":uid,"name":name}); } db.users.insertMany(arr);
mongos> sh.status()
4 balance操作
4.1 balance基础操作
查看mongo集群是否开启了 balance 状态
mongos> sh.getBalancerState()
如果balance开启,查看是否正在有数据的迁移
mongos> sh.isBalancerRunning()
4.2 设置balance窗口
切换到配置节点 mongos> use config
mongos> sh.setBalancerState( true )
确定balance 是否开启
mongos> sh.getBalancerState()
4.3 关闭balance
停止balance
mongos> sh.stopBalancer()
4.4 打开或关闭某个集群的balance
关闭某个集合的balance
mongos> sh.disableBalancing("testdb.table1")
打开某个集合的balance
mongos> sh.enableBalancing("testdb.table1")
5 安装 mongodb-mms
5.1 在一台新机器上单独安装一个mongodb
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.8.tgz
tar -zxvf mongodb-linux-x86_64-rhel70-4.2.8.tgz -C /data/server/
mv /data/server/mongodb-linux-x86_64-rhel70-4.2.8/ /data/server/mongodb
cd /data/server/mongodb
mkdir data log
[root@cloud mongodb]# cat mongod.conf
systemLog:
destination: file
path: "/data/server/mongodb/log/mongo.log"
logAppend: true
storage:
journal:
enabled: true
dbPath: "/data/server/mongodb/data"
processManagement:
fork: true
timeZoneInfo: /usr/share/zoneinfo
net:
bindIp: 0.0.0.0
port: 27017
[root@cloud mongodb]# /data/server/mongodb/bin/mongod -f mongod.conf
5.2 安装mongodb-mms
wget https://downloads.mongodb.com/on-prem-mms/tar/mongodb-mms-4.2.15.56937.20200701T0316Z-1.x86_64.tar.gz
tar -zxvf mongodb-mms-4.2.15.56937.20200701T0316Z-1.x86_64.tar.gz -C /data/server/
mv /data/server/mongodb-mms-4.2.15.56937.20200701T0316Z-1.x86_64/ /data/server/mongodb-mms
cd /data/server/mongodb-mms
./bin/mongodb-mms start
5.3网页配置


