常见的高可用存储架构
- 主备复制
- 主从复制
- 主主负载
- 数据集群
- 数据分区
1. 主备复制
缺点:备份机无读写操作,硬件成本有浪费,故障后需要人工干预,否则无法自动恢复
2. 主从复制
主写、从读,适合读多写少的系统,一般读是写的10倍甚至100倍以上
主备与主从区别
- 主从再主机发生故障时,从仍然可以读,对其相关的读操作业务不影响
- 主从复制,主写从读,发挥了硬件的功能
- 主从更复杂,主要体现在客户端需要感知主从关系,并将不同的操作发送给不通的机器进行处理
主备倒换与主从倒换
- 倒换时机:多少时间从自动转换为主
- 倒换策略:从生主,主恢复后是否新主切换回备等
- 自动程度:自动倒换还是半自动
倒换架构的形式
互联式:主备互相专递状态
中介式:主备将状态上报给中介,如MongoDB的Replica Set,Apache Hadoop下的Zookeeper,使用Zookeeper来做状态同步
模拟式:备模拟客户端调用主,根据相应信息判断,但可能出现偏差。
3、主主复制
- 主主复制架构对数据的设计有严格的要求,一般适用于那些临时性、可丢失、可覆盖的数据场景。
如session、用户的行为日志、轮草的草稿数据
4、数据集群
对称集群,也叫负载均衡集群
非对称集群,如master-slave
- 数据集中集群
一主多备,一主多从
问题
1. 主机如何将数据复制给备机
2. 备机如何检测主机状态
3. 主机故障后,如果选择新的主机
以Zookeeper为典型,Zookeeper通过ZAB协议来解决上述的几个问题 - 数据分散集群
多个服务器组成一个集群,每台服务器多会负责存储一部分数据,同时为了提高硬件利用率,每台服务器又会备份一部分数据。
- 复杂点在于如何将数据分配到不同的服务器上,算法需要考虑:均衡性、容错性、可伸缩性
数据集中集群与数据分散集群差异
- 数据集中集群:客户端只能将数据写到主机中,其他从机从主机同步数据
- 数据分散集群,客户端可以向任意服务器中读写数据
正因为这样关键的差异,决定了两种集群的应用场景不同
- 数据集中集群适合数据量不大,集群机器数量不多的场和
- 如Zookeeper集群,一般推荐5台服务器左右,数据量是单台服务器就能支撑
- 数据分散集群:由于零号的可伸缩性,适应业务数据量巨大,集群机器数量庞大的业务场景
- 如hadoop、habase集群,大规模的集群可以达到上百甚至上千台服务器
分布式事物算法
数据可能分布在冉的集群节点上,节点之间只能通过消息进行通信
- 2PC:二阶段提交
- 一个节点作为协调者,其他节点作为参与者
- 所有节点采用预写式日志
- 所有节点不会永久性损坏,即使损坏,仍然可以恢复
第一阶段:提交请求阶段
第二阶段:提交执行阶段
缺点:同步阻塞,状态不一致,单点故障
- 3PC:3阶段提交
- 第一阶段,提交判断阶段
- 第二阶段,准备提交阶段
- 第三阶段,提交执行阶段
分布式一致性算法
保证所有节点的数据都一致
- Paxos.被理论上证明为正确的算法
- 多数一致性,不是全体一致性
- client发起的请求可以是任何操作,读,写
- 算法中的角色(Proposer,acceptor,learner,leader)是裸机上划分,不是集群上的物理节点要这样划分。
- Raft,为了工程实践而设计的
- Leader选举
- 日志复制
- 安全保证
- ZAB(Zookepper Atomic Broadcast Protocol)
Paxos、Raft、ZAB差异就是复制的方式
- Paxos和Raft采用static machine replication,或active replication,主动复制,直接传递,节点自己执行操作
- ZAB采用primary backup或passive replication 被动复制,直接将执行结果复制给其他节点
5、 数据分区
- 分区规则:洲际分区,国家分区,城市分区
- 复制规则
- 集中式,一个总的备份中心
设计简单
扩展容易
成本较高 - 互备式:每个分区备份另一个分区的数据
设计比较复杂
扩展麻烦
成本低 - 独立式:每个分区均有自己的备份中心
设计简单
扩展容易
成本高