解决的问题:

存储的高可用

主要思路

复制备份/冗余

主要问题

  • 数据如何复制
  • 节点的职责
  • 如何应对复制延迟
  • 没有好的解法,必然存在
  • 如何应对复制中断
  • 也比较复杂,需要记录复制的位置,参考mysql的binlog复制

架构模式

主备

备库在正常情况下,只是备份数据,不承担任何读写操作。
主库异常时,人工切换到备机器,承担读写

主从

主库负责读写,从库负责读;数据从主库 复制 到 从库

双机切换

在主备/主从的基础上增加切换功能。切换能力必须考虑的点:

  • 主备间状态的判断

  • 状态传递的渠道:主备之间互联传递状态,还是采用中间机器传递状态

  • 状态检测的内容:机器是否掉电,进程是否存在,响应是否变慢;这个决定主机器是否可用

  • 切换决策

    • 切换时机:什么时候该切换到备机?机器掉电?主机响应时间超过xx
    • 切换策略:原来的主机故障恢复后,是重新切换它作为主机,还是继续备机
    • 自动程度:直接系统切,还是系统决策,人工切
  • 数据冲突解决

    • 原来的主机写入了一条ID为100的数据,此时主机故障了,还未复制到备机,备机升级为主机,新的主机又写入了一条ID为100的数据。当旧主机恢复后,有两条ID为100的数据

架构方式

  • 互联式

    • 主备直接建立状态传递通道
  • 中介式

    • 通过中介机器决定主备,主备机器均与中介机器链接
  • 模拟式

    • 备库通过模拟发送读写请求以获取主机的状态

主主

两个机器都是主机器,承担读写操作,数据双向复制。一般不用。弊端:
有些数据是不能双向复制的:比如库存数据