高可用架构
Feb 5, 2022 22:30 · 1463 words · 3 minute read
高可用存储架构
常见的高可用存储架构:
- 主备
- 主从
- 主主
- 集群
- 分区
1. 主备
备机平时不承担实际的业务读写,需要人工操作将备机升级为主机。
- 优点:
- 备机升级为主机对客户端透明
- 主备之间只需要复制数据,无需状态判断和主备切换
- 缺点:
- 备机平时不提供读写,浪费硬件和算力
- 故障需要人工干预,容易翻车
2. 主从
主机可读写,从机只读。
- 优点:
- 主机故障不影响读操作
- 从机提供读操作,对硬件有一定的利用率
- 缺点:
- 客户端需要感知主从关系,写操作不能发送给从机
- 主从复制延迟会导致数据不一致
- 故障需要人工干预
适合写少读多的业务:论坛、BBS、新闻网站
3 主备/主从切换
主备/主从共同存在的问题:
- 主机故障后无法进行写操作
- 发生故障需要人工干预
由系统自动决定角色并实现切换。
3.1 关键点
- 主备/主从间状态判断
- 状态传递渠道:
- 互连
- 连接至第三方中介
- 状态检测:
- 机器是否挂了
- 进程是否挂了
- 响应速度
- 状态传递渠道:
- 切换决策
-
切换时机
- 主机挂了
- 主机上进程挂了
- 主机响应过慢
-
切换策略
主机故障恢复后
- 再次切换成为主机
- 成为备机
-
自动程度
- 全自动
- 半自动(需要人工确认)
-
- 解决数据冲突
3.2 架构
3.2.1 互连
主备/主从机之间直接建立状态传递通道。
状态传递通道实现:
- 网络连接/串口连接
- 主机主动发送给备机/备机从主机拉取状态信息
- 共用数据复制通道/独立通道
主备机绑定虚拟 IP,对客户端透明。
主要缺点:状态传递通道故障会导致脑裂。
3.2.2 中介
主备/从机将状态上报给中介,通过中介传递状态信息。
状态决策:
- 所有节点初始状态都是备机,只要与中介断开连接就降级为备机
- 主机与中介断连后,中介能够告知备机,备机升级为主机
- 原来的主机恢复后,以备机的身份向中介上报状态,新的主机不会降级
关键在于实现中介的高可用,选用成熟的方案:
- keepalived
- ZooKeeper
- etcd
3.2.3 模拟
备机模拟客户端向主机发送读写操作,根据读写操作的响应情况来判断主机的状态。
- 优点:实现简单,不需要状态传递通道
- 缺点:响应状态有限,可能有偏差
- HTTP 状态码
- 超时
4. 主主
主要优点:
- 两台都是主机,不用切换
- 客户端读写操作随便发送给其中一台即可
实现数据双向复制,但是有很多数据是不能双向复制的。
适合临时性、可丢失数据、数据可被覆盖的业务:用户登录产生的 token,内容草稿数据
5. 集群(两台以上)
- 复制集群:数据量不大,集群节点数量不多
- 切片集群:业务数据量巨大,集群节点数量庞大
5.1 复制集群
1 主 N 备/从
只有主机可读写,备/从机只读。
关键点:
- 主机如何将数据复制给备/从机
- 主机如何检测备机状态
- 如何从多台备/从机中选出新的主机
5.2 切片集群
数据分散到不同的服务器上,每个服务器只存储一部分数据,而且备份一部分数据。
关键点:
- 数据分配均衡
- 当部分节点故障,要将分配给故障服务器的数据重新分配给其他节点
- 扩充服务器后自动将部分数据迁移至新节点
切片集群中的所有节点都可以处理读写请求,需要某个组件来负责数据分配。
- 使用一台独立的服务器(Hadoop)
- 选举出集群中的某个节点(Elasticsearch)
6. 分区
应对地震、火灾等极端灾难事故。 将数据分布在不同的地理位置(城市)上,每个分区存储一部分数据。
6.1 分区规则
-
洲际分区
网络延迟很大,一般仅用作备份
-
国家分区
不同国家有不同语言、法律、业务等,一般也仅用作备份
-
城市分区
网络延迟较低,分区可以同时对外提供服务
6.2 复制规则
分区的数据量也不小,如果被破坏同样损失惨重,需要考虑复制方案。
-
集中式
所有分区的数据都备份到同一个备份中心。
- 设计简单
- 扩展容易,新增分区的数据同样复制到备份中心
- 成本高
-
互备式
每个分区备份另外一个分区的数据。
- 设计复杂,每个分区除了存储业务数据,还要存储备份数据
- 扩展麻烦,要迁移备份数据
- 成本低
-
独立式
每个分区自己有独立的异地备份中心。
- 设计简单
- 扩展容易
- 成本最高