在线开启mongodb分片集群的密码认证

概览

  • 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。

  1. 重新启动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"
  1. 重新启动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服务

  1. 取消transitionToAuth参数,只保留keyFile
security:
   keyFile: /data/service_data/mongos/29017/mongodb.key
  1. 关闭mongos服务

如果有多个mongos实例,依次进行重启

db.getSiblingDB("admin").shutdownServer()
  1. 重启mongos服务
su - mongod -c "/usr/local/mongodb/bin/mongos -f /data/service_data/mongos/29017/conf/mongos_secure.conf"

重启config副本集

重启config副本集,每次重启一个节点,先重启secondary节点,再重启primary节点。

重启secondary节点

  1. 取消transitionToAuth参数,只保留keyFile
security:
   keyFile: /data/service_data/mongos/28017/mongodb.key
  1. 关闭mongos服务

如果有多个mongos实例,依次进行重启

db.getSiblingDB("admin").shutdownServer()
  1. 重启mongos服务
su - mongod -c "/usr/local/mongodb/bin/mongos -f /data/service_data/mongos/28017/conf/mongos_secure.conf"

重启primary节点

  1. 取消transitionToAuth参数,只保留keyFile
security:
   keyFile: /data/service_data/mongos/28017/mongodb.key
  1. 关闭mongodb服务
a. rs.stepDown()
b. db.getSiblingDB("admin").shutdownServer()
  1. 重启mongodb服务
su - mongod -c "/usr/local/mongodb/bin/mongos -f /data/service_data/mongos/28017/conf/mongos_s

重启分片副本集

如果有多个分片副本集,每个副本集的成员都需要进行重启;重启时必须先重启sencondary节点,再重启primary节点

重启secondary节点

  1. 取消transitionToAuth参数,只保留keyFile
security:
   keyFile: /data/service_data/mongos/27020/mongodb.key
  1. 关闭mongodb服务

如果有多个mongos实例,依次进行重启

db.getSiblingDB("admin").shutdownServer()
  1. 重启mongodb服务
su - mongod -c "/usr/local/mongodb/bin/mongos -f /data/service_data/mongos/27020/conf/mongos_secure.conf"

重启primary节点

  1. 取消transitionToAuth参数,只保留keyFile
security:
   keyFile: /data/service_data/mongos/27020/mongodb.key
  1. 关闭mongodb服务
a. rs.stepDown()
b. db.getSiblingDB("admin").shutdownServer()
  1. 重启mongodb服务
su - mongod -c "/usr/local/mongodb/bin/mongos -f /data/service_data/mongos/27020/conf/mongos_s
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值