繁体   English   中英

带复制的分片

[英]Sharding with replication

带复制的分片] 1

我有一个多租户数据库,在 5 个服务器节点中有 3 个表(商店、产品、购买)。假设我的商店表中有 3 个商店,我将使用storeId对其进行分片。 我需要节点 1 和 2 中可用的所有分片 (1,2,3) 的所有数据。但节点 3 将仅包含存储 #1 的分片,节点 4 将仅包含存储 #2 的分片和节点 5 的分片 #3 . 这就像一个具有 3 个副本的分片。 这可能吗? 可以为此目的使用哪些数据库引擎(最好是 sql dbs)? 你有什么经验吗?

问候

我感觉您没有充分解释为什么要尝试这种奇怪的拓扑。

无论如何,我会指出一些与 MySQL/MariaDB 有关的事情。

  • Galera 集群已经包含多个节点(至少 3 个),但不直接支持“分片”。 您可以拥有多个 Galera 集群,每个“分片”一个。
  • 正如我对 Galera 的评论一样,其他形式的 MySQL/MariaDB 可以在每个分片的节点之间进行复制。
  • 如果您正在考虑拥有一个包含所有数据的服务器,但仅将部分复制到只读副本,则可以使用 replicate_do/ignore_database 的设置。 我强调“只读”,因为对这些伪分片的更改不能轻易发送回主服务器。 (但请参阅“多源复制”)
  • 分片主要用于在单个服务器上处理太多流量的情况。 你是说3个租户因为写入过多不能共存? (过多的读取可以通过复制来处理。)

一个暂定的解决方案:

拥有所有服务器上的所有数据。 对所有节点使用相同的 Galera 集群。

优势:当“大部分”或所有网络都在工作时,所有数据都可以快速双向复制。

潜在的缺点:如果一半或更多的节点出现故障,您必须手动介入以使集群再次运行。

“缺点”的可能解决方案:以不同的方式“加权”节点。 给总部 3 号的身高权重; 给每个分支节点一个小得多(但非零)的权重。 这样,大多数分支机构都可以离线而不会丢失整个系统。

但是......我担心离线分支节点会自动变为只读。

另一个计划:

切换到 NDB。 网络是脆弱的。 一致性是通过“最终一致性”而不是 Galera+InnoDB 的“[虚拟]同步复制”来维护的。

NDB 允许您立即在任何节点上写入。 然后将写入发送到其他节点。 如果存在冲突,则将其中一个值声明为“赢家”。 您选择确定获胜者的算法。 一个易于理解的是“无论哪个写是'第一个'”。

暂无
暂无

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

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