分类: Mysql/postgreSQL
2011-04-15 19:37:36
MySQL5.5有很多的改进和增强,也引入了很多新功能。在可用性方面有如下几点新特性:
Semi-synchronous Replication(半同步复制)
我们知道在5.5之前,MySQL的复制其实是异步操作,而不是同步,也就意味着允许主从之间的数据存在一定的延迟,mysql当初这样设计的目的可能也是基于可用性的考虑,为了保证master不受slave的影响,并且异步复制使得master处于一种性能最优的状态:写完binlog后即可提交而不需要等待slave的操作完成。这样存在一个隐患,当你使用slave作为备份时,如果master挂掉,那么会存在部分已提交的事务未能成功传输到slave的可能,这就意味着数据丢失!
在MySQL5.5版本中,引入了半同步复制模式(Semi-synchronous Replication)能够成功避免上述数据丢失的隐患。在这种模式下:master会等到binlog成功传送并写入至少一个slave的delay log之后才会提交,否则一直等待,直到timeout(默认10s)。当出现timeout的时候,master会自动切换半同步为异步,直到至少有一个slave成功收到并发送Acknowledge,master会再切换回半同步模式。结合这个新功能,我们可以做到,在允许损失一定的事务吞吐量的前提下来保证同步数据的绝对安全,因为当你设置timeout为一个足够大的值的情况下,任何提交的数据都会安全抵达slave。
半同步模式其实是作为MySQL5.5的一个plugin实现的,master和slave使用不同的plugin。默认情况下没有安装该plugin,官方提供的MySQL Server RPM包默认安装后,会在/usr/lib(64)/mysql/plugin/下面找到该插件。安装完插件之后,还需要手动设置系统参数以开启半同步复制模式。详细的过程可参考下面步骤。
——————————————————————————
设置步骤:
【Master】
安装插件
mysql>install plugin rpl_semi_sync_master soname ‘semisync_master.so’;
(文档中给的插件名用单引号引起来了,我执行却提示语法错误,把引号去掉后方能执行成功)
然后会出现以下4个系统参数:
动态修改rpl_semi_sync_master_enabled=ON,同时根据情况需要修改timeout=1000 (单位毫秒)
在show global status中也会出现如下的几个状态:
————————————————————————-
【Slave】
安装插件
mysql>install plugin rpl_semi_sync_slave soname ‘semisync_slave.so’;
然后会出现下列2个参数:
动态设置rpl_semi_sync_slave_enabled =ON,然后重启replication(stop slave;start slave;)即可。记得一定要重启,否则master无法确认该slave是否开启了半同步。相同的操作可以在任意多个slave中进行设置。
show global status会出现下面的系统状态: