架构简介
高可用架构
在生产系统中,通常都需要用高可用方案来保证系统不间断运行,数据库作为系统数据存储和服务的核心能力,其可用要求高于计算服务资源。目前,数据库的高可用方案通常是让多个数据库服务协同工作,当一台数据库故障,余下的立即顶替上去工作,这样就可做到不中断服务或只中断很短时间;或者是让多台数据库同时提供服务,用户可以访问任意一台数据库,当其中一台数据库故障,立即更换访问另外数据库即可。
由于数据库中记录了数据,想要在多台数据库中切换,数据必须是同步的,所以数据同步技术是数据库高可用方案的基础。当前,数据复制有以下三种方式:
- 异步复制:应用发起更新(含增加、删除、修改操作)请求,Master 完成相应操作后立即响应应用,Master 向 Slave 异步复制数据。因此异步复制方式下,Slave 不可用不影响主库上的操作,而 Master 不可用有概率会引起数据不一致。
- 强同步复制:应用发起更新请求,Master 完成操作后向 Slave 复制数据,Slave 接收到数据后向 Master 返回成功信息,Master 接到 Slave 的反馈后再应答给应用。Master 向 Slave 复制数据是同步进行的,因此 Slave 不可用会影响 Master 上的操作,而 Master 不可用不会引起数据不一致。
注意:
使用“强同步”复制时,如果主库与备库之间网络中断或备库出现问题,主库也会被锁住(hang),而此时如果只有一个主库或一个备库,那么是无法做高可用方案的。因为单一服务器服务,如果故障会直接导致部分数据完全丢失,不符合金融级数据安全要求。
- 半同步复制:半同步复制是 google 提出的一种同步方案,其原理是正常情况下数据复制方式采用强同步复制方式,当 Master 向 Slave 复制数据出现异常的时候(Slave 不可用或者双节点间的网络异常)退化成异步复制。当异常恢复后,异步复制会恢复成强同步复制。半同步复制意味着 Master 不可用会有较小概率引起数据不一致。
常见高可用架构
- 共享存储方案:使用共享存储,如 SAN 存储。SAN 的原理是多台数据库服务器共享同一个存储区域,这样多台数据库都可以“读写”同一份数据。当主库发生故障时,第三方高可用软件把文件系统在备库上挂起,然后在备库上启动数据库即完成切换。
- 日志同步或流复制同步:数据库最常见复制模式,如 MySQL 数据库。每当写入数据,MySQL Master Server 将自己的 Binary Log 通过复制线程传输给 Slave,Slave 接收到 Binary Log 以后,依照 Binary Log 内容,写入相同数据到文件系统。目前 MySQL 已经提供:
- 异步复制:异步复制可以确保得到快速的响应结构,但是不能确保二进制日志确实到达了 Slave 上,即无法保障数据一致性。
- 半同步复制:(由 google 提供的同步插件)半同步复制对于客户的请求响应稍微慢点,在超时等情况下,会退化为异步,即基本保障数据一致性,但无法保证数据完全一致性。
- 基于触发器的同步:使用触发器记录数据变化,然后同步到另一台数据库上。
- 基于中间件的同步:系统不直接连接到底层数据库,而是连接到一个中间件,中间件把数据库变更发送到底层多台数据库上,从而完成数据同步。早几年,由于业务需求,数据库性能、同步机制等问题,某些软件开发商通常采用类似架构。
更多内容,请见:https://cloud.tencent.com/document/product/237/1057