程序员必备!关系型数据库架构的超强总结

来自: OceanBase技术闲谈
1. 前言本文总结一下接触过的关系型数据库常用的几种架构及其演进历史 。
分析数据库架构方案的几个视角用发生故障时的高可用性、切换后的数据一致性和扩展性 。每个产品都还有自己独特的优势和功能 , 这里不一定会提到 。
2. Oracle数据库的架构方案ORACLE数据库既能跑OLTP业务 , 也能跑OLAP业务 , 能力是商业数据库中数一数二的 。支持IBM小机和x86 PC服务器 , 支持多种OS 。同时有多种数据库架构方案供选择 , 成本收益风险也各不相同 。
A. IBM AIX HACMP + ORACLE9I + EMC

程序员必备!关系型数据库架构的超强总结

文章插图
图 1 :IBM AIX HACMP + ORACLE9I + EMC
架构说明:
1. 两台IBM AIX A和B 。AIX A运行Oracle Primary实例 , AIX B分出部分资源虚拟一个OS C , 运行Oracle Standby实例 。AIX B剩余大部分资源空闲 , 用于未来起另外一个OraclePrimary实例 。
2. 两台存储(EMC只是举例)A和B , 分别直连两台AIX A和B 。存储A存放Primary实例的日志和数据 , 也存放Standby实例的Redo(图中未画出 , 只有在角色未Primary时有效) 。存储B存放Standby实例的日志和数据 , 也存放Primary实例的Redo文件 。
3. AIX也可以换普通的x86_64 PC服务器 , HACMP换为支持linux的集群软件 。如Veritas HA 。
功能:
1. 高可用:Oracle Primary实例不可用时 , HACMP起用AIX B上的Oracle Primary实例 。存储A不可用时 , 将AIX C上Standby实例Failover为Primary实例 。
2. 数据一致性:Redo文件在两个存储上都有保留 , Standby实例在Failover之前应用Primary的Redo , 理论上即使是Failover也不丢数据 。
3. 扩展性:数据库性能由主机aix和存储能力决定 , 都可以向上扩展 , 成本会陡升 , 且有上限 。
B. x86 + ORACLE RAC + EMC
程序员必备!关系型数据库架构的超强总结

文章插图
架构说明:
1. 两台主机A和B可以是AIX , 也可以是x86_64普通PC服务器 , 彼此网络直连 , 同时连接共享的存储EMCA , A和B分别运行一个RAC Primary实例 。
2. 主机C可以是AIX或x86_64普通PC服务器 , 直连另外一个存储B , 运行Standby实例 。也有的架构会有多个Standby实例 , 其中一个Standby实例也是RAC 。
功能:
1. 高可用:Oracle RACPrimary实例无论哪个不可用 , 另外一个都可以自动接管服务 。如果Primary实例的存储A不可用 , 则将Standby实例Failover为Primary实例 。
2. 数据一致性:如果Primary实例也将一组Redo 成员输出到B存储 , 则理论上可以绝对不丢数据 。否则 , 极端情况下 , Failover可能会因为缺少Primary的事务日志而失败 , 此时直接激活Standby实例为Primary实例 , 可能会丢失少量数据 。
【程序员必备!关系型数据库架构的超强总结】3. 扩展性:数据库计算能力不足可以水平扩展(添加RAC节点) , 存储能力不足可以向上扩展(存储扩容) 。
C. Oracle Dataguard 共享Redo
程序员必备!关系型数据库架构的超强总结

文章插图
架构说明:
1. 普通x86服务器A和B , 分别运行Oracle的Primary和Standby实例 。彼此网络直连 , 同时连接一个共享存储 。
2. Primary和Standby实例的Redo和控制文件、spfile都放在共享存储上 , 所以占用空间非常小 。数据文件放在本机上 , 通常是高速存储(如SSD或者PCIE接口的Flash设备) 。
功能:
1. 高可用:当Primary实例不可用时 , 将Standby实例Failover为Primary实例 。如果共享存储不可用 , 则两个实例都不可用 。通常会有第三个Standby实例 。
2. 数据一致性:Standby实例在Failover之前应用Primary实例的Redo文件 , 不丢失事务日志 , 数据强一致 。
3. 扩展性:无 。
3. MySQL数据库的架构方案A. ADHA (Alibaba Database High Availability)
程序员必备!关系型数据库架构的超强总结

文章插图
架构说明:
1. 使用MySQL Master-Master架构 , 双向同步 , Slave只读 。
2. 使用Zookeeper集群做实例不可用监测和防止脑裂 。
功能:
1. 高可用:Master实例不可用后 , 将Slave激活 。可用性优先 。如果Slave延时超出一定阀值 , 放弃切换 。zk集群三节点部署 , 可以防止脑裂 。


推荐阅读