复制
存储高可用的方案,都是通过复制来实现的。如何复制、故障转移、复制延迟等问题是高可用解决方案需要思考的。
高可用不包括一致性,如Redis哨兵模式是高可用的,但是主从切换时可能会丢数据。
高可用不同于鲁棒性,鲁棒性指的是系统的健壮性【耐操】,应对的是参数错误、磁盘故障、网络过载等情况下系统能否不崩溃;而高可用性是针对于集群而言,集群中某个节点挂掉,不影响整个集群的运作。
主备复制
主备复制 :主节点用于读写,并将数据复制到备用节点。
备用节点只是用于备用,如果主节点正常运作,那么备用节点就只是复制数据。如果主机故障,那么系统则不可用;需要人工将备份节点升级为主机。
优点 :简单。
缺点 :
- 备用节点只是用来备份,浪费机器性能
- 主节点故障时,需要人工操作才能故障转移,这个期间系统是不可用的,比较麻烦。
- 主备复制有延迟,如果延迟比较大,那么可能会丢数据。
适用于 :各种管理系统,很少对数据做改动。
主从复制
主从复制 :主节点用来写或者读,从节点用来读,主节点将数据复制到从节点。
如果主节点宕机,那么系统无法进行写操作,但是可以进行读操作。如果搭配主从切换,则切换更简单。
主从复制存在延迟,可能会出现不一致的情况,如刚发布一个状态就去从库读,可能读不到。应对方法是,
- 写后立刻读,去主库去读。
- 对复制延迟监控,如果延迟大于某个阈值,则提醒人工干预。
优点 :充分利用了从节点的性能,避免闲置。
缺点 :
- 主从切换需要人工干预
适用于 :论坛这种情景,写少读多的情况。
主主复制
都是主节点,互相将自己的数据复制给对方,不用考虑主从切换的事情。客户端轮询去访问就可以了,一个不行就换一个。
主主复制看上去比较简单,但是也要很多缺点 :
- 数据需要双向复制,互为主从。当有两个主节点还比较好理解,但如果是三个以上的节点呢?每个节点都需要把自己的数据复制给其他节点,这也是一种性能损耗。
- ID怎么设置?如果是自增的,那么可能会出现两个节点同时插入,产生的ID是相同的,因此会冲突。可能要使用雪花ID来避免。但是这样又增加了系统复杂度
复制的架构
复制的方式有多种,复制的架构也有不同种类。