文档菜单
文档首页
/
MongoDB 手册
/ / / /

为自管理分片集群旋转密钥

分片集群成员可以使用密钥文件来验证彼此是该部署的成员。

一个 密钥文件可以包含多个密钥,如果成员之间至少有一个密钥是共同的,则建立成员身份验证。这允许在不中断服务的情况下滚动升级密钥。

以下教程逐步介绍了一个过程,该过程可以在不停机的情况下更新分片集群的密钥。[1]

警告

本教程中的示例密钥仅用于说明目的。请勿用于您的部署。相反,使用您选择的方法(例如openssl rand -base64 756等)生成密钥文件。

考虑一个分片集群,其中每个成员的密钥文件包含以下密钥

Image of current key to replace.

以下过程更新分片集群成员以使用新密钥

Image of new key.
[1] 本教程不适用于用于MongoDB本地密钥管理MongoDB加密存储引擎的密钥文件。该密钥文件只能包含一个密钥。

从MongoDB 8.0开始,您可以使用directShardOperations角色执行需要直接针对分片执行命令的维护操作。

警告

使用directShardOperations角色运行命令可能会导致您的集群无法正确工作并可能导致数据损坏。仅在使用维护目的或MongoDB支持的指导下使用directShardOperations角色。一旦完成维护操作,请停止使用directShardOperations角色。

修改每个成员的密钥文件以包含旧密钥和新密钥。

警告

本教程中的示例密钥仅用于说明目的。请不要用于您的部署。相反,使用您选择的任何方法生成密钥文件(例如,openssl rand -base64 756等)。

您可以将多个密钥字符串指定为一系列密钥字符串(可选地用引号括起来)。

Image of multiple key string sequence.

一旦所有密钥文件都包含旧密钥和新密钥,逐个重启每个成员。

对于配置服务器副本集(CSRS)的每个次要副本,连接到成员并mongosh 到成员并

  1. 使用 db.shutdownServer() 方法关闭成员

    use admin
    db.shutdownServer()
  2. 重启成员。

对于主节点,连接到成员的 mongosh

  1. 使用 rs.stepDown() 将成员降级

    rs.stepDown()
  2. 使用 db.shutdownServer() 方法关闭成员

    use admin
    db.shutdownServer()
  3. 重启成员。

对于每个分片副本集的次要成员,连接到成员的 mongosh

  1. 使用 db.shutdownServer() 方法关闭成员

    use admin
    db.shutdownServer()
  2. 重启成员。

对于每个分片副本集的主节点,连接到成员的 mongosh

  1. 使用 rs.stepDown() 将成员降级

    rs.stepDown()
  2. 使用 db.shutdownServer() 方法关闭成员

    use admin
    db.shutdownServer()
  3. 重启成员。

对于每个 mongos/router 实例,连接到 mongoshmongos 实例并

  1. 使用 db.shutdownServer() 方法关闭成员

    use admin
    db.shutdownServer()
  2. 重启成员。

一旦所有成员都已重启,成员现在可以接受旧的或新的密钥进行成员身份验证。

警告

本教程中的示例密钥仅用于说明目的。请不要用于您的部署。相反,使用您选择的任何方法生成密钥文件(例如,openssl rand -base64 756等)。

修改每个成员的密钥文件,仅包含新密码。

Image of new key.

一旦所有密钥文件只包含新密钥,逐个重启每个成员。

对于配置服务器副本集(CSRS)的每个次要成员,连接到 mongosh

  1. 使用 db.shutdownServer() 方法关闭成员

    use admin
    db.shutdownServer()
  2. 重启成员。

对于主节点,连接到成员的 mongosh

  1. 使用 rs.stepDown() 将成员降级

    rs.stepDown()
  2. 使用 db.shutdownServer() 方法关闭成员

    use admin
    db.shutdownServer()
  3. 重启成员。

对于每个分片副本集的次要成员,连接到成员的 mongosh

  1. 使用 db.shutdownServer() 方法关闭成员

    use admin
    db.shutdownServer()
  2. 重启成员。

对于每个分片副本集的主节点,连接到成员的 mongosh

  1. 使用 rs.stepDown() 将成员降级

    rs.stepDown()
  2. 使用 db.shutdownServer() 方法关闭成员

    use admin
    db.shutdownServer()
  3. 重启成员。

对于每个 mongos/router 实例,连接到 mongoshmongos 实例并

  1. 使用 db.shutdownServer() 方法关闭成员

    use admin
    db.shutdownServer()
  2. 重启成员。

所有成员重启后,成员现在只接受新的密钥进行成员身份验证。

返回

旋转副本集密钥