图片来自网络
高可用定义
“高可用性”(High Availability)通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性。 设计系统的可用性,最重要的是满足用户的需求。系统的失败只有当其导致服务的失效性足以影响到系统用户的需求时才会影响其可用性的指标。
工作方式
1. 主备复制
主备复制中的备表示备份,主机负责读写操作, 备机只负责数据备份,不负责读写
1)主机存储数据,通过复制通道将数据复制到备机
2)客户端访问主机读写数据, 并不直接访问备机
3)主机异常不能恢复, 人工将备机升级为主机, 然后客户端访问新的主机。同时增加新备机
优点:
- 对于主机和备机,双方只需要进行数据复制
- 几乎所有存储系统都提供了主备复制的功能
缺点:
- 备机仅仅只是用于备份,并没有读写操作,硬件成本有些浪费
- 主备间延迟比较多,主机又宕机则可能数据丢失
- 故障后需要人工干预,无法自动恢复
2.主从复制
主从复制中的从意思为随从或者仆从,从承担读的操作;主机负责读写操作,从机只负责读
优点:
- 主从复制在主机故障时,读操作相关业务不受影响
- 与主备相比,从机负责提供读操作, 发挥了硬件的性能
缺点
- 主从复制更加复杂一些,主要体现在客户端需要感知主从关系,并将不同的操作发给不同的机器
- 主从间数据延迟,会出现主从读取的数据不一致的问题
- 主从间延迟比较多,主机又宕机则可能数据丢失
- 故障后需要人工干预,无法自动恢复
3.主备倒换
主备复制和主从复制存在两个共同问题。主机故障后,无法进行写操作;主机无法恢复,需要人工指定新的主机角色。为了解决这两个问题在原有的设计方案基础上增加了“倒换”功能,主备倒换或者主从倒换。让系统自动决定主角色并完成切换。常见的主备倒换架构有三种,互链式,中介式和模拟式
互链式
中介式
优点:
链接更简单。降低了主备机连接管理复杂度
状态角色更简单,只需要简单算法就可以完成决策
MongoDB采用的就是此种方式,虽然中介式架构在状态传递和状态决策上更简单。但如果中介自己宕机了整个系统就进入了双备状态,写相关业务就不可用。因此中介本身又要求高可用。幸运的是开源方案已经有很成熟的解决方案,比如ZooKeeper. 他是 A爬车Hadoop的一个子项目。主要用于来解决分布式应用遇到的数据管理问题。Zookeeper本身就是一个高可用的系统。
4.主主复制
优点:
- 两台都是主机,不存在倒换概念
- 客户端无续区分不同角色,随便将读写操作发送给那台都可以
主主复制架构对数据的设计有严格要求,一般适合临时性可丢失,可覆盖的场景,例如登录产生的session ,用户行为日志,论坛草稿数据等
5.数据集群
衡量高可用
一般公司至少实现2个9,大厂一般要求4个9
级别 | 系统可用性 | 宕机(年) | 宕机(月) | 宕机(周) | 宕机(天) |
不可用 | 90% | 36.5天 | 73小时 | 16.8小时 | 144分钟 |
基本可用 | 99% | 87.6小时 | 7.3小时 | 1.68小时 | 14.4分钟 |
较高可用 | 99.9% | 8.76小时 | 43.8分钟 | 10.1分钟 | 1.44分钟 |
高可用 | 99.99% | 52.56分钟 | 4.38分钟 | 1.01分钟 | 8.64秒 |
极高可用 | 99.999% | 5.26分钟 | 26.28秒 | 6.06秒 | 0.86秒 |
网上资料
参考资料:《从零开始学架构》