背景
MySQL的Master-Slave结构提供了实现High Availability的基础,在实现上面通常使用client-proxy-db的三层架构,proxy不单单完成错误检测、实例切换等高可用功能,还可以实现sharding,即scale out。
MySQL Fabric就是Oracle想大力发展的proxy,这里主要介绍为了完成高可用的功能,MySQL 5.7做了哪些事情,我们是否可以使用,实现自己的proxy?
高可用组件
proxy完成高可用的功能,除了需要MySQL提供的master-slave的基础结构外,还需要:
- 在错误检测、进行实例切换时候,需要DB的只读功能,防止m/s双写。
- 在切换完成后,如何实现client重连,或者实现session维持,对client透明。
那么问题来了
- 如何保证切换?
当前MySQL版本提供了一个read_only的功能,通过添加global read lock和commit锁来实现,可以满足实现单点写入。
- client重连或者session维持?
client重连主要依赖client的API,检测connection的错误。而保持connection不断开,session维持怎么做?
MySQL 5.7增加的功能
- offline mode
offline mode不光实现了read only的功能,并且会断掉所有的非super用户的connection,并禁止重连。虽然官方文档中介绍是为了支持upgrade,但完全可以使用在切换的过程中。 2.session回放功能支持
client-server protocol对于response packet增加了对session state状态改变的支持,对于以下的session state变化:
- User-defined variables
- session-specific values for server variables
- Temporary tables that are created
- Prepared statements
- Current database response packet中会添加一个tracker标示其变化。 有了这个功能就可以容易实现session的回放功能,特别在load balance或者cluster环境中,把一个用户的connection迁移到另外一台实例上,来保持connection不断开,实现切换对client透明。
使用MySQL 5.7新增的这两个功能,可以帮助proxy实现DB高可用。
当前内容版权归 阿里云RDS-数据库内核组 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 阿里云RDS-数据库内核组 .