我正在使用一个有两台机器的系统,以主/主复制的方式运行 mysql。
我想将系统移至也执行主/主复制的新机器。是否可以在不从旧集群中删除一个节点并将其替换为新节点并创建从第一个新节点到第二个新节点的新复制的情况下做到这一点?
假设我们有两个节点 node1 和 node2,它们处于活动状态并执行 master/master 操作,我该如何“神奇地”将集群移动到名为 new1 和 new2 的新节点,而不会有太多的停机时间。
答案1
您有 M1 <=> M2;您希望最终获得新硬件 M3 <=> M4。
- (短暂中断)将所有客户端(写入器和读取器)移至 M2。
- 拆除 M1 足够长的时间以克隆它,从而按照以下拓扑结构制作 M3:M1 <=> M2 -> M3。(M3 只是 M2 的从属。)
- 从 M3 构建 M4:M1 <=> M2 -> M3 -> M4。(M3 尚未使用,因此没有中断。)
- (短暂中断)将所有客户端从 M1 和 M2 移出,使其指向 M3。在此过程中,确保所有复制至少已到达 M3。
- 抛弃 M1 和 M2。现在只有 M3 -> M4。
- (短暂中断)设置双主机(M3 <=> M4);根据需要重新排列客户端。
请注意,这三次中断都相当于大师去世导致的失败。
使用双主服务器时的一般建议:仅写入两个服务器中的其中一个;使用另一个作为备份加上读取扩展。
更好的是,切换到 Galera 集群(或 InnoDB 集群),这样你就可以获得自动故障转移等。这将使未来的拓扑变化更加轻松。这样的迁移将是相似的我刚才描述的就是这种情况。