关系数据库的事务(transaction)是一组操作序列,比如读,插入,删除,更新等等。事务有四个基本要素,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability),即ACID:
事务的ACID特征是关系数据库区别于其他数据存储系统的根本点,也是金融、通信、交通、电力、商业等系统采用关系数据库的根本原因,这使得关系数据库成为了当今社会十分关键的信息基础设施,因此关系数据库系统的高可用至关重要。传统关系数据库的高可用机制主要是主备镜像,银行系统的两地三中心(主库+同城热备库+异地灾备库)是主备镜像的一种形式。
主备镜像的基本原理是:数据库主库提供读写服务(即执行事务),并同步事务日志(redo log)到备库,备库通过回放日志来保持与主库一致,通常情况下备库不提供服务,但备库可以升级为主库,比如主备切换或者主库因灾难无法恢复时升级备库为主库等,如下图:
image
数据库主备同步有三种模式:
以上分析发现主备镜像下数据库的主备一致性与可用性是冲突的,两者无法同时保证。本质的原因是传统关系数据库软件假设其所依赖硬件设备(服务器、存储等)是相当可靠的,其高可用完全依赖于这些可靠的硬件,数据库软件本身在高可用上其实是缺失的。
传统数据库软件本身高可用的缺失导致了以下的缺陷: