关于 “高可用集群” 的 从业经验漫谈

关于高可用集群

PART 1 高可用的概念

    高可用(High Availability)是高可用集群(High Availability Cluster)的简称,至少由2台服务器组成,一般指的是应用服务对客户端的持续可用。高可用集群可以借助多种技术手段实现,构建服务器集群是实现高可用集群的流行做法。

    借助 LVS、Nginx、HAProxy等负载均衡软件可以实现集群中的故障检修与业务切换自动化。从实践技术上讲,服务器集群的负载均衡策略对实现集群中应用服务的持续可用起着核心性质的控制作用。

PART 2 应用服务高可用的衡量标准

    一般通过应用服务系统的可靠性(Reliability)和可维护性(Maintainability)来衡量当前应用服务系统的高可用程度。可靠性一般用应用服务系统平均无故障时间进行度量;可维护性一般用应用服务系统平均维护时间进行度量。一个应用服务系统在某个时间段内的高可用程度即为应用服务系统平均无故障时间与应用服务系统存续时间的比值。指标化的表示公式为:

高可用程度=平均无故障时间/(平均无故障时间+平均维护时间)

PART 3 高可用集群的逻辑架构

PART 4不同业务分类场景下高可用集群实现方案

甲 存储方向的高可用集群实现

    核心思想:数据副本冗余与数据副本被就近访问。

甲 一 借助网路把数据复制传送到多台存储设备上,实现存储数据的高可用

    通过Rsync、scp、ftp、sftp等工具对存储的数据进行复制传输,常见于多个小型、异地数据中心之间进行数据备份与灾难恢复。

甲 二 使用直接附加存储(DAS)设备在多个硬件设备上,实现存储数据的高可用

    面对小型简单存储需求可使用磁盘 RAID 0+1 方案,对RAID阵列进行模式0和模式1的组合操作实现;面对大型复杂环境的数据存储需求则可以使用NAS(网络附加存储)方案,NFS是一种典型的NAS实现方式;在超大型核心数据中心数据存储许晴的场景下,则建议使用iSCSI-SAN(iSCSI-存储区域网络)方案,常见的实现方式是 FC-SAN和 IP-SAN。

甲 三 借助分布式结构的实现存储数据的高可用

    在云计算、大数据场景下,可以借助SDN方案实现数据的冗余存储与快速读取。当前受众比较广泛、实践中使用较多的分布式SDN实现产品主要是 Gluster FS 、MinIO FS、HDFS、Oracle开源的ocfs2 FS、 Ceph FS、Linux-Kernel级别的Distributed ReplicatedBlock Device(DRBD)。当前,基于 RedHat 系列产品构建的业务平台使用Gluster FS 较多、整合开源产品构建的业务平台使用 Ceph FS 较多。

乙 故障转移方向的高可用集群实现

    核心思想:快速识别业务服务器状态、快速启用备用业务服务器,让终端用户对应用服务状态变化无感知。

乙 一 借助硬件热插拔技术快速切换故障

    一般在IAAS平台中,物理服务器发生了部分硬件故障(比如NIC),可以借助硬件厂商提供的热插拔技术快速修复故障。同样,在基于 KVM-QUME 模拟的硬件发生故障后也可以借助虚拟化热插拔技术快速更换指定的虚拟部件。

乙 二 借助虚拟IP快速切换故障

    通过将提供服务的主机和 Virtual IP 进行绑定,可以在终端用户毫无知觉的状态下下更换提供目标应用服务的主机。

丙 负载均衡(Load Balance)方向的高可用集群实现

    核心思想:各应用服务节点合理担负负载压力,提供服务冗余。

丙 一 局域网内的负载均衡高可用实现

    借助负载均衡套件实现,有两个实现方向:服务端代理调度和客户端正向调度。客户端正向调度又分为两种情况:一是客户端统一调度、二是客户端负载调度。客户端统一调度的常见场景是将某一类请求(比如来自手机APP的请求和来自浏览器的WEB请求)统一调度到某一个或某几个目标服务器上进行业务处理。客户端负载调度一般是基于客户端的的链接监测程序获取目标后端的全部应用服务器的负载状况、并由客户端自主选择合适的目标服务器进行业务处理。

    服务端代理调度是应用服务提供方重点关注的实现方向。对于应用服务提供方而言,实现负载均衡调度的最佳选择就是提供可伸缩的虚拟服务,让虚拟服务时刻保持客户端可访问。此方案的开源实现套件主要有LVS(Linux Virtual Server)、HAProxy、Nginx-upstream、Keepalived、Squid cache、Google 开源的Seesaw和Maglev、Heartbeat 3、Kubernetes提供的kube-proxy、大众点评为F 5开源的Camel、UCloud的Vortex等。此外还有系统集成厂商提供的针对特定业务场景的商业负载均衡高可用套件,如 F5 BIG-IP 、Citrix NetScaler、RedHat Cluster Suite、中兴Newstart HA、Novell Cluster Service、Steeleye Lifekeeper for Linux、深信服AD的CDN负载均衡、各公有云厂商提供的Elastic Load Balance等。

    负载均衡调度策略大体上可分为静态调度侧率与动态调度策略两类,开源套件中常见的负载均衡调度策略有:轮询、随机、最小链接、最小负载、最短响应时间、权重、活跃粘度、HASH、FAIR、IP、TCP/UDP流量等。

    在使用负载调度策略时应考虑C/S交互中的会话一致性,保证同一个长链接会话粘滞到同一个应用服务器上,因此需要结合应用服务器的健康检查实现会话流出的负载下线业务场景,典型的场景是应用服务器节点的计划性维护下线。

丙 二 跨地域的负载均衡高可用实现

    和DNS(Domain Name System)解析分布式数据结合实现。DNS服务默认的轮询策略会把一个域名轮流解析到一组IP上、从而实现业务负载分摊。

丙 三 基于硬件的负载均衡高可用实现

    主要代表是 F5 、A 10、中兴等系统集成厂商提供的硬件负载均衡设备。硬件厂商的设备一般能提供强劲的服务,稳定性较高,性能较好,能支持百万级别的并发量,但价格十分昂贵,一般在一个数据中心最多使用两个此类硬件设备,以主备的形式构建高可用。

丁 分布式结构方向的高可用集群实现

    核心思想:解耦组件间的强依赖关系,利用消息堆栈联通组件进程工作流。

丁 一 拆分业务系统组件进行模块化分离部署

    把业务系统的部件进行拆分组模后分离部署,这糅杂了微服务业务系统架构和分布式系统思想,需要对当前业务系统的单体应用进行拆分和模块化打包,运维架构的工作量相当大。但在业务快速增长的场景下或者敏捷开发与发布的场景下,这是个最优选择方向,结合蓝绿发布策略,既可以保证应用服务的高可用、又可以实现软件代码版本迭代的实时更新。

    这种业务系统改造和运维系统架构完全是定制化的,实施成功与否严重依赖运维架构团队自身的知识深度和广度积累、及其对目标业务系统运转流程的熟悉程度,几乎没有可以直接克隆使用的案例。

丁 二 对业务系统组件进行抽取并改造构建公共服务

    对业务系统抽取服务组件并构建为公共服务中间件,借鉴了“中台”思想。一般一个复杂的应用服务系统会涉及多种通用服务(比如数据存储,典型的是数据库服务),可能每个组件对这一类服务的要求略有差异(比如消息队列存储和集群配置信息存储的差异),此时可以考虑抽象出一个数据公共服务层,借助分布式共享存储和容器技术构建数据服务及数据共享存储。

    对此,我本人在实验环境下搭建过一个学生信息全息平台,通过数据可视化面板可以展示出和一个学号关联的全部校务信息,在数据存储方面我就抽象了一个数据公共服务,它由一个MinIO数据池和一个Kubernetes集群上运行的MySQL、Redis、ElasticSearch和DataEasy容器吊舱组成。MinIO数据池存储着全部的结构化与非结构化数据,MySQL、Redis、ElasticSearch引擎负责接收客户端数据请求和存储池中的数据存储,DataEasy负责通过 Web UI界面展示可视化报表。

    唯一的缺憾是,这个实验室产物没有进行大量数据验证,但它证明了“构建公共服务层”联通业务流转的上下游这个思路是可行的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/128530.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Javascript笔记:Web页面中的事件处理

1 任务队列 2事件处理:⼀个只有宏任务的示例 3 Web⻚⾯中的事件处理 3.1 定时器与事件处理:一个实例 4 Web⻚⾯中的事件处理 5 事件在DOM中的传播 5.1 两个阶段

数据结构 | (三) Stack

栈 :一种特殊的线性表,其 只允许在固定的一端进行插入和删除元素操作 。 进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO ( Last In First Out )的原则。 压栈:栈…

ES6 class类关键字super

super关键字 在 JavaSCript 中,能通过 extends 关键字去继承父类 super 关键字在子类中有以下用法: 当成函数调用 super() 作为 "属性查询" super.prop 和 super[expr] super() super 作为函数调用时,代表父类的构造函数。 ES6 要求…

stm32的时钟、中断的配置(针对寄存器),一些基础知识

一、学习参考资料 (1)正点原子的寄存器源码。 (2)STM32F103最小系统板开发指南-寄存器版本_V1.1(正点) (3)STM32F103最小系统板开发指南-库函数版本_V1.1(正点&#xff0…

基于可解释性特征矩阵与稀疏采样全局特征组合的人体行为识别

论文还未发表,不细说,欢迎讨论。 Title: A New Solution to Skeleton-Based Human Action Recognition via the combination usage of explainable feature extraction and sparse sampling global features. Abstract: With the development of deep …

查看当前目录下文件所占用内存 du -sh

1. du -sh 查看当前目录下文件所占用内存 2.查看当前文件夹下,每个文件所占用内存 du -ah --max-depth1/

《DevOps 精要:业务视角》- 读书笔记(二)

DevOps 精要:业务视角(二) 第2章 基础2.1 精益生产2.1.1 关键事实2.1.2 挑战 2.2 敏捷2.2.1 关键事实2.2.2 挑战 第2章 基础 2.1 精益生产 2.1.1 关键事实 正如1.2节提到的,DevOps非常依赖于精益生产的原则与实践。有些人甚至相信&#xf…

2023年中国智慧医院市场现状及行业发展趋势分析[图]

自2019年开始,国家卫健委首次提出了智慧医院这一概念ꎬ并明确提出包含的三个方面,即:一是智慧医疗方面,主要面向医院所有医务人员使用者,以深层次提升医院信息化建设为目标ꎬ规范参照…

如何实现 Es 全文检索、高亮文本略缩处理

如何实现 Es 全文检索、高亮文本略缩处理 前言技术选型JAVA 常用语法说明全文检索开发高亮开发Es Map 转对象使用核心代码 Trans 接口(支持父类属性的复杂映射)Trans 接口的不足真实项目落地效果 前言 最近手上在做 Es 全文检索的需求,类似于…

pycharm配置python3.8版本专门用于undecteded_chromedriver测试

pycharm配置python3.8版本专门用于undecteded_chromedriver测试 作者:虚坏叔叔 博客:https://pay.xuhss.com 早餐店不会开到晚上,想吃的人早就来了!😄 一、Pycharm及python环境的配置 1.安装python-3.8.7rc1-amd64.e…

c++视觉---使用轨迹条设置图片的对比度,亮度

轨迹条:cv::createTrackbar cv::createTrackbar 是OpenCV库中的一个函数,用于创建一个图形用户界面 (GUI) 中的滑动条控件,允许用户在应用程序运行时调整特定参数的值。这个函数的调用方式如下: int cv::createTrackbar(const s…

GitHub基础

1、仓库是什么意思?仓库拥有者是谁? 在软件开发或版本控制系统中,"仓库"(Repository)是指存储项目代码、配置文件、文档等相关文件的地方。它可以看作是一个中央存储库,用于管理和跟踪项目的各个…