1、环境介绍:
演示使用3台机器,角色分配:
服务器 | 角色 | 备注 |
---|---|---|
192.168.1.10 | Mongo-route,mongo-config | 路由和配置服务 |
192.168.1.11 | Mongo-shard01a,mongo-shard01b | 分片1 |
192.168.1.12 | Mongo-shard02a,mongo-shard02b | 分片2 |
mongo术语:
config server:
配置服务,存储集群信息,包括chunk信息
route:
路由,是客户端访问的入口,程序读写都是经过路由访问集群
shard:
分片服务,存储实际的数据,实际生产中一个分片角色可以由多个replicaset承担,防止单点故障
其他的后面再补充吧
2、软件下载
有商业版和社区版,这是社区版下载地址,包括服务端和各种客户端,还有其他工具,如备份恢复工具
https://www.mongodb.com/try/download/community-edition
本次演示使用的是6.x版本
mongosh-linux客户端工具
https://downloads.mongodb.com/compass/mongodb-mongosh-2.3.4.aarch64.rpm
mongo其他工具合集
https://fastdl.mongodb.org/tools/db/mongodb-database-tools-rhel70-x86_64-100.10.0.rpm
3、分片服务器配置
3.1、分片1服务器
将下载的tar压缩包解压后根据你的实际情况存放,我这里保存在/data目录下
[root@demo-02 mongodb]# pwd
/data/mongodb
[root@demo-02 mongodb]# ls
arbite01 bin conf logs restart.sh shard01a shard01b
[root@demo-02 mongodb]# ls bin
install_compass mongod mongos
[root@demo-02 mongodb]#
除了bin目录外其他目录都需要自己创建,如果目录不存在启动mongo时会失败,分片1服务器有3个配置文件:
[root@demo-02 mongodb]# ls conf/
arbite01.conf shard01a.conf shard01b.conf
[root@demo-02 mongodb]#
# shard01a.conf是主分片
# shard01b.conf是副分片
# arbite01.conf是仲裁节点,不保存实际数据,作用就是防止平票的情况出现
三个配置文件内容分别是:
shard01a.conf
dbpath=/data/mongodb/shard01a
logpath=/data/mongodb/logs/shard01a.log
bind_ip_all=true
shardsvr=true
logappend=true
replSet=shard01
port=27018
oplogSize=10000
fork=true
shard01b.conf
dbpath=/data/mongodb/shard01b
logpath=/data/mongodb/logs/shard01b.log
bind_ip_all=true
shardsvr=true
logappend=true
replSet=shard01
port=27028
oplogSize=10000
fork=true
arbite01.conf
dbpath=/data/mongodb/arbite01
logpath=/data/mongodb/logs/arbite01.log
bind_ip_all=true
shardsvr=true
logappend=true
replSet=shard01
port=27008
oplogSize=10000
fork=true
启动服务
[root@demo-02 mongodb]# /data/mongodb/bin/mongod -f /data/mongodb/conf/shard01a.conf
[root@demo-02 mongodb]# /data/mongodb/bin/mongod -f /data/mongodb/conf/shard01b.conf
[root@demo-02 mongodb]# /data/mongodb/bin/mongod -f /data/mongodb/conf/arbite01.conf
连接分片1服务,这里需要用到mongosh,linux客户端,上面有下载地址
# 连接主分片
[root@demo-02 mongodb]# mongosh --port 27018
初始化分片1
use admin;
rs.initiate({
_id:"shard01",
members:[
# priority表示权重,arbiterOnly表示仲裁节点
{_id:0,host:"192.168.1.11:27018",priority:2},
{_id:1,host:"192.168.1.11:27028",priority:1},
{_id:2,host:"192.168.1.11:27008",arbiterOnly:true}
]
});
3.2、分片2服务器
目录结构和服务器1相同
三个配置文件内容分别是:
shard02a.conf
dbpath=/data/mongodb/shard02a
logpath=/data/mongodb/logs/shard02a.log
bind_ip_all=true
shardsvr=true
logappend=true
replSet=shard01
port=27018
oplogSize=10000
fork=true
shard02b.conf
dbpath=/data/mongodb/shard02b
logpath=/data/mongodb/logs/shard02b.log
bind_ip_all=true
shardsvr=true
logappend=true
replSet=shard01
port=27028
oplogSize=10000
fork=true
arbite02.conf
dbpath=/data/mongodb/arbite02
logpath=/data/mongodb/logs/arbite02.log
bind_ip_all=true
shardsvr=true
logappend=true
replSet=shard01
port=27008
oplogSize=10000
fork=true
启动服务
[root@demo-03 mongodb]# /data/mongodb/bin/mongod -f /data/mongodb/conf/shard02a.conf
[root@demo-03 mongodb]# /data/mongodb/bin/mongod -f /data/mongodb/conf/shard02b.conf
[root@demo-03 mongodb]# /data/mongodb/bin/mongod -f /data/mongodb/conf/arbite02.conf
初始化分片2
# 连接主分片
[root@demo-03 mongodb]# mongosh --port 27018
初始化分片2
use admin;
rs.initiate({
_id:"shard02",
members:[
{_id:0,host:"192.168.1.12:27018",priority:2},
{_id:1,host:"192.168.1.12:27028",priority:1},
{_id:2,host:"192.168.1.12:27008",arbiterOnly:true}
]
});
3.3、配置服务器
配置服务也可以使用1个,但是启动mongo时会有警告,所以本次演示使用3个
目录结构
[root@demo-01 mongodb]# ls
bin conf configsrv01 configsrv02 configsrv03 logs restart.sh
[root@demo-01 mongodb]# ls conf
configsrv01.conf configsrv02.conf configsrv03.conf route.conf
[root@demo-01 mongodb]#
configsrv01.conf内容
dbpath=/data/mongodb/configsrv01
logpath=/data/mongodb/logs/configsrv01.log
bind_ip_all=true
configsvr=true
logappend=true
replSet=configReplSet
port=27019
oplogSize=10000
fork=true
configsrv02.conf内容
dbpath=/data/mongodb/configsrv02
logpath=/data/mongodb/logs/configsrv02.log
bind_ip_all=true
configsvr=true
logappend=true
replSet=configReplSet
port=27029
oplogSize=10000
fork=true
configsrv03.conf内容
dbpath=/data/mongodb/configsrv03
logpath=/data/mongodb/logs/configsrv03.log
bind_ip_all=true
configsvr=true
logappend=true
replSet=configReplSet
port=27039
oplogSize=10000
fork=true
启动服务
[root@demo-01 mongodb]# /data/mongodb/bin/mongod -f /data/mongodb/conf/configsrv01.conf
[root@demo-01 mongodb]# /data/mongodb/bin/mongod -f /data/mongodb/conf/configsrv02.conf
[root@demo-01 mongodb]# /data/mongodb/bin/mongod -f /data/mongodb/conf/configsrv03.conf
连接config服务
[root@demo-01 mongodb]# mongosh --port 27019
初始化config
use admin;
rs.initiate({
_id:"configReplSet",
members:[
{_id:0,host:"192.168.1.10:27019", priority:2},
{_id:1,host:"192.168.1.10:27029", priority:1},
{_id:2,host:"192.168.1.10:27039", priority:1}
]
});
3.4、路由服务器
因为是和配置服务在同一台,所以目录结构和配置服务相同
[root@demo-01 mongodb]# ls
bin conf configsrv01 configsrv02 configsrv03 logs restart.sh
[root@demo-01 mongodb]# ls conf
configsrv01.conf configsrv02.conf configsrv03.conf route.conf
[root@demo-01 mongodb]#
route.conf内容
configdb=configReplSet/192.168.1.10:27019,192.168.1.10:27029,192.168.1.10:27039
logpath=/data/mongodb/logs/router.log
bind_ip_all=true
port=27017
fork=true
启动路由服务,启动路由使用的是mongos,而不是mongod
[root@demo-01 mongodb]# /data/mongodb/bin/mongos -f /data/mongodb/conf/route.conf
连接路由
[root@demo-01 mongodb]# mongosh --port 27017
初始化路由
use admin;
# 设置分片数量,不包含仲裁节点
db.adminCommand({
"setDefaultRWConcern" : 1,
"defaultWriteConcern" : {
"w" : 2
}
});
# 添加分片信息
sh.addShard("shard01/192.168.1.11:27018,192.168.1.11:27028")
sh.addShard("shard02/192.168.1.12:27018,192.168.1.12:27028")
# 开启shard,开启分片命令必须在admin库下执行
use admin;
db.runCommand({ enablesharding: 'test'})
# 执行完可以查看集群的状态
sh.status();
到此集群配置完成
4、mongo常用命令
4.1添加用户
分片集群
use admin
db.createUser({
user: "admin",
pwd: "Aa123456",
roles: [{ role: "root", db: "admin" }],
writeConcern: { w: "majority" }
})
非分片集群
use admin
db.createUser({
user: "admin",
pwd: "Aa123456",
roles: [{ role: "root", db: "admin" }]
})
4.2、对库,表操作
# 删除库
use test
db.dropDatabase()
# 删除表
use users
db.users.drop()
# 清空表
db.test.deleteMany({})
4.3、倒入数据
类似mysql的source
use test
load("/data/script/test.js")