基于复制的高可用
热备份
热备份原理:是指master故障以后,热备份提供一个master的原备份的,且所有的客户端和slave都可以切换到热备份服务器上并继续工作。
需要解决的问题
1)故障发生以后,系统热备到master上,你正从一个新的master上进行复制,所以有必要将binlog的位置转换到热备份服务器上;
2)当slave故障以后转移到热备份slave,热备份slave可能实际上并没有包含原slave记录的所有更改;
3)当把修复的master带回配置中去,被修复的master中的二进制日志中有些更改可能没有离开过服务器。
解决方法
1)默认情况下slave执行的事件没有被记录到二进制文件中,如果这个slave是master的一个备份,这时会出现问题,master有必要发送给备份服务器的所有更改写入备份服务器的二进制中,,在my.cnf中添加一个选项log-slave-updates.
这个确保来自master并被执行的语句会被写入slave的二进制中
Log-slave-updates
2)切换时slave和备份服务器在完全相同的位置停止运行,然后把slave重定向到备份服务器上。
如果备份服务器超前slave。为了让slave赶上备份服务器并在正确的位置停止,使用
start slave until master_log_file=’master-bin.0009’,master_log_pos=776;
Select master_pos_wait(‘master-bin.0009’,776);
之后使用change master to 命令切换到备份服务器,然后start slave;
双主
使用双master时。有两种不同的配置方法:
Active-active:操作同时被写入两个服务器,然后把更改转移到其他master;
Active-passive:一个master处理写入,而另一个服务器只是和被动master保持一致:
Active-active:最常见的用途就是让服务器从地理位置上接近不同的用户组
缺点:如果同样的信息在两个master 上被更新,比如一个用户突然被加入到两个master上这两个更新会有冲突,并很可能导致复制停止:
Active-slave:会出现脑裂情况:
共享磁盘
两个master通过共享磁盘的体系结构比如SAN(存储区域网络)被链接到一起,并被设置为使用相同的文件:
优点:由于binlog文件存储在共享磁盘上,所有不需要转换binlog位置,两台服务器就是彼此的镜像。最有必要的地方是要注意slave停下来的地方,执行change master命令,并再次复制;
使用drbd复制磁盘
DRBD(分布式复制块设备)
其中DRBD用于复制磁盘到备份服务器这个设置的接嗲。DRBD块设备一次把数据写入到真的磁盘。这两个DRBD的进程通过网络链接以确保任何对主Master的更改都被复制到 备份master 上
半同步复制
允许更改操作继续执行之前,确保更改操作至少被写入一个slave磁盘。这意味着对于每一个链接,最多只有一个事务会由于master奔溃而丢失
mysql的横向扩展
添加更多的服务器称为横向扩展
异步复制:为了处理大量的读请求,站点通过复制创建master的拷贝,然后让slave处理所有的读请求,而master处理写请求,这个过程是异步的,因为master并不等待slave应用改变,而是将每个slave更新请求分发到slave。
复制监控
【监控线程】
控制复制的线程共有3个线程,在master上,每个已链接的slave都有一个线程,称为binlog dump.线程,该线程负责将binllog事件传给已链接的slave。Slave上有两个线程,即slave IO 和SQL。I/O线程负责读取master上的传来的binlog事件,然后将这些事件写入slave的中继日志。SQL线程负责读取并在之后执行中继日志中的事件然后执行。
使用show processlistG 命令可以监控binlog dump线程当前的状态。