Linux和Windows搭配提供高可用性、可扩展性系统

2023-11-21 14:38

本文主要是介绍Linux和Windows搭配提供高可用性、可扩展性系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我们的业务系统,不管是企业内部系统还是互联网应用系统,都需要可扩展,高可用性的系统。可扩展性和高可用性不是孤立的,只有结合起来,才能达到理想的效果。

可扩展性是系统、网络或进程的可选属性之一,它表达的含义是可以以一种优雅的方式来处理不断增长的工作,或者以一种很明白的方式进行扩充。例如:它可以用来表示系统具备随着资源(典型的有硬件)的增加提升吞吐量的能力。
垂直扩展的意思是给系统中的单节点增加资源,典型的是给机器增加CPU或内存,垂直扩展为操作系统和应用模块提供了更多可共用的资源,因此它使得虚拟化的技术(应该是指在一台机器上运行多个虚拟机)能够运行的更加有效。
水平扩展的意思是指给系统增加更多的节点,例如为一个分布式的软件系统增加新的机器,一个更清晰的例子是将一台web服务器增加为三台。随着计算机价格的不断降低以及性能的不断提升,以往需要依靠超级计算机来进行的高性能计算的应用(例如:地震分析、生物计算等)现在可以采用这种多个低成本的应用来完成。由上百台普通机器构成的集群可以达到传统的基于RISC处理器的科学计算机所具备的计算能力。

可扩展性更加强调的是水平扩展性,在用户访问数量快速增长的情况下,不终止现有服务来扩展系统的容量。比如web服务器目前已经不能接受更多的用户访问,可以在不停止服务的情况下增加第2台服务器,甚至更多的服务器,而且新增服务器对已有的服务器不会造成负面影响。

没有办法保证系统7*24不发生故障,但用户却要求任何时候都可以正常访问系统,这就是系统高可靠性的需求。一般来说,一个服务是运行在一个系统/机器上,一旦系统/机器出现故障,用户就不能再正常访问这个服务;如果把同一个服务分开放在2个不同的系统/机器,那么即使是一个系统出故障,服务依然是可以访问的。另外一个好处是恢复故障的压力减轻了。现在业界更倾向用 N 个9 来量化可用性, 最常说的就是类似 "4个9(也就是99.99%)" 的可用性。看一下表 1 能更为直观一些。

描述通俗叫法可用性级别年度停机时间
基本可用性2个999%87.6小时
较高可用性3个999.9%8.8小时
具有故障自动恢复能力的可用性 4个999.99%53分钟
极高可用性5个999.999%

5分钟

根据墨菲定律(Murphy's Law)[“有可能出错的事情,就会出错(Anything that can go wrong will go wrong)”]的推论,世界上没有 100% 可靠的 Web站点(除非不运行)。

可能的解决方案有2种:一种是针对单服务的升级,但是升级过程复杂、成本高、且针对的往往是单一故障点;另一种是针对服务器集群的升级,也即架设网络服务的有效结构,这样做的好处在于:通过增强集群系统的冗余性从而实现高可用性、通过分而治之实现高性能和高吞吐率、通过对结点数目的动态调整实现高可扩展性和高性能/价格比等。

这里最常用到的一个技术就是集群。集群技术中常用的是负载均衡,负载均衡技术在Windows 上有群集、NLB,在Linux上有LVS,还有第三方提供的解决方案,例如F5负载均衡器。

我们开发的应用系统都运行在Windows平台上,可靠性和稳定性方面都比较差,尽管windows占据了绝大部分的桌面市场,但在服务器领域,其份额还是很少的:象google、yahoo、tencent、baidu等拥有上万台服务器应用的机构都不约而同的选择linux做为运营平台来支撑巨大的业务访问。每个业务都运行在一个系统/机器上,一旦系统/机器发生故障,业务将不可避免的停止服务。任何一个服务器出故障,运行在上面的业务将不再问用户提供有效服务。

Windows上比较廉价的集群方案式采用NLB,曾经使用过NLB搭建集群,实现方式可参考Windows Server 2003网络负载均衡的实现。Linux的廉价集群方案就是LVS,LVS和NLB比较起来有很多的优势,LVS可以使得这项工作(组建高可扩展的网络服务)变得容易起来,而且LVS已经被证明非常稳定,也正在被越来越多站点和系统所部署。LVS的相关资料可以参考LVS项目有关中文文档。

1.在Linux内核中实现,2.6内核已经集成IPVS内核补丁了,所以不再需要重新编译内核.;

2.三种IP负载均衡技术(通过网络地址转换实现虚拟服务器、通过IP隧道实现虚拟服务器、通过直接路由实现虚拟服务器);

3.十种负载调度算法;

4.支持IPv4和IPv6。

对于系统的高可用性而言,可组建的集群可以是WEB集群、Cache集群、邮件集群、Media集群、DNS集群、MySql集群等。此外,LVS的硬件平台方面:

  • 任何跑Linux的硬件平台都可以运行LVS;
  • LVS的负载均衡和报文转发对CPU速度要求低;
  • 可以用低功耗的硬件平台运行LVS,如Intel ATOM CPU 1.6GHz, 功耗2~3W,及Gigabit Ethernet。

传统模式下,用户的访问请求通过DNS服务器解析后,把服务请求转发给web服务器,取得数据后返回给用户。这种模式有2个麻烦:同时访问的用户增加到某个程度后,服务器不能提供所需的正常访问;遇到故障,所有的访问请求都将失败。要解决这样一个难题,LVS是上上之选。当我们采用LVS方案之后,更改dns服务器的记录,这样用户的访问将首先到达LVS控制器所在的服务器,LVS把请求按照某种算法转发给后面真正的服务器。那么数据的返还是怎样的一个过程呢?在采用DR方式的集群形式下,真实服务器直接把数据返还给用户而不再经过LVS控制器。这样设计使得结构更简单一些,LVS控制器的压力也小很多。

LVS/DR主要由控制器和真实服务器2部分构成,需要在控制器和真实服务器上做好配置才能提供正常的服务。实现LVS/DR最重要的两个东西是ipvs内核模块和ipvsadm工具包,幸运的是,当前的发行版已经包含ipvs内核模块,不必再像旧的内核版本需要打这个补丁,ipvsadm需要从网上下载安装。

LVS可以把服务请求转发到各种各样的操作系统,Windows下设置子网掩码为255.255.255.255比linux设置要麻烦些。要想在网上邻居本地连接的tcp/ip属性设置4个255掩码是不能得逞的,唯一的办法是修改注册表。默认状况下,windows并没有环回接口存在,配置之前得先安装这个“设备”。

这篇关于Linux和Windows搭配提供高可用性、可扩展性系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/402961

相关文章

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

Mac系统下卸载JAVA和JDK的步骤

《Mac系统下卸载JAVA和JDK的步骤》JDK是Java语言的软件开发工具包,它提供了开发和运行Java应用程序所需的工具、库和资源,:本文主要介绍Mac系统下卸载JAVA和JDK的相关资料,需... 目录1. 卸载系统自带的 Java 版本检查当前 Java 版本通过命令卸载系统 Java2. 卸载自定

基于Linux的ffmpeg python的关键帧抽取

《基于Linux的ffmpegpython的关键帧抽取》本文主要介绍了基于Linux的ffmpegpython的关键帧抽取,实现以按帧或时间间隔抽取关键帧,文中通过示例代码介绍的非常详细,对大家的学... 目录1.FFmpeg的环境配置1) 创建一个虚拟环境envjavascript2) ffmpeg-py

在Windows上使用qemu安装ubuntu24.04服务器的详细指南

《在Windows上使用qemu安装ubuntu24.04服务器的详细指南》本文介绍了在Windows上使用QEMU安装Ubuntu24.04的全流程:安装QEMU、准备ISO镜像、创建虚拟磁盘、配置... 目录1. 安装QEMU环境2. 准备Ubuntu 24.04镜像3. 启动QEMU安装Ubuntu4

Windows下C++使用SQLitede的操作过程

《Windows下C++使用SQLitede的操作过程》本文介绍了Windows下C++使用SQLite的安装配置、CppSQLite库封装优势、核心功能(如数据库连接、事务管理)、跨平台支持及性能优... 目录Windows下C++使用SQLite1、安装2、代码示例CppSQLite:C++轻松操作SQ

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

基于Python实现一个Windows Tree命令工具

《基于Python实现一个WindowsTree命令工具》今天想要在Windows平台的CMD命令终端窗口中使用像Linux下的tree命令,打印一下目录结构层级树,然而还真有tree命令,但是发现... 目录引言实现代码使用说明可用选项示例用法功能特点添加到环境变量方法一:创建批处理文件并添加到PATH1

Windows的CMD窗口如何查看并杀死nginx进程

《Windows的CMD窗口如何查看并杀死nginx进程》:本文主要介绍Windows的CMD窗口如何查看并杀死nginx进程问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows的CMD窗口查看并杀死nginx进程开启nginx查看nginx进程停止nginx服务

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构