
最近一直在学习研究MySQL Cluster,今天正好也看到消息说支付宝在测试IBM DB2 Cluster,16个数据居节点,1个管理节点,采用万兆网卡连接。DB2 Cluster跟MySQL Cluster采用同样的share-nothing构架,网络对它来说至关重要。
但是我这里要说的是,虽然MySQL Cluster发展到今天已经取得很大的成就,性能翻了好几倍,也开始支持磁盘存储(非主键、索引),但是它有致命的弱点:不支持真正的ACID(整个机群down掉的时候,最新GCP之后提交的事务丢失),不支持在线热备(备份的时候需要停止其他请求–single user mode,防止备份数据损坏)…
话说回来,虽然缺点还不止上面提到的这些,在很多情景下不适合使用,但是不可否定它的高明。在高可用和写负载均衡上它的确是性价比很高的解决方案,比如session(Ivan)管理、用户管理等。
这几天要考试,等过阵子陆续写一些有关MySQL Cluster的文章,做下MySQL Cluster的普及和推广。
谭俊青 MySQL, MySQL Cluster, MySQL HA
MySQL 5.5第一个版本释出,基于MySQL5.4,性能相对于当前MySQL5.0、5.1有很大的提升,更让人可喜的是MySQL5.5内置了Google的半同步(semi-sync-replication)补丁,以此可以搭建一个相对来说比较完美的MySQL高可用方案,之前我已经在“MySQL新版(5.x)及特性”中提到过,很是让人期待!

MySQL半同步流程设计图
半同步的配置很简单:
master > INSTALL PLUGIN rpl_semi_sync_master SONAME ‘libsemisync_master.so’;
slave-x > INSTALL PLUGIN rpl_semi_sync_slave SONAME ‘libsemisync_slave.so’;
master > SET GLOBAL rpl_semi_sync_master_enabled=1;
slave-x > SET GLOBAL rpl_semi_sync_slave_enabled=1;
对于半同步需要说明的是:
1:不需要所有的slave都确认接收到复制事件
2:slave确认并不是表示执行完成
3:如果slave没有跟上同步设置将被中断继续原来的异步模式直到跟上再重新开启
注意:当前MySQL5.4, MySQL5.5都还不是GA版本,生产环境请慎重选择,升级前也请备份好数据。
谭俊青 MySQL HA, MySQL Replication
下载地址: http://google-mysql-tools.googlecode.com/svn/trunk/mysql-patches/all.v4-mysql-5.0.37.patch.gz
Features
- displays more data in SHOW INNODB STATUS and SHOW STATUS including per-file IO statistics
- uses less CPU while processing background IO requests
- enforces innodb_max_dirty_pages_pct
- prevents the insert buffer from getting full (and becoming useless)
- changes the main background IO thread to be simpler and use more asynchronous IO
- adds many my.cnf variables
- Reimplements adaptive checkpoints as first described by Percona
- Changes the computation of the percentage of dirty buffer pool pages. Before this change the percentage exluded pages borrowed from the buffer pool for other uses. While that may be more accurate, it also requires the caller to lock/unlock a hot mutex. It also made the percentage vary a bit too much as the insert buffer grew and shrank. The v4 patch doesn’t exclude the borrowed pages. As most of the borrowed pages should be used in the insert buffer and the insert buffer should be smaller (thanks to ibuf_max_pct_of_buffer), this is probably a good thing.
Performance
谭俊青 MySQL, MySQL HA
Author: Ivan@mysqlab.net/谭俊青 转载请注明来源URI链接:
http://www.mysqlab.net/blog/2009/04/mysql-54的新特性解析/
MySQL 5.4 之所以命名为5.4,而不是5.2 是因为之前的5.2版本被命名为6.0了(这个应该是商业上的原因,就像java1.6被命名为6.0)。现在的5.4 preview release 是在当前MySQL5.1的基础上,对 Innodb 进行了一些优化,这些补丁来自google,包括:InnodbIoTuning, InnodbAsyncIo, InnodbStatus , NewShowInnodbStatus , SmpPerformance 等。
从所打的那些补丁,我们可以看出,对innodb做了很多优化,特别是io的优化和smp多核cpu的优化。
下面就一些新增参数和默认值的更改做些说明:
innodb_io_capacity
这个在之前的innodb版本中是被写死的,默认值是100,在5.4中默认值已经改成200。
innodb_extra_dirty_writes
这个是非常有用的一个特性,当服务器资源idle的时候,会做checkpoint,将脏数据页写入表空间,及时没有到达设置的比例(innodb_dirty_pages_pct,innodb_max_dirty_pages_pct)。
innodb_buffer_pool_size
默认值由原来的8M改为1G,其实在大些的db中,这个还是远远不够的。可以将1半,甚至2/3的内存用在这上面。
innodb_log_file_size
默认值增至128M 在磁盘性能好些的机器上,应该还要增加,配合innodb_dirty_pages_pct, 以实现更加好的性能。
innodb_thread_concurrency
Innodb中的并发控制参数,默认值由8改0,这个都得以于google的smpperformance补丁,以前并发超过8时,性能基本上会下降。
另外需要提醒的是:目前MySQL5.4还是preview release,不建议用于生产环境。
谭俊青 MySQL, MySQL HA
之所以我比较关注libdrizzle是因为其兼容mysql协议,并且支持非堵塞执行sql,我的mystate.monitor正好需要。
另外它是BSD协议的,支持多server并发处理等
原文:http://www.oddments.org/?p=38
目前是0.2版本,下载地址:https://launchpad.net/libdrizzle/+download
编译:http://drizzle.org/wiki/Compiling#libdrizzle
api调用在源码里面有examples,非常cool!
谭俊青 MySQL, MySQL HA
对于mysql主从数据一致性一直是大家所关注的,但是苦于没有很好的解决办法,google提供了一个非常好的补丁 OnlineDataDrift
这个补丁的原理:
针对每张表会产生一个checksum的校验sql序列,然后执行它们,并将结果插入到特定表中。
同时这些执行的sql语句会被写入到binlog,从而会在所有slave的同一个status点上执行,也将结果插入到特定表中
当这些sql执行完之后,会比较这些特定的记录,从而找出不一致的数据。
reference: http://code.google.com/p/google-mysql-tools/wiki/OnlineDataDrift
谭俊青 MySQL HA, MySQL Replication
方案采用google的replication semi-sync patch 保证数据的一致性
A <-> B 互成salve
写针对vip 由 heartbeat / keepalive 控制
负责服务监控是自己写的一个daemon,当监控到服务不可用时,让heartbeat / keepalive 切换vip 到backup上,backup 接管之后,应用完日志即可启用对外服务。
当然,当中有很多细节,比如如何判断服务可用性以及切换之后什么条件下才能让backup接管,保证数据的完整。
以及在原来的master起来之后,让它成为当前db的backup…
周末整理,然后发布出来,算是下周的任务文章。
谭俊青 MySQL HA MySQL HA
最近评论