高可用的本质就是通过冗余来实现,存储的高可用是存储数据价值与存储代价之间的综合考量。数据冗余主要涉及到数据之间的复制,以及复制过程中需要考虑的多种问题,整合即为以下四点:
1.数据如何复制
2.各个存储节点的职责
3.如何应对复制延迟
4.如何应对复制中断
以下针对业界一些通用的方案:
主备复制:
方案:基本就是对主机的存储数据,通过一定的规则复制到备机进行缓存。(比主备复制还要low一些的是定时备份,也就是定时(如每晚业务少的时候),对主机数据进行定时备份到异地机器上。)
优点:设计简单,无需考虑状态。几乎所有的存储系统都提供了主备复制策略,缺点:备机只有在故障的时候才有用,浪费硬件成本。故障后还需要人工干预恢复,无法自动恢复。
主从复制:
方案:和主备的区别就是从机提供读操作,但是不提供写的操作。对外提供查询服务,因为从机也对外提供服务那么我们就必须在数据复制时候进行一定的监控,当延迟过高时候,需要人工干涉解决。
主从与主备相比具有如下
优点:
1.主从复制在主机故障时,读的相关业务不受影响。
2.从机也对外提供服务,发挥了硬件性能
缺点:
1、 需要考虑主从复制的数据延迟造成的业务影响,可能出现查询异常。
2、 就是引入了新的复杂度,主要体现在客户端需要感知主从关系,并将不同的操作发给不同的机器进行处理
主备倒换与主存倒换:
主备和主从方案存在两个共性问题:
1.主机故障后,无法提供写操作
2.如果主机无法恢复,需要人工指定新的主机角色。
要实现一个完善的倒换方案,我们需要考虑如下几个关键的设计点:
(1)主备间状态判断
状态传递的渠道,是相互连接还是三方仲裁
状态检测的内容,如机器是否掉电,进程是否存在,响应是否缓慢等
(2)倒换决策
倒换时机-什么情况下备机或从机升级为主机(3分钟连续重启3次,响应超过2秒等等策略)
倒换策略-原来的主机恢复后是做从机还是继续倒换为主机?
自动程度-是否需要人工确认
(3)数据冲突解决
比如新增数据的主键冲突,必须要分析现有的业务场景做出一定的应对
常见的架构
1.互联式
相比主备架构在此基础上多了状态传递的通道,客户端为了在倒换后正常访问,因为主备之间共享一个对客户端来说唯一的IP地址,比如虚拟IP。这种策略的劣势主要表现在如果主机没有故障,但是状态通道故障了,那么备机会升级为主机,那么就有可能出现双主机的情况。
2.中介式
引入第三方中介来进行 状态传递。通常的zookeeper是比较常用的中介
优点:
1) 链接管理更简单
2) 状态决策更简单
3.模拟式
核心思想就是备机模拟陈一个客户端,向主机模拟读写操,根据读写操作的响应来探测主机的状态
优点:实现起来较为简单,成本低,
缺点:因为基于HTTP连接所以状态信息比较匮乏,比如不能检测cpu负载、i/o负载等。
主主复制
方案:两台都是主机,互相将数据复制给对方
优点:都是主机 ,不存在倒换;客户端不需要因为读写进行区分
缺点:必须保证数据能够双向复制,一般处理业务上可以覆盖,可丢失的数据,比如session,用户行为日志,论坛的草稿数据等。
数据分区
指将数据按照一定的规则进行分区,不同分区分布在不同的地理位置上,规避地理灾害造成的数据丢失问题。通常有如下三种复制策略:
1.集中式(北京,上海,广州)-----西安备份中心 特点扩展容易,成本高
2.互备式(北京-上海,上海-----广州) 特点设计扩展麻烦,成本低
3.独立式(北京-天津,上海-杭州) 特点扩展容易,成本高