存档

‘MySQL HA’ 分类的存档

lbmysqlping (LegendBase MySQL Ping)

2012年6月1日 谭俊青 3 条评论

lbmysqlping (LegendBase MySQL Ping) is a tool that does MySQL service availability check for MySQL HA solution.

Of course, it could be used to monitor MySQL servers availability. If some server down, LBMySQLping will run “Down” command that could send email or message to your mobile.

有不少朋友在做MySQL数据库高可用(Heartbeat,keepalived)和主从负载均衡(LVS,F5,A10等)的时候都面对MySQL服务可用性检测的问题.

检测可用性面对的几个问题不太容易解决:

  • 端口能连上,但是SQL语句很可能无法执行,其实这时候MySQL服务是不可用的
  • 连上了,SQL语句执行堵塞,长时间不能返回,因为MySQL是堵塞式的
  • MySQL Slave延时太大,应该从路由表里面清除

而且我了解到的有不少人都是用检测端口的方法,这是有风险的.

今天贡献的lbmysqlping通过可配置的方式,能够灵活的对MySQL服务进行检测,如果出现异常\超时或者Slave延时超过配置大小,可以执行指定的失效命令,当服务恢复可用的时候又可以执行恢复命令.

另外lbmysqlping还可以做简单的报警系统,配置好默认信息后,其他realserver 只需要配置ip地址即可,如果端口不一样,改下端口。然后在down命令和up命令里面填上相关的脚本或者报警程序,这样一个简单的MySQL服务可用性报警系统就出来了,简单、高效。

配置文件格式如下:

【阅读全文·MySQL实验室】

致歉好耶开发人员

2010年8月3日 谭俊青 3 条评论

在这里给好耶参加MySQL性能调优培训的朋友们致歉。继上上周培训课程结束之后,因个人原因,未能继续给大家上课,还让大家在周六等了那么长时间,向大家说声:“对不起”。

PS1: 陆续有朋友问及MySQL高可用方案,这里提下:当前MySQL高可用方案自动化程度和靠谱的算是DRBD和Semi-sync-replication。在此基础上扩展slave做负载均衡(比如lvs)需要注意,另外需要monitor监控Slave状态,及时将失效节点从pool中剔除。

PS2: 这次有个项目,因为开发过程中经历了大量的需求变更,开发人员为了方便,采用了大量试图,导致后续出现严重问题(SQL查询时间过长),而在此基础之上做SQL调优能发挥的地方有限,所以开发的同志们注意了,在涉及到web开发,特别是对页面响应时间要求很高的时候,避免复杂join操作,适当添加冗余字段。救急办法:将涉及到的中间试图换成base表,在原始表上添加触发器。

PS3:前几天又有朋友问到session管理,我给的方案还是用 MySQL Cluster NDB 管理,其中我还发布过一个PHP 实现的 DbSession类,为了提高性能可以不记录任何日志信息(重启之后数据消失),”SET GLOBAL ndb_table_no_logging = 1;”。

PS4:据说这个是史上最牛的MySQL补丁,非堵塞是的网络IO,可以让32核心的机器跑上18万QPS。

MySQL分布式集群高可用设计及应用

2010年4月6日 谭俊青 3 条评论

前2天去北京参加了2010数据库技术大会, 我演讲的主题是:《MySQL分布式集群高可用设计及应用》,主要是介绍MySQL Cluster,现在把PPT共享出来。

【阅读全文·MySQL实验室】

Two-phase commit(2PC) protocol 与MySQL Cluster

2010年3月20日 谭俊青 没有评论

Two-phase commit(两阶段提交, 文中用2PC代替)是一种比较精简的一致性算法/协议。在事务处理、数据库和计算机网络中,两阶段提交协议提供了分布式设计中的数据一致性的保障,整个事务的参与者要么一致性全部提交成功,要么全部回滚。MySQL Cluster内部数据的同步就是用的2PC协议。 by ivan@mysqlab.net

故名思意,2PC算法包含两个阶段:commit-request 和 commit。

第一阶段(commit-request): 组织者(coordinator)负责询问事务的所有参与者(participants)是否可以提交或者取消事务(回滚)。 这就好比班长组织班级所有同学某时间参加班级大会一样,要么所有人都参加,要么取消会议。 … 【阅读全文·MySQL实验室】

MySQL Cluster致命缺点

2010年1月19日 谭俊青 1 条评论

mysql cluster components
  最近一直在学习研究MySQL Cluster,今天正好也看到消息说支付宝在测试IBM DB2 Cluster,16个数据居节点,1个管理节点,采用万兆网卡连接。DB2 Cluster跟MySQL Cluster采用同样的share-nothing构架,网络对它来说至关重要。

  但是我这里要说的是,虽然MySQL Cluster发展到今天已经取得很大的成就,性能翻了好几倍,也开始支持磁盘存储(非主键、索引),但是它有致命的弱点:不支持真正的ACID(整个机群down掉的时候,最新GCP之后提交的事务丢失).

  话说回来,虽然缺点还不止上面提到的这些,在很多情景下不适合使用,但是不可否定它的高明。在高可用和写负载均衡上它的确是性价比很高的解决方案,比如session管理、用户管理等。

MySQL Cluster DBA 证书

分类: MySQL, MySQL Cluster, MySQL HA 标签:

MySQL 5.5 Released(非GA)

2009年12月16日 谭俊青 没有评论

  MySQL 5.5第一个版本释出,基于MySQL5.4,性能相对于当前MySQL5.0、5.1有很大的提升,更让人可喜的是MySQL5.5内置了Google的半同步(semi-sync-replication)补丁,以此可以搭建一个相对来说比较完美的MySQL高可用方案,之前我已经在“MySQL新版(5.x)及特性”中提到过,很是让人期待!

MySQL半同步流程设计图

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 标签:

MySQL Cluster Geographic Replication Deep-Dive

2009年12月2日 谭俊青 没有评论

geographic-replication-deep-dive(PDF)下载

其中异构复制的时候有些技巧,比如 不同的mysqld只复制一部分表,从而避免延时的出现。

google patch v4 for mysql

2009年5月31日 谭俊青 没有评论

下载地址: 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 标签:

MySQL 5.4的新特性解析

2009年4月23日 谭俊青 4 条评论

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 标签:

Drizzle Client & Protocol Library

2009年4月20日 谭俊青 没有评论

之所以我比较关注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 标签:

OnlineDataDrift 主从数据一致性校验

2009年4月14日 谭俊青 2 条评论

对于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 标签:

mysql ha 相对完整的方案快要面世了

2009年4月3日 谭俊青 11 条评论

方案采用google的replication semi-sync patch 保证数据的一致性
A <-> B 互成salve
写针对vip 由 heartbeat / keepalive 控制
负责服务监控是自己写的一个daemon,当监控到服务不可用时,让heartbeat / keepalive 切换vip 到backup上,backup 接管之后,应用完日志即可启用对外服务。

当然,当中有很多细节,比如如何判断服务可用性以及切换之后什么条件下才能让backup接管,保证数据的完整。
以及在原来的master起来之后,让它成为当前db的backup…

周末整理,然后发布出来,算是下周的任务文章。

分类: MySQL HA 标签: