在副本集失去多数时恢复应用程序数据库
如果Kubernetes成员集群发生故障并且应用程序数据库丢失大多数可用于选举主节点的副本集节点, Kubernetes Operator 不会自动trigger强制副本集重新配置。 您必须手动启动强制副本集重新配置,并将应用程序数据库副本集恢复到健康状态。
Overview
在某些严重的 Kubernetes 集群中断中,应用程序数据库的副本集部署可能会丢失大多数副本集节点。 例如,如果您的应用程序数据库部署中有两个节点位于 cluster 1
中,三个节点位于cluster 2
中,并且cluster 2
发生中断,则应用程序数据库的副本集部署将失去选举节点所需的节点多数性主节点。 如果没有主节点, MongoDB Agent将无法重新配置副本集。
要启用重新安排副本集的节点,Kubernetes Operator 必须强制重新配置 助手的 自动化配置 MongoDB Agent,以便能够在剩余健康节点集群中部署副本集节点。为此,Kubernetes Operator 设置了replicaSets[n].force 副本集配置中的标志。 该标志指示MongoDB Agent强制副本集使用当前(最新)的自动化配置版本。 使用该标志允许 Kubernetes Operator 重新配置副本集,以防未选举出主节点。
通过强制重新配置恢复应用程序数据库
要对应用程序数据库的节点执行强制重新配置,请执行以下操作:
更改
spec.applicationDatabase.clusterSpecList
配置设置,重新配置健康Kubernetes集群上的应用程序数据库部署,从而允许副本集形成大多数健康节点。从
spec.applicationDatabase.clusterSpecList
中删除出现故障的 Kubernetes 集群,或缩减出现故障的 Kubernetes 成员集群。 这样,副本集就不会将这些集群上托管的应用程序数据库节点计为副本集的投票节点。 例如,如果cluster 1
中有两个运行状况良好的节点,而cluster 2
出现故障包含3节点,则总共五个副本集节点中有两个运行状况良好的节点( 2 / 5运行状况良好)。 将一个节点添加到cluster 1
会导致健康节点与副本集中成员数的比率为3 / 6 。 要形成多数副本集,您有以下选项:向
cluster 1
或新的运行状况良好的 Kubernetes 集群添加至少两个新的副本集节点。 这样就达到了多数 ( 4 / 7 ),七个成员的副本集中有四个节点。将出现故障的 Kubernetes 集群缩减至零个节点,或从 中完全删除该集群,并向 中添加至少一个节点,以便在副本集的
spec.applicationDatabase.clusterSpecList
cluster 1
33StatefulSet 中具有 / 个健康节点。
在
MongoDBOpsManager
自定义资源的顶层添加注解"mongodb.com/v1.forceReconfigure": "true"
,并确保值"true"
是用引号括起来的string 。根据此注解,Kubernetes Operator 在下一个协调过程中对副本集执行强制重新配置,并根据更改的部署配置扩展应用程序数据库的副本集节点。
Kubernetes Operator 无法确定故障 Kubernetes 集群中的节点是否正常。 因此,如果 Kubernetes Operator 无法连接到出现故障的成员 Kubernetes 集群的 API Server,Kubernetes Operator 会在应用程序数据库副本集节点的协调过程中忽略该集群。
这意味着应用程序数据库节点的缩减会从副本集配置中删除失败的进程。 如果只有 API 服务器关闭,但副本集的节点正在运行,Kubernetes Operator 不会从故障 Kubernetes 集群中删除 Pod。
为了表明它已完成强制重新配置,Kubernetes Operator 添加注释键
"mongodb.com/v1.forceReconfigurePerformed"
,并将当前时间戳作为值。在 Kubernetes Operator 中为更改的
MongoDBOpsManager
自定义资源重新应用配置。