轮换自管理副本集的密钥
副本设立成员可以使用密钥文件作为同一部署的成员相互进行身份验证。
密钥文件可以包含多个密钥,如果至少一个密钥在成员之间通用,则成员身份验证建立。 这样就可以在不停机的情况下滚动升级密钥。
以下教程将分步介绍在不停机的情况下更新副本集密钥的过程。 [1]
警告
本教程中的示例键仅用于说明目的。 请勿在部署中使用 。 相反,您可以使用您选择的任何方法(例如 openssl rand -base64
756
等)生成密钥文件。
考虑一个副本集,其中每个成员的密钥文件都包含以下密钥:
以下过程更新副本集节点以使用新密钥:
[1] | 本教程不适用于 MongoDB 的 storage engine 本地 密钥 管理所使用的密钥文件。该密钥文件只能包含一个密钥。 |
步骤
1. 修改密钥文件以包含旧密钥和新密钥
修改每个成员的密钥文件以包含旧密钥和新密钥。 您可以将多个键指定为用引号括起来的字符串或键序列。
警告
本教程中的示例键仅用于说明目的。 请勿用于您的部署。 相反,使用您选择的任何方法(例如 openssl rand -base64
756
等)。
您可以将多个密钥字符串指定为密钥字符串序列(可以选择用单引号或双引号括起来)。
2. 重新启动每个成员
一旦所有密钥文件都包含旧密钥和新密钥,请一次重启每个成员。
对于每个从节点,将 mongosh
连接到该节点并:
使用
db.shutdownServer()
方法关闭成员:use admin db.shutdownServer() 重新启动成员。
对于主节点,将mongosh
连接到该节点,然后
使用
rs.stepDown()
降级该节点:rs.stepDown() 使用
db.shutdownServer()
方法关闭成员:use admin db.shutdownServer() 重新启动成员。
由于密钥文件包含旧密钥和新密钥,因此所有成员现在都可以接受任一密钥进行成员身份验证。
3. 仅将密钥文件内容更新为新密钥
警告
本教程中的示例键仅用于说明目的。 请勿用于您的部署。 相反,使用您选择的任何方法(例如 openssl rand -base64
756
等)。
修改每个成员的密钥文件以仅包含新密码。
4. 重新启动每个成员
一旦所有密钥文件仅包含新密钥,请一次重启一个成员。
对于每个从节点成员,将mongosh
连接到该成员并:
使用
db.shutdownServer()
方法关闭成员:use admin db.shutdownServer() 重新启动成员。
对于主节点,将mongosh
连接到该节点,然后
使用
rs.stepDown()
降级该节点:rs.stepDown() 使用
db.shutdownServer()
方法关闭成员:use admin db.shutdownServer() 重新启动成员。
所有成员现在仅接受用于成员身份验证的新密钥。