3.4.6. MongoDB 复制


注意

作为示例提供了为数据库镜像启用集群的配置,它们不适用于生产环境。

红帽使用 StatefulSet 为 MongoDB 复制(集群)提供了概念验证 模板。您可以 从 GitHub 获取示例模板

例如,将示例模板上传到当前项目的模板库中:

$ oc create -f \
    https://raw.githubusercontent.com/sclorg/mongodb-container/master/examples/petset/mongodb-petset-persistent.yaml
重要

示例模板使用持久性存储。集群中必须有持久性卷才能使用此模板。

因为 OpenShift Container Platform 会自动重启不健康的 Pod(容器),如果一个或多个成员崩溃或失败,它将重启副本设置成员。

虽然副本设置的成员被缩减或正在重启,但可能是以下情况之一:

  1. 主要成员为下:

    在这种情况下,其他两个成员选择一个新的 PRIMARY。直到那个时候,读取不会受到影响,但写入操作会失败。成功选举后,通常会写入并读取过程。

  2. SECONDARY 的一个成员会停止:

    读取和写入不会受到影响。根据 oplogSize 配置和写入率,第三方可能无法加入副本集,需要手动干预来重新同步其数据库的副本。

  3. 任何两个成员都处于停止状态:

    当一个由三个成员组成的副本集的成员无法访问其他成员时,如果它是 PRIMARY,则会从这个角色下移。在这种情况下,SECONDARY 成员可能会提供 read 功能,写入操作会失败。一旦有多个成员可用,会选举一个新的 PRIMARY 成员,读写操作可正常进行。

  4. 所有成员都停机:

    在这种极端情况下,读取和写入都失败。在两个或者两个以上成员被备份后,选举会重新建立副本集,使其具有 PRIMARY 和 SECONDARY 成员,之后读取和写入将可以正常工作。

这是推荐的 MongoDB 复制策略。

注意

对于生产环境,您必须尽可能在成员间保持分离。建议您使用一个或多个节点选择功能将 StatefulSet pod 调度到不同的节点上,并提供由独立卷支持的存储。

3.4.6.1. 限制:

  • 只支持 MongoDB 3.2。
  • 在进行缩减时,您必须手动更新副本设置的配置。
  • 更改用户和管理员密码是一个手动过程。它要求:

    • 更新 StatefulSet 配置中的环境变量值,
    • 更改数据库中的密码,并
    • 重启所有 pod。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.