文章目录
- 概览
- 创建keyfile密钥文件
- 配置分片集群管理账号和客户端账号
- 1. 创建管理账号
- 2. 创建应用程序使用的账号
- 3. 客户端程序的配置文件进行更改,使用用户密码的连接方式。
- 更改mongos实例配置,使用密码身份认证
- 1. 创建新的mongos配置文件
- 2. 重启mongos服务(使用新的配置文件)
- 配置config server副本集进行密码认证
- 1. 创建新的配置文件
- 重启config server(使用新的配置文件)
- 配置分片副本集
- 创建分片本地管理账号
- 强制身份认证配置过程
- 1、创建新的配置文件
- 2、重启分片副本集(使用新的配置文件)
- 重启mongos服务
- 重启config副本集
- 重启secondary节点
- 重启primary节点
- 重启分片副本集
- 重启secondary节点
- 重启primary节点
概览
- mongodb版本3.4以上
- 不停服务
创建keyfile密钥文件
openssl rand -base64 512 > mongodb.key
chmod 400 mongodb.key
配置分片集群管理账号和客户端账号
1. 创建管理账号
db.createUser(
{
user: "admin",
pwd: passwordPrompt(),
roles: [
{ role: "clusterAdmin", db: "admin" },
{ role: "userAdmin", db: "admin" }
]
}
)
2. 创建应用程序使用的账号
db.getSiblingDB("marketing").createUser(
{
"user": "joe",
"pwd": passwordPrompt(),
"roles": [ { "role" : "readWrite", "db" : "marketing" } ]
}
)
3. 客户端程序的配置文件进行更改,使用用户密码的连接方式。
更改mongos实例配置,使用密码身份认证
1. 创建新的mongos配置文件
cd /data/service_data/mongos/29017/conf
cp mongos.conf mongos_secure.conf
vim mongos_secure.conf
security:
transitionToAuth: true
keyFile: /data/service_data/mongos/29017/mongodb.key
2. 重启mongos服务(使用新的配置文件)
/usr/local/mongodb/bin/mongo --host 127.0.0.1 --port 29017
>db.getSiblingDB("admin").shutdownServer()
重启mongs
配置config server副本集进行密码认证
1. 创建新的配置文件
cd /data/service_data/mongodb/28017/conf
cp mongod.conf mongod_secure.conf
# 配置文件中增加新的内容
vim mongod_secure.conf
security:
transitionToAuth: true
keyFile: /data/service_data/mongodb/28017/mongodb.key
重启config server(使用新的配置文件)
一次重启一个config server,先启动secondary。
- 重新启动secondary members
1) 使用mongo shell登陆mongod
2) shutdown
db.getSiblingDB("admin").shutdownServer()
3) 重启mongd
su - mongod -c "/usr/local/mongodb/bin/mongod -f /data/service_data/mongodb/28017/conf/mongod_secure.conf"
- 重新启动primary member
所有的secondary 节点重新启动完成后,最后需要重新启动primary
1) 连接mongod primary
2) rs.stepDown()
3) shutdown
db.getSiblingDB("admin").shutdownServer()
4) 重新启动
su - mongod -c "/usr/local/mongodb/bin/mongod -f /data/service_data/mongodb/28017/conf/mongod_secure.conf"
配置分片副本集
创建分片本地管理账号
# 使用mongo shell连接每个分片副本集的primary节点,创建管理账号
admin = db.getSiblingDB("admin")
admin.createUser(
{
user: "admin",
pwd: passwordPrompt(), // or cleartext password
roles: [
{ role: "clusterAdmin", db: "admin" },
{ role: "userAdmin", db: "admin" }
]
}
)
注意:
- passwordPrompt()只支持mongodb4.2以上版本
- 分片本地管理账号用户维护分片副本集
强制身份认证配置过程
1、创建新的配置文件
每个分片副本集的所有节点都需要创建新的配置文件
cd /data/service_data/mongodb/27020/conf
cp mongod.conf mongod_secure.conf
# 配置文件中增加新的内容
vim mongod_secure.conf
security:
transitionToAuth: true
keyFile: /data/service_data/mongodb/27020/mongodb.key
2、重启分片副本集(使用新的配置文件)
重启分片副本集,每次重启一个节点,先重启secondary节点,再重启primary节点。
1)重启secondary节点
a. 使用mongo shell连接mongodb
b. db.getSiblingDB("admin").shutdownServer()
c. 重新启动
su - mongod -c "/usr/local/mongodb/bin/mongod -f /data/service_data/mongodb/27020/conf/mongod_secure.conf"
2)重启primary节点
当确保secondary节点重启完毕后,重启primary节点。
a. 连接mongod primary
b. rs.stepDown()
c. shutdown
db.getSiblingDB("admin").shutdownServer()
d. 重新启动
su - mongod -c "/usr/local/mongodb/bin/mongod -f /data/service_data/mongodb/27020/conf/mongod_secure.conf"
至此,分片集群中的所有节点都使用参数transitionToAuth:true 和 security.keyFile运行。
此阶段为过渡阶段,客户端即可以使用账号密码连接也可以不使用账号密码连接。
下面的步骤将会进行从过渡阶段到真正的密码认证登陆阶段。
此过程需要取消参数transitionToAuth:true,并进行重启。
重启mongos服务
- 取消transitionToAuth参数,只保留keyFile
security:
keyFile: /data/service_data/mongos/29017/mongodb.key
- 关闭mongos服务
如果有多个mongos实例,依次进行重启
db.getSiblingDB("admin").shutdownServer()
- 重启mongos服务
su - mongod -c "/usr/local/mongodb/bin/mongos -f /data/service_data/mongos/29017/conf/mongos_secure.conf"
重启config副本集
重启config副本集,每次重启一个节点,先重启secondary节点,再重启primary节点。
重启secondary节点
- 取消transitionToAuth参数,只保留keyFile
security:
keyFile: /data/service_data/mongos/28017/mongodb.key
- 关闭mongos服务
如果有多个mongos实例,依次进行重启
db.getSiblingDB("admin").shutdownServer()
- 重启mongos服务
su - mongod -c "/usr/local/mongodb/bin/mongos -f /data/service_data/mongos/28017/conf/mongos_secure.conf"
重启primary节点
- 取消transitionToAuth参数,只保留keyFile
security:
keyFile: /data/service_data/mongos/28017/mongodb.key
- 关闭mongodb服务
a. rs.stepDown()
b. db.getSiblingDB("admin").shutdownServer()
- 重启mongodb服务
su - mongod -c "/usr/local/mongodb/bin/mongos -f /data/service_data/mongos/28017/conf/mongos_s
重启分片副本集
如果有多个分片副本集,每个副本集的成员都需要进行重启;重启时必须先重启sencondary节点,再重启primary节点
重启secondary节点
- 取消transitionToAuth参数,只保留keyFile
security:
keyFile: /data/service_data/mongos/27020/mongodb.key
- 关闭mongodb服务
如果有多个mongos实例,依次进行重启
db.getSiblingDB("admin").shutdownServer()
- 重启mongodb服务
su - mongod -c "/usr/local/mongodb/bin/mongos -f /data/service_data/mongos/27020/conf/mongos_secure.conf"
重启primary节点
- 取消transitionToAuth参数,只保留keyFile
security:
keyFile: /data/service_data/mongos/27020/mongodb.key
- 关闭mongodb服务
a. rs.stepDown()
b. db.getSiblingDB("admin").shutdownServer()
- 重启mongodb服务
su - mongod -c "/usr/local/mongodb/bin/mongos -f /data/service_data/mongos/27020/conf/mongos_s