« 上一篇下一篇 »

Dual Master与级联复制结合解决在线DDL变更问题

使用Dual Master加级联复制的组合架构,对MySQL的一个致命伤即在线DDL变更来说,也开源得到一定的解决。如当我们需要给某个表增加一个字段,可以通过如下操作在上述架构中实现:

    1)在Slave集群中抽出一台暂时停止服务,然后对其进行变更,完成后再放回集群继续提供服务;

    2)重复第一步的操作完成所有Slave的变更;

    3)暂停Master B的复制,同时关闭当前session记录二进制日志的功能,对其进行变更,完成后再启动复制;

    4)通过VIP切换,将应用所有对Master A的请求切换至Master B;

    5)关闭Master A当前session记录二进制日志的功能,然后进行变更;

    6)最后再将VIP从Master B切换回Master A,至此,所有变更完成。

    变更过程中有几点需要注意:

    1)整个Slave集群须能在少一台MySQL的时候仍然支持所有业务;

    2)Slave集群中增加或减少一台MySQL的操作很简单,可通过在线调整应用配置来实现;

    3)Dual Master之间的VIP切换很简单,且切换时间较短,因为这个切换过程会造成短时间段内应用无法访问Master数据库;

    4)在变更Master B的时候,会出现短时间段内Slave集群数据的延时,所以如果单台主机的变更时间较长的话,需要在业务量较低的凌晨进行变更;如果有必要,甚至可能在需要变更Master B之前将所有Slave切换为以Master B作为Master。
   
    当然,即使是这样,由于存在Master A与Master B之间的VIP切换,仍有可能出现短时间段内应用无法写入操作的情况。所以说,这种方案也只能在一定程度上解决MySQL在线DDL的问题。而当集群数量较多,且每个集群的节点也较多的情况下,整个操作过程将会非常复杂而漫长。MySQL在线DDL的问题,目前还没有一个非常完美的解决方案,只有期待MySQL能在后续版本中解决。

« 上一篇下一篇 »