我有两个MariaDB Galera群集,包含3个节点。
第1组:MDB-01,MDB-02,MDB-03 第2组:MDBDR-01,MDBDR-02,MDBDR-03
这两个集群位于两个不同的数据中心,分布在两个地理区域。
群集1是PRODUCTION群集,群集2是DR群集
已在MDB-01到MDBDR-01之间设置使用GTID的异步复制 根据链接中的给定配置: http://www.severalnines.com/blog/deploy-asynchronous-replication-slave-mariadb-galera-cluster-gtid-clustercontrol (链接是MariaDB Galera Cluster与独立MariaDB实例之间的异步复制。 但是我为MariaDB Galera Cluster和MariaDB Galera Cluster之间的异步复制设置了相同的配置
我可以从当前的奴隶MDBDR-01 =>切换MDB-01到MDBDR-01 => MDB-02使用以下命令:
将MASTER更改为master_host ='MDB-02'
然而,我正在挑战如何指向MDBDR-02 => MDBDR-01的MDB-01已关闭。
请您提供输入以实现指向MDBDR-02 => MDB-01或MDBDR-03 => MDB-01。
答案 0 :(得分:0)
本文简要提到,您需要了解的一件事是,每个MariaDB的GTID实施都会在这种情况下引发问题。由于每个节点都维护自己的GTID列表,并且galera事务没有自己的id,因此相同的GTID可能不会指向每个服务器上的相同位置(请参阅this article)。
由于这个问题,如果没有MariaDB 10.1,我不会尝试你正在做的事情。 MariaDB 10.1.8刚刚发布,是10.1系列的第一个GA版本。 10.1更改GTID实现,以便galera事务使用自己的server_id
(通过配置变量设置)。然后,您可以在从属设备上过滤复制,以仅复制galera ID。
要切换到其他从属服务器,您需要在旧的从属服务器上执行最后一个GTID。 gtid_slave_pos
存储在mysql.gtid_slave_pos
中,但mysql.*
表未复制。我不完全确定并且我没有办法测试事务的原始GTID是否传递给其他从属galera节点(即,如果主集群的galera server_id是1并且从集群的galera server_id是2并且MDBDR-01获得GTID 1-1-123的从属事件,MDBDR-02将其记录为1-1-123或1-2-456)。我猜它没有,因为新的GTID实现应该改变server_id,但你可能能够验证这一点。由于您可能无法从另一个从属Galera节点获取最后执行的主GTID,因此您可能需要从旧的从站获取GTID,除非您正常关闭旧的从站,否则这可能是不可能的。您可能需要从新slave上binlog中的上次执行事务中找到GTID,并尝试将其与master的binlog中的事务进行匹配。此外,如果您没有使用sync_binlog = 1
,则binlog不可靠,可能有点落后。
由于每个galera从属节点可能不知道已执行的GTID并且无法跳过以前的GTID事件,如果您找到的GTID是,您可能还必须使用SQL_SLAVE_SKIP_COUNTER
来到达正确的位置背后。
当您获得GTID(或猜测它)时,您将在新从站上设置复制,就像在原始从站上设置复制一样。以下命令应该这样做:
SET GLOBAL gtid_slave_pos = "{Last Executed GTID}"; CHANGE MASTER TO master_host="{Master Address}", master_port={Master Port}, master_user="{Replication User}", master_password={Replication Password}, master_use_gtid=slave_pos; START SLAVE;
您还应该在重新启动之前禁用旧从属设备上的复制,以便错过的事件不会被复制两次。
直到通过galera复制执行的从属GTID,这可能永远不会发生,像这样的故障转移将是一个混乱的过程。