解决的问题:
存储的高可用
主要思路
复制备份/冗余
主要问题
- 数据如何复制
- 节点的职责
- 如何应对复制延迟
- 没有好的解法,必然存在
- 如何应对复制中断
- 也比较复杂,需要记录复制的位置,参考mysql的binlog复制
架构模式
主备
备库在正常情况下,只是备份数据,不承担任何读写操作。
主库异常时,人工切换到备机器,承担读写
主从
主库负责读写,从库负责读;数据从主库 复制 到 从库
双机切换
在主备/主从的基础上增加切换功能。切换能力必须考虑的点:
主备间状态的判断
状态传递的渠道:主备之间互联传递状态,还是采用中间机器传递状态
状态检测的内容:机器是否掉电,进程是否存在,响应是否变慢;这个决定主机器是否可用
切换决策
- 切换时机:什么时候该切换到备机?机器掉电?主机响应时间超过xx
- 切换策略:原来的主机故障恢复后,是重新切换它作为主机,还是继续备机
- 自动程度:直接系统切,还是系统决策,人工切
数据冲突解决
- 原来的主机写入了一条ID为100的数据,此时主机故障了,还未复制到备机,备机升级为主机,新的主机又写入了一条ID为100的数据。当旧主机恢复后,有两条ID为100的数据
架构方式
互联式
- 主备直接建立状态传递通道
中介式
- 通过中介机器决定主备,主备机器均与中介机器链接
模拟式
- 备库通过模拟发送读写请求以获取主机的状态
主主
两个机器都是主机器,承担读写操作,数据双向复制。一般不用。弊端:
有些数据是不能双向复制的:比如库存数据