繁体   English   中英

Mongo分片与复制混乱

[英]Mongo sharding confusion with replication turned on

可以说我有3台机器。 分别称为A,B,C。我已启用mongo复制。 因此,假设A是主要的。 B和C是次要的。

但是现在我想分片数据库。 但是我相信由于A是主要的,所以所有写操作仍然归A所有。 真的吗 ? 有人可以解释分片的需求以及它如何增加写入吞吐量吗?

我知道mongos将找到正确的碎片。 但是写入必须在主数据库上完成。 其余的其他机器B,C也将跟进。 我错过了什么吗?

我也不理解以下语句:“每个分片都是一个副本集”。 碎片也是不完整的,除非它也是主要的。

分片与复制完全不同。

我现在将尝试解释您的困惑,而不会让您更加困惑。

当考虑分片时,副本集是分片信息的复制范围。

这样一来,这意味着集群中的每个分片实际上都是一个副本集,它本身拥有一定范围的分片数据(可以容纳不同的范围块,但这是另一个主题),并在该自包含副本集的成员之间进行复制。

想象一下,一个分片将是它自己的副本集的主副本,其中包含它自己的成员集,而没有其他成员。 这就是每个分片都是副本集的含义。

这样,每个分片将具有自己的自包含主数据库,但同时,如果副本集所持有的范围与客户端向下发送的分片密钥目标匹配,则每个分片的每个副本集的每个主数据库都可以接收来自mongos的写入。

我希望这是有道理的。

编辑

这篇文章可能会有所帮助: http : //www.kchodorow.com/blog/2010/08/09/sharding-and-replica-sets-illustrated/

在这里适用吗? 假设我要确认2个mongod实例的写入。 那可能吗 ? 我仍然很难理解。 你能举个例子解释一下吗?

好,让我们举个例子。 您有3个分片,实际上是3个副本集,分别称为rs1和rs2和rs3,每个副本集包含3个节点(1个主节点和2个辅助节点)。 如果您希望副本集的2个成员确认写入,则可以像通常那样进行:

db.users.insert({username:'sammaye'},{w:2})

其中, username是分片键。

发送到该查询的mongos将找出实际上是副本集的正确碎片(节点),连接到该副本集,然后照常执行插入。

因此,以rs2为例,实际上包含了所有以字母ms开头的用户名的范围。 mongos将使用其内部rs2映射(连接到副本集时会丢失)以及您的写入/读取关注点来判断要从哪个成员读取和写入。

标签也将同样适用。

如果mongos找到了不是“主要”(如在复制中)的分片,那么仍在次要中执行写入吗?

您在这里仍然感到困惑,没有像复制中那样的“主”服务器,有分片数据库的种子服务器(有时称为主服务器),但这完全是另一回事。 无论如何,mongos都不必写入主节点,它可以自由写入查询允许的分片集群的任何部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM