旋转自管理复制集的密钥
复制集成员可以使用密钥文件来相互验证作为同一部署的成员。
一个密钥文件可以包含多个密钥,如果成员之间至少有一个密钥是相同的,则建立成员身份验证。这允许在不停机的情况下滚动更新密钥。
以下教程逐步说明了更新复制集密钥的过程,无需停机。[1]
警告
本教程中的示例密钥仅用于说明目的。请请不要用于您的部署。相反,使用您选择的方法(例如,openssl rand -base64 756等)生成密钥文件。
考虑一个副本集,其中每个成员的密钥文件包含以下密钥

以下过程用于将副本集成员更新为使用新密钥

| [1] | 本教程不适用于用于密钥文件的MongoDB的加密存储引擎本地密钥管理。该密钥文件只能包含一个密钥。 |
过程
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() 重启成员。
现在所有成员仅接受新密钥进行成员身份验证。