mysql高可用详解(七):高可用的复制

 

【冗余】

如果一个组件出现故障,必须有一个替代品。该替代品既可以是闲置的,也可以是当前系统部署的一部分;

【应急计划】

         为每个紧急事件都做好了计划;

故障类别

【salve故障】

slave只是用于读操作的,如果发生故障,负载平衡器会将新的查询定位到正常的slave。

【master故障】

 

【relay故障】

同时扮演master角色的slave称为中继服务器(relay),为了减轻master的负载;

如果relay发生故障,剩余的slave必须重定向到其他的中继服务器或者master;

方法

【添加新的slave】

         基本思路:获取现有服务器(通常是slave)进行快照,在一个新的服务器上恢复快照,然后从适当的位置进行复制;

获取快照的方法:

(1)使用mysqldump

安全、速度慢

(2)复制数据库文件:

速度较快,但是复制文件需要现将服务器离线。此外还需要管理一些位置,即mysqldump获得的那些正确启动复制的位置;

(3)使用在线备份的方法:

如MySQL Enterprise Backup和XtraBackup

(4)使用LVM获取快照:

在Linux中,可以通过逻辑卷管理器(LVM)得到卷快照,不过需要创建一个特殊的LVM卷。与复制数据库文件一样,这个方法也需要自己管理复制位置;

(5)使用文件系统快照的方法:

例如Solaris ZFS内置支持快照功能。需要自己管理复制位置;

注意:如果恢复的时候使用的不同类型引擎,则必须使用mysqldump;

【从拓扑结构中删除slave】

只需要通知负载均衡器slave不存在了,就可以删除slave;

【切换master】

方式一:将连接在master上的所有的slave切换到副master,然后通知负载均衡器原来的master不存在。

方式二:使用slave提升

方式三:使用热备份

【slave故障处理】

检测到slave不存在了,然后将它从负载平衡器的池中删除;

【master故障处理】

如果master出现故障,必须检测故障,并发所有的slave都转移到一个备用的master上。

【升级slave】

【升级master】

升级master首先需要升级所有的slave,这样它们才能够从master读取全部的复制事件。通常在升级master的时候,可以使用备用master,或者选择一个slave将其提升为master;

【热备份】

做服务器副本最简单的拓扑结构就是热备份(hot standby),热备份是一个专用的服务器,它是主master的副本。热备份服务器以slave的方式连接到master,以读取和应用所有的更新。这种配置通常称为主——备份配置(primary-backup configuration),主指的是master,备份指的是备用服务器;可以有多个热备份;

处理切换:将slave从master切换到standby

执行切换的基本思路是:在完全相同的位置停止运行slave和standby,然后把slave重定向到standby。由于standby在停止的时候位置没有任何的变更,只需要确定standby的binlog位置,然后让slave从那个位置启动。

1、查看位置信息SHOW SLAVE STATUS/G

2、启动slave去和standby一致START SLAVE UNTIL

3、使用CHANGE MASTER TO 命令切换到standby,把slave切换到standby并启动它;

使用Python处理切换:

【双主结构】

双主结构(dual masters)即两个master相互复制,保持同步;

双主结构的两种配置:

(1)主动——主动(active-active):

         在这个配置中,写操作同时到达两个服务器,然后将变更发送给对方;

(2)主动——被动(active-passive):

         在这个配置中,负责处理写操作的称为主动master,另外一个为被动master,与主动master保持同步;

MySQL5.5新功能:半同步复制——可以限制事务丢失的数量,其原理是,提交事务的线程会被阻塞,直到至少有一个slave确认收到这个事务。由于事务提交到存储引擎之后事件才会发给slave,所以事务的丢失数量可以控制在最多每个线程1个;

【共享磁盘】

双主结构可以通过一个共享磁盘结构(如SAN,存储区域网络)连接;

两台服务器连接到同一个SAN,并使用相同的文件。当主动地master发生故障的时候,被动的master随时接替;

【使用DRBD复制磁盘(分布式复制快设备)】

这是一个通过网络复制块设备的软件;

使用该方式只能在主动——被动配置使用DRBD技术,也就是说,被动磁盘完全不能被访问。

【双向复制】

双向复制可以有主动——主动配置

配置双向复制的步骤:

(1)确保两台服务器有不同的ID;

(2)确保两台服务器具有相同的数据(并且在复制启动之前两个系统都没有变更);

(3)创建一个复制用户,在两台服务器上准备复制;

(4)在两台服务器上启动复制;

注意:应该确保在应用层的两台服务器不会同时更新相同的数据;

【提升slave】

前面的情况均是在master正常运行的情况,当master发生以外情况下:

找到获取最多master变更(即知道最多)的slave,然后将其他slave与这个知道最多的slave同步:复制整个数据库或者使用类似mysqldbcompare的工具获取变更;

可以使用Python实现slave提升;

每个可以提升的slave必须有一个复制用户账户;

每个可提升的slave运行的时候必须使用log-in选项,即启动二进制日志;

每个可提升的slave运行的时候必须不使用log-slave-updates选项;

【环形复制】

建立两个以上的master相互复制,由于每个slave只能连接一个master,因此这种结构只能使用以环形的方式搭建;

MySQL引入了全局事务标识符,如果发现某个服务器出现故障,使用CHANGE MASTER 命令加上MASTER_AUTO_POSITION=1选项,将下游服务器连接到上游服务器;

 

由于每个服务器都有事务记录,故障服务器发出去的事务都会在剩余的每个服务器上执行一次。

 

猜你喜欢

转载自blog.csdn.net/qq_36807862/article/details/81289352