阿里云数据库基本架构
上图展示的是阿里云数据库的基本架构(share-nothing)。该结构采取一主一从的备份方式保证可靠性,其中 Proxy代理客户端所有读写数据库请求,HA为执行健康检查策略的主机,M为主数据库,S为从数据库。
一般数据读写过程
主备库之间的数据读写过程大致分为三类:
- 异步模式:主库收到commit 请求后,依次执行:写redo log prepare,写入binlog,写redo log commit,向客户端返回成功。
- 半同步模式:主库收到commit 后,依次执行 redo log prepare,写binlog/发往从库(两个步骤并行),等待从库回复收到ack,redo log commit,向客户端返回成功。
- 强同步模式:主库收到commit 后,依次执行 redo log prepare,写binlog/发往从库(并行),等待从库将数据刷新到磁盘后,redo log commit,向客户端返回成功。
健康检查机制
在Share-Nothing结构中,HA通过心跳链接获取Proxy,M和S健康状态信息,心跳链接通过执行update语句对MySQL实例的VIP和IP进行检测。心跳检测成功后,HA将主库的时间戳信息保存到本地,同时更新主从库各自的心跳表,让从库同步到主库的时间戳。放发生切换时,通过对比HA本地与备库的时间戳信息,获得备库大致的延迟时间,作为延迟的主要判断依据。
主库故障
一般而言,MySQL 不可用的原因有几下几类:
- 1、主机硬件损坏,导致主机挂起,或者操作系统崩溃。此时客户端连接主机上的MySQL进程时的表现是连接超时。因为不会回复ack包。此种情况与网络中断不能回包的表现是一样的,所以对于外部是无法判