MySQL 分布式架构扩缩容的初步设计
MySQL 分布式架构的扩缩容是一个很有意思的话题. 严格的说, 我们所说的这种架构方案是一种伪分布式架构, 我们就做下统称. 重点是扩缩容的思路上.
如果一套环境的主从完整, 分为多个逻辑分片的情况下, 大体是这样的架构.
这个架构采用了 4 个物理分片, 每个物理分片上有 4 个逻辑分片, 总共有 16 个逻辑分片, 也就意味着一张表被分为了 16 份.

对于扩容来说, 是优先考虑主库写入为主, 所以我们的扩容可以是 2N 的规模来扩容, 比如 4 个物理分片, 可以扩容为 8 个物理分片, 大体的架构和分布如下, 这个时候从库顶上来做了主库.

从扩容的角度来说, 这也就是我们预期要做的事情, 4 个变 8 个, 8 个变 16 个. 一套环境按照设定的分片规模可以扩容两次.
而缩容怎么来做呢, 我们需要考虑得更细致一些, 所以我就截取了物理分片 1 的一个相对详细的数据复制关系图.
扩容前, 分片节点上的 4 个逻辑分片都是 active 状态, 都可以写入数据, 从库是 inactive, 只负责数据同步.

扩容后, 原本的 db1,db2 为 active 状态, 而 db3,db4 在原来的 Slave 节点上是 active 状态

这个基础上, 我们需要保证的就是将原本隔离的节点数据统一为 Master 端 active 状态. 这个过程说起来容易, 操作起来就是一个难点了.

这个事情如果相对平滑的完成, 其实整个分布式集群的管理就不在话下了.
来源: http://database.51cto.com/art/201812/588219.htm