Chinaunix首页 | 论坛 | 博客
  • 博客访问: 424578
  • 博文数量: 161
  • 博客积分: 5005
  • 博客等级: 上校
  • 技术积分: 1090
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-20 16:38
文章分类

全部博文(161)

文章存档

2011年(21)

2010年(33)

2009年(89)

2008年(18)

我的朋友

分类: Mysql/postgreSQL

2011-04-15 19:37:36

MySQL5.5有很多的改进和增强,也引入了很多新功能。在可用性方面有如下几点新特性:

  • Semi-synchronous Replication
  • Replication Heartbeat
  • Automatic Relay Log Recovery
  • Replication Per Server Filtering
  • Replication Slave Side Data Type Conversions

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 OFF
  • rpl_semi_sync_master_timeout 10000
  • rpl_semi_sync_master_trace_level 32
  • rpl_semi_sync_master_wait_no_slave ON

动态修改rpl_semi_sync_master_enabled=ON,同时根据情况需要修改timeout=1000  (单位毫秒)

在show global status中也会出现如下的几个状态:

  • Rpl_semi_sync_master_clients                0      ##表示有多少slave设置了半同步模式。
  • Rpl_semi_sync_master_net_avg_wait_time      0
  • Rpl_semi_sync_master_net_wait_time          0
  • Rpl_semi_sync_master_net_waits              0
  • Rpl_semi_sync_master_no_times               0
  • Rpl_semi_sync_master_no_tx                  0      ##表示没有成功接收slave回执的提交次数
  • Rpl_semi_sync_master_status                 OFF    ##表示当前是异步模式还是半同步模式。
  • Rpl_semi_sync_master_timefunc_failures      0
  • Rpl_semi_sync_master_tx_avg_wait_time       0
  • Rpl_semi_sync_master_tx_wait_time           0
  • Rpl_semi_sync_master_tx_waits               0
  • Rpl_semi_sync_master_wait_pos_backtraverse  0
  • Rpl_semi_sync_master_wait_sessions          0
  • Rpl_semi_sync_master_yes_tx                 0      ##表示成功接收slave回执的提交次数

————————————————————————-

【Slave】

安装插件

mysql>install plugin rpl_semi_sync_slave soname ‘semisync_slave.so’;

然后会出现下列2个参数:

  • rpl_semi_sync_slave_enabled OFF
  • rpl_semi_sync_slave_trace_level 32

动态设置rpl_semi_sync_slave_enabled =ON,然后重启replication(stop slave;start slave;)即可。记得一定要重启,否则master无法确认该slave是否开启了半同步。相同的操作可以在任意多个slave中进行设置。

show global status会出现下面的系统状态:

  • Rpl_semi_sync_slave_status ON   ##表示当前处于异步模式还是半同步模式
阅读(780) | 评论(0) | 转发(0) |
0

上一篇:MySQL提供的权限

下一篇:没有了

给主人留下些什么吧!~~