旋转自管理复制集的密钥
复制集成员可以使用密钥文件来相互验证作为同一部署的成员。
一个密钥文件可以包含多个密钥,如果成员之间至少有一个密钥是相同的,则建立成员身份验证。这允许在不停机的情况下滚动更新密钥。
以下教程逐步说明了更新复制集密钥的过程,无需停机。[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() 重启成员。
现在所有成员仅接受新密钥进行成员身份验证。