对分片集群进行故障排除

本页描述了对 分片集群部署进行故障排除的常见策略。

应用程序服务器或mongos实例变得不可用

如果每个应用服务器都有自己的mongos实例,其他应用服务器可以继续访问数据库。此外, mongos实例不保持持久状态,它们可以重新启动并变得不可用而不会丢失任何状态或数据。当mongos实例启动时,它会检索配置数据库的副本 并可以开始路由查询。

单个成节点在分片副本集中变得不可用

副本集为分片提供高可用性。如果 unavailable mongod是primary,那么副本集将选举一个新的 primary。如果 unavailablemongod是一个 secondary,它会断开 primary 和 secondary 将继续保存所有数据。在三节点副本集中,即使该集合中的单节点遇到灾难性故障,其他两个节点也拥有数据的完整副本。

始终调查可用性中断和故障。如果一个系统是不可恢复的,尽快替换它并创建一个新的副本集成员来替换丢失的冗余。

如果一个不可用的辅助节点在它仍然有当前的 oplog 条目时变得可用,它可以使用正常的复制过程来赶上集合的最新状态;否则,它必须执行初始同步。

分片的所有节点都变得不可用

在分片集群中,mongodmongos实例监控分片集群中的副本集(例如分片副本集,配置服务器副本集)。

如果副本集分片的所有成员都不可用,则该分片中保存的所有数据都不可用。但是,所有其他分片上的数据将保持可用,并且可以向其他分片读取和写入数据。但是,您的应用程序必须能够处理部分结果,您应该调查中断的原因并尽快尝试恢复分片。

配置服务器副本集节点变得不可用

副本集为配置服务器提供高可用性。如果一个不可用的配置服务器是 主节点,那么副本集将 选举一个新的主节点。

如果副本集配置服务器丢失了它的主节点并且不能选举一个主节点,集群的元数据就会变成只读的。您仍然可以从分片读取和写入数据,但是在主分片可用之前不会发生块迁移或块拆分。

笔记

跨两个数据中心分布副本集节点提供了优于单个数据中心的优势。在两个数据中心分布中,

  • 如果其中一个数据中心出现故障,与单个数据中心分布不同,数据仍然可用于读取。
  • 如果只有少数节点的数据中心宕机,副本集仍然可以提供写操作和读操作。
  • 但是,如果拥有大多数节点的数据中心出现故障,副本集将变为只读。

如果可能,将节点分布在至少三个数据中心。对于配置服务器副本集 (CSRS),最佳做法是分布在三个(或更多,取决于节点数量)中心。如果第三个数据中心的成本过高,一种分配的可能性是在两个数据中心之间平均分配数据承载节点,如果您的公司政策允许,则将剩余的节点存储在云中。

笔记

首次启动分片集群时,所有配置服务器都必须正在运行且可用。

从 MongoDB 3.4 开始,不再支持使用三个镜像mongod实例 (SCCC) 作为配置服务器。

由于陈旧的配置数据,游标失败

当一个或多个mongos实例尚未从配置数据库更新其集群元数据缓存时,查询将返回以下警告 :

could not initialize cursor across all shards because : stale config detected

此警告不应传播回您的应用程序。该警告将重复出现,直到所有mongos实例都刷新了它们的缓存。要强制实例刷新其缓存,请运行 flushRouterConfig命令。

片键

集群可用性

确保集群可用性:

  • 每个分片应该是一个副本集,如果特定 mongod实例失败,副本集节点将选举另一个作为主节点并继续运行。但是,如果整个分片无法访问或由于某种原因发生故障,则该数据将不可用。
  • 分片键应该允许将mongos大多数操作隔离到单个分片。如果操作可以由单个分片处理,则单个分片的故障只会导致部分 数据不可用。如果操作需要访问所有分片进行查询,单个分片故障将导致整个集群不可用。

配置数据库字符串错误

在版本3.2中更改

从 MongoDB 3.2 开始,配置服务器可以部署为副本集。分片集群的mongos实例必须指定相同的配置服务器副本集名称,但可以指定副本集不同节点的主机名和端口。

从 3.4 开始,不再支持使用已弃用的镜像mongod实例作为配置服务器 (SCCC)。在将分片集群升级到 3.4 之前,必须将配置服务器从 SCCC 转换为 CSRS。

对于早期版本的 MongoDB 分片集群,使用三个mongod镜像实例的拓扑结构作为配置服务器, 分片集群中的mongos实例必须指定相同的 configDB字符串。

移动配置服务器时避免停机

使用 CNAME 将您的配置服务器标识到集群,以便您可以在不停机的情况下重命名和重新编号您的配置服务器。

moveChunk commit failed错误

在块迁移结束时, 分片必须连接到配置数据库以更新集群元数据中块的记录。如果分片连接配置数据库失败,MongoDB报如下错误:

ERROR: moveChunk commit failed: version is at <n>|<nn> instead of
<N>|<NN>" and "ERROR: TERMINATING"

发生这种情况时,分片副本集的主节点将终止以保护数据一致性。如果从节点可以访问配置数据库,则分片上的数据在选举后可以再次访问。

原文 - https://docs.mongodb.com/manual/tutorial/troubleshoot-sharded-clusters/

译者:陆文龙

Copyright © 上海锦木信息技术有限公司 all right reserved,powered by Gitbook文件修订时间: 2023-09-01 17:10:26

results matching ""

    No results matching ""