系统&软件 | 版本 |
---|---|
VMware Workstation | 15 Pro |
CentOS | 7.6.1810 |
MongoDB | 4.4.4 |
准备:将 mongodb-linux-x86_64-rhel70-4.4.4.tgz
导入 /home
并完成解压
tar -zxvf mongodb-linux-x86_64-rhel70-4.4.4.tgz
mv mongodb-linux-x86_64-rhel70-4.4.4 mongodb
出现这个问题的原因可能是因为 27019
这个节点的配置文件中 replSet
属性的值与集群 _id
的值不同所导致的。
执行如下命令即可
rs.secondaryOk()
出现用户可以在路由服务器登录并成功校验身份后可对数据库进行添加、删除、查询数据等操作,但是用 Spring Boot
代码连接就报错的现象。很有可能是因为你在创建当前普通用户时没有执行切换数据库命令(use 数据库名
)。所以处理这个问题的方式可以是用管理员身份登录,将原先用户删除,然后切换数据库再重新创建用户即可。
配置节点集群:用以存储 MongoDB
路由集群配置信息
# 配置节点数据存放路径
mkdir -p /data/mongo/config1
mkdir /data/mongo/config2
mkdir /data/mongo/config3
在 /home/mongodb/bin
路径下创建第一个配置节点的配置文件:config-17017.cfg
# 数据库文件位置
dbpath=/data/mongo/config1
#日志文件位置
logpath=/data/mongo/config1/config.log
# 以追加方式写入日志
logappend=true
# 是否以守护进程方式运行
fork = true
bind_ip=0.0.0.0
port = 17017
# 表示是一个配置服务器
configsvr=true
#配置服务器副本集名称
replSet=configsvr
启动第一个配置节点
./mongod -f mongo_17017.cfg
在 /home/mongodb/bin
路径下创建第二个配置节点的配置文件:config-17018.cfg
# 数据库文件位置
dbpath=/data/mongo/config2
#日志文件位置
logpath=/data/mongo/config2/config.log
# 以追加方式写入日志
logappend=true
# 是否以守护进程方式运行
fork = true
bind_ip=0.0.0.0
port = 17018
# 表示是一个配置服务器
configsvr=true
#配置服务器副本集名称
replSet=configsvr
启动第二个配置节点
./mongod -f mongo_17018.cfg
在 /home/mongodb/bin
路径下创建第三个配置节点的配置文件:config-17019.cfg
# 数据库文件位置
dbpath=/data/mongo/config3
# 日志文件位置
logpath=/data/mongo/config3/config.log
# 以追加方式写入日志
logappend=true
# 是否以守护进程方式运行
fork = true
bind_ip=0.0.0.0
port = 17019
# 表示是一个配置服务器
configsvr=true
# 配置服务器副本集名称
replSet=configsvr
启动第三个配置节点
./mongod -f mongo_17019.cfg
进入任意 MongoDB
节点, 并创建配置节点集群。
# 连接 17017 节点
./mongo --port 17017
# 切换至 admin 数据库
use admin
# 创建集群配置信息
var cfg ={"_id":"configsvr",
"members":[
{"_id":1,"host":"192.168.32.102:17017"},
{"_id":2,"host":"192.168.32.102:17018"},
{"_id":3,"host":"192.168.32.102:17019"}]
};
# 初始化集群配置
rs.initiate(cfg)
# 分片节点数据存放路径
mkdir -p /data/mongo/server1
mkdir /data/mongo/server2
mkdir /data/mongo/server3
mkdir /data/mongo/server4
在 /home/mongodb/bin
路径下创建第一个节点的配置文件:mongo_27016.cfg
# 数据库文件位置
dbpath=/data/mongo/server1
# 端口号
port=27016
# 可以连接本机的IP
bind_ip=0.0.0.0
# 后台运行
fork=true
# 日志文件地址
logpath=/data/mongo/server1/MongoDB_27016.log
logappend=true
# 配置服务器副本集名称
replSet=MyCluster1
# 表示是一个分片服务器
shardsvr=true
启动第一个节点
./mongod -f mongo_27016.cfg
在 /home/mongodb/bin
路径下创建第二个节点的配置文件:mongo_27017.cfg
# 数据库文件位置
dbpath=/data/mongo/server2
# 端口号
port=27017
# 可以连接本机的IP
bind_ip=0.0.0.0
# 后台运行
fork=true
# 日志文件地址
logpath=/data/mongo/server2/MongoDB_27017.log
logappend=true
# 配置服务器副本集名称
replSet=MyCluster1
# 表示是一个分片服务器
shardsvr=true
启动第二个节点
./mongod -f mongo_27017.cfg
在 /home/mongodb/bin
路径下创建第三个节点的配置文件:mongo_27018.cfg
# 数据库文件位置
dbpath=/data/mongo/server3
# 端口号
port=27018
# 可以连接本机的IP
bind_ip=0.0.0.0
# 后台运行
fork=true
# 日志文件地址
logpath=/data/mongo/server3/MongoDB_27018.log
logappend=true
# 配置服务器副本集名称
replSet=MyCluster1
# 表示是一个分片服务器
shardsvr=true
启动第三个节点
./mongod -f mongo_27018.cfg
在 /home/mongodb/bin
路径下创建第四个节点的配置文件:mongo_27019.cfg
# 数据库文件位置
dbpath=/data/mongo/server4
# 端口号
port=27019
# 可以连接本机的IP
bind_ip=0.0.0.0
# 后台运行
fork=true
# 日志文件地址
logpath=/data/mongo/server4/MongoDB_27019.log
logappend=true
# 配置服务器副本集名称
replSet=MyCluster1
# 表示是一个分片服务器
shardsvr=true
启动第四个节点
./mongod -f mongo_27019.cfg
进入任意 MongoDB
节点, 并创建配置节点集群。
# 连接 27017 节点
./mongo --port 27017
# 创建集群配置信息 (arbiterOnly 属性表示该节点为:仲裁节点)
var cfg ={"_id":"MyCluster1",
"protocolVersion" : 1,
"members":[
{"_id":1,"host":"192.168.32.102:27017"},
{"_id":2,"host":"192.168.32.102:27018"},
{"_id":3,"host":"192.168.32.102:27019"},
{"_id":4,"host":"192.168.32.102:27016","arbiterOnly":true}
]
}
# 初始化集群配置
rs.initiate(cfg)
其他分片集群节点与第一个分片集群节点的创建方式相同,只需要修改 MongoDB
的端口和数据文件、日志文件、集群副本名称即可。这里将进行省略。
Tips:
1、数据库文件和日志文件存放路径必须手动创建否则 MongoDB
将启动失败。
2、编写集群的配置时一定要注意变量 cfg
的 _id
属性的值与服务器配置文件中 replSet
属性值的一致性。
# 路由节点数据存放路径
mkdir -p /data/mongo/router1
mkdir /data/mongo/router2
mkdir /data/mongo/router3
在 /home/mongodb/bin
路径下创建路由节点的配置文件:mongo_20000.cfg
# 端口
port=20000
bind_ip=0.0.0.0
# 后台运行
fork=true
# 日志存放路径
logpath=/data/mongo/router/MongoDB_20000.log
logappend=true
# 路由配置存放路径
configdb=configsvr/192.168.32.102:17017,192.168.32.102:17018,192.168.32.102:17019
启动路由节点使用 mongos
(注意不是 mongod
)
./bin/mongos -f mongo_20000.cfg
# 进入 MongoDB 路由节点
./mongo --port 20000
# 添加数据分片节点
sh.addShard("MyCluster1/192.168.32.102:27017,192.168.32.102:27018,192.168.32.102:27019");
sh.addShard("MyCluster2/192.168.32.102:37017,192.168.32.102:37018,192.168.32.102:37019");
sh.addShard("MyCluster3/192.168.32.102:47017,192.168.32.102:47018,192.168.32.102:47019");
sh.addShard("MyCluster4/192.168.32.102:57017,192.168.32.102:57018,192.168.32.102:57019");
# 查看分片配置状态
sh.status()
继续使用 mongos
完成分片开启和分片大小设置
# 为指定数据库开启分片功能
sh.enableSharding("supreme")
# 为指定集合开启分片功能
sh.shardCollection("supreme.sir",{"name": "hashed"})
use supreme;
for(var i=1;i<= 1000;i++){
db.sir.insert({"name":"test"+i,
salary:(Math.random()*20000).toFixed(2)});
}
角色 | 描述 |
---|---|
read | 允许用户读取指定数据库 |
readWrite | 允许用户读写指定数据库 |
dbAdmin | 允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile |
userAdmin | 允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户 |
dbOwner | 库拥有者权限,即readWrite、dbAdmin、userAdmin角色的合体 |
clusterAdmin | 只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限 |
readAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读权限 |
readWriteAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读写权限 |
userAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的userAdmin权限 |
dbAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限 |
root | 只在admin数据库中可用,超级账号,超级权限 |
用户类型 | 角色 |
---|---|
数据库用户角色 | read、readWrite |
数据库管理角色 | dbAdmin、dbOwner、userAdmin |
集群管理角色 | clusterAdmin、clusterManager、clusterMonitor、hostManager |
备份恢复角色 | backup、restore |
所有数据库角色 | readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase |
超级用户角色 | root |
间接或直接提供系统超级用户的访问 | dbOwner 、userAdmin、userAdminAnyDatabase |
# 登录路由节点
./mongo --port 20000
# 创建用户 user: 用户名 pwd:密码 roles:角色(可配置多个) role:对指定数据库角色权限 db:数据库名
# 创建超级管理员用户
use admin
db.createUser({
user: "root",
pwd: "root",
roles: [{role: "root", db: "admin"}]
})
# 创建普通用户(注意:一定要切换数据库)
use supreme
db.createUser({
user: "sir",
pwd: "supreme",
roles: [{role: "readWrite", db: "supreme"}]
})
# 退出
exit
# 关闭所有 MongoDB 实例
# 安装psmisc
yum install psmisc
# 安装完之后可以使用killall 命令 快速关闭多个进程
killall mongod
killall mongos
# 检查 MongoDB 进程(如果有进程没有马上结束那就就等一会,禁止使用 kill -9)
ps -aux|grep monog
kill 进程PID
# 生成秘钥文件 (当前目录为 /home/mongodb/bin)
openssl rand -base64 756 > keyFile.file
# 修改秘钥文件权限
chmod 600 keyFile.file
# 为配置节点集群和分片节点集群开启安全认证和指定密钥文件 17017、17018、17019、27016、27017……
vim mongo_17017.cfg
添加如下内容:
auth=true
keyFile=keyFile.file
最后再重新挨个启动 MongoDB
就可以了
/home/mongodb/bin/mongod -f /home/mongodb/bin/mongo_17017.cfg
/home/mongodb/bin/mongod -f /home/mongodb/bin/mongo_17018.cfg
/home/mongodb/bin/mongod -f /home/mongodb/bin/mongo_17019.cfg
/home/mongodb/bin/mongod -f /home/mongodb/bin/mongo_27016.cfg
/home/mongodb/bin/mongod -f /home/mongodb/bin/mongo_27017.cfg
/home/mongodb/bin/mongod -f /home/mongodb/bin/mongo_27018.cfg
/home/mongodb/bin/mongod -f /home/mongodb/bin/mongo_27019.cfg
/home/mongodb/bin/mongod -f /home/mongodb/bin/mongo_37016.cfg
/home/mongodb/bin/mongod -f /home/mongodb/bin/mongo_37017.cfg
/home/mongodb/bin/mongod -f /home/mongodb/bin/mongo_37018.cfg
/home/mongodb/bin/mongod -f /home/mongodb/bin/mongo_37019.cfg
/home/mongodb/bin/mongod -f /home/mongodb/bin/mongo_47016.cfg
/home/mongodb/bin/mongod -f /home/mongodb/bin/mongo_47017.cfg
/home/mongodb/bin/mongod -f /home/mongodb/bin/mongo_47018.cfg
/home/mongodb/bin/mongod -f /home/mongodb/bin/mongo_47019.cfg
/home/mongodb/bin/mongod -f /home/mongodb/bin/mongo_57016.cfg
/home/mongodb/bin/mongod -f /home/mongodb/bin/mongo_57017.cfg
/home/mongodb/bin/mongod -f /home/mongodb/bin/mongo_57018.cfg
/home/mongodb/bin/mongod -f /home/mongodb/bin/mongo_57019.cfg
/home/mongodb/bin/mongos -f /home/mongodb/bin/mongo_20000.cfg
源码下载(免费)
---------------------------------------- 真正能让你走远的是自律、积极和勤奋。----------------------------------------