x 的滚动更新。包含有关自管理集群的新 DN 的509证书
副本集或分分片集群的成员可以使用 x。 509证书用于成员身份验证,以将彼此标识为同一部署的成员。
为了将彼此标识为同一部署的成员,组织属性( O
)、组织单位属性( OU
)和域组件( DC
)来自证书必须匹配。
在某些情况下,您可能需要将成员证书更新为具有新标识名 ( DN
) 的新证书,例如,如果组织更改了名称。 您可以使用tlsX509ClusterAuthDNOverride
参数设置用于匹配的替代DN
。 使用此参数,您可以将证书滚动更新为具有不同DN
的新证书。
注意
在 滚动更新中,一次更新一个成员证书,并且您的部署不会导致任何停机。 要执行滚动更新以轮换使用net.tls.clusterAuthX509
设置的集群或更新后将使用这些设置的集群上的证书,请参阅在自管理集群上轮换 X. 509证书。
以下教程介绍了在不停机的情况下更新副本集证书的过程。
考虑一个副本集,其中每个成员的证书( clusterFile
和certificateKeyFile
)的DN
值包含"OU=10gen Server,O=10gen"
(比较的一部分不考虑其他属性):
net.tls.mode: requireTLS net.tls.certificateKeyFile: "./mycerts/10gen-server1.pem" net.tls.CAFile: "./mycerts/ca.pem" security.clusterAuthMode: x509 net.tls.clusterFile: "./mycerts/10gen-cluster1.pem" net.tls.clusterCAFile: "./mycerts/ca.pem"
以下过程将成员的证书( clusterFile
和certificateKeyFile
)更新为DN
值为"OU=MongoDB Server,O=MongoDB"
的新证书。
注意
以下过程假定新的 x.509 证书满足成员证书的所有其他要求。 有关详细信息,请参阅成员证书要求
步骤
0。可选。 对正在运行的成员设置覆盖参数
此过程要求重新启动部署的所有成员。 由于在重新启动所有成员之前,这些设置不会生效,因此您的实例可能会记录消息,直到该过程完成。
要避免出现这些消息,您可以在运行成员上设置覆盖参数。
将 mongosh
直接连接到部署的每个成员,并将tlsX509ClusterAuthDNOverride
参数设置为新证书DN
:
db.adminCommand( { setParameter: 1, tlsX509ClusterAuthDNOverride: "OU=MongoDB Server,O=MongoDB" } )
1. 修改所有节点的配置
修改每个成员的配置:
将
net.tls.certificateKeyFile
更新为新证书。将
net.tls.clusterFile
更新为新证书。将
tlsX509ClusterAuthDNOverride
参数设置为新证书DN
。
例如:
net.tls.mode: requireTLS net.tls.certificateKeyFile: "./mycerts/mongodb-server1.pem" net.tls.CAFile: "./mycerts/ca.pem" security.clusterAuthMode: x509 net.tls.clusterFile: "./mycerts/mongodb-cluster1.pem" net.tls.clusterCAFile: "./mycerts/ca.pem" setParameter: tlsX509ClusterAuthDNOverride: "OU=MongoDB Server,O=MongoDB"
在重新启动每个成员之前,这些设置不会生效(请参阅下一步)。
2. 重新启动每个成员
修改所有成员的配置后,重新启动每个从节点,然后是主节点。
对于每个从节点成员,将mongosh
连接到该成员并:
使用
db.shutdownServer()
方法关闭成员:use admin db.shutdownServer() 重新启动成员。
在重新启动下一个从节点之前,确保该成员已达到
SECONDARY
状态。
对于主节点,将mongosh
连接到该节点,然后
使用
rs.stepDown()
降级该节点:rs.stepDown() 使用
db.shutdownServer()
方法关闭成员:use admin db.shutdownServer() 重新启动成员。
3。删除tlsX509ClusterAuthDNOverride
设置
使用新证书重新启动所有成员后,您可以从配置中删除tlsX509ClusterAuthDNOverride
参数。
例如:
net.tls.mode: requireTLS net.tls.certificateKeyFile: "./mycerts/mongodb-server1.pem" net.tls.CAFile: "./mycerts/ca.pem" security.clusterAuthMode: x509 net.tls.clusterFile: "./mycerts/mongodb-cluster1.pem" net.tls.clusterCAFile: "./mycerts/ca.pem"
直到您重新启动每个成员后,这些设置才会生效。