存储高可用通过数据复制,来实现数据冗余,进而实现高可用。
难点在于明确节点的职责、数据复制策略、如何处理意外(复制延迟、中断)。
双机架构
主备复制
备机不提供读写服务。当主机挂掉后,人工升级备机为主机。
一般用于内部系统,例如学生管理、员工管理等,数据变更频率低,可以人工方法补全。
主从复制
从机对外提供读服务。客户端需要感知主从关系,一些业务数据需在代码中到从机上读取,以分散主机读写压力。
一般用于读多写少的场景,例如 BBS、新网网站等。
双机切换
主备和主从的共性问题:主机故障后,无法自动切换,无法保证读写业务正常进行。这时需要用到双机切换(以主备为例,主从相似)。
思考点是:切换时机、切换策略、自动程度。
1、互连式
在主备的基础上,主和备之间多了一条“状态传递”通道。备机获取主机的状态,当主机有问题时,备机升级为主机。
2、中介式
和“互连式”相比,主备不直接相连,通过中介来传递状态信息。
3、模拟式
备机模拟客户端,像主机起读写请求,根据请求判断主机状态。
主主复制
两台均为主机,都对外提供读写服务,互相复制数据给对方。
主主复制限制比较多,要求“数据可以双向复制”。以下场景不行:
- 自增的数据 ID。例如在 A 注册用户,ID 为 99;在 B 注册了用户,ID 也为 99。同步数据时会发生冲突。
- 库存。例如在 A 上减少到 99,在 B 上减少到 98。
主要用于:临时性、可丢失、可复制的数据场景。例如 session、用户行为上报、日志等。
数据集群
双机架构和数据集群的关系
双机架构只考虑特定数量的主机,假设前提是主机本身的能力够用。
但是单机本身是有瓶颈的。突破单机瓶颈,就要用到数据集群了。
数据集中集群
类似主备、主从,是 1 主多备,或者 1 主多从。
需要考虑的问题:
- 复制策略:多个备机,复制压力大;备机可能数据不相同,需要校验一致性和修正。
- 主机状态:多台备机对主机进行状态检测,需要考量结果不同时如何判断。
- 主机故障:如何选取新的主机
常见场景:数据量不大、数据机器不多。例如 ZooKeeper
集群(5 台左右)
数据分散集群
类似于主主,由多个服务器组成,每台都会存储部分数据。
需要考虑的问题:
- 数据分布均衡
- 服务容错:故障时,分配给故障服务器的数据要分配给其他服务器
- 可伸缩
常见场景:数据庞大、机器庞大。例如 Hadoop
集群、 HBase
集群(百台起步)。
集中集群和分散集群中的“主机”
集中集群:承担读写业务
分散集群:负责执行数据分配算法,类似于管理员。
数据分区
数据分区的作用
所站角度更高,主要应对大型灾难和事故。
一个系统有多个分区,每个分区下可以有自己的集群。
集中式
集中式备份指存在一个总的备份中心,所有的分区都将数据备份到备份中心。
设计简单,扩展容易,但是独立备份成本性能要求高,成本高。
互备式
互备式备份指每个分区备份另外一个分区的数据。
设计复杂,扩展麻烦(需要修改指向),但是成本低,利用已有设备。
独立式
独立式备份指每个分区自己有独立的备份中心。
设计简单,扩展容易,比集中式成本更高。