群机系统的容错和恢复
云计算平台的容错与故障恢复机制设计

云计算平台的容错与故障恢复机制设计随着云计算技术的快速发展,越来越多的企业和个人将业务和数据迁移至云平台。
云计算平台的容错与故障恢复机制设计变得尤为重要,因为任何系统都有可能面临故障和中断。
为保证云计算平台的高可靠性和稳定性,合理设计容错与故障恢复机制成为迫切任务。
首先,容错机制是确保云计算平台能够在面临硬件和软件故障时仍能正常运行的关键。
为此,云计算平台应具备以下核心特性:1.冗余备份:通过多点部署和数据冗余备份,确保物理服务器、存储设备和网络设备的备份。
这样即使某个节点发生故障,其他节点可以接管工作,不会中断用户的服务。
2.故障监测与自动切换:建立监控系统,实时监测服务器的运行状态和性能指标,一旦发现故障或异常,及时通知运维人员,并自动进行服务迁移或切换,从而最大程度减少因故障而导致的服务中断时间。
3.负载均衡:通过负载均衡技术,将用户请求平均分摊到多个服务器上,避免单个服务器负荷过高而导致的性能下降或故障。
4.故障恢复:云计算平台应该具备快速、可靠的故障恢复能力,能够自动感知和诊断故障,并通过故障恢复策略将服务迅速恢复至正常状态,减少用户的影响。
其次,故障恢复机制是云计算平台在发生故障时能够快速恢复服务的重要保障。
在设计故障恢复机制时,应注意以下几个方面:1.数据备份与恢复:定期备份重要数据,确保数据在发生故障时能够快速恢复。
同时,备份数据的存储位置应与原始数据的位置相隔离,以防止在硬件故障时造成数据丢失。
2.故障隔离与恢复:将云计算平台划分为多个独立的模块,当发生故障时,能够快速识别和隔离故障模块,并进行故障恢复,避免故障影响扩散。
3.容错和弹性:在设计云计算平台时,应考虑到硬件和软件的容错能力,确保平台在面临故障时能够继续提供服务。
同时,通过弹性设计,实现自动扩展和收缩,以适应业务流量的变化和故障的发生。
4.监控与报警:建立实时监控系统,对云计算平台进行全面的监控,并设置相应的报警机制,一旦发生故障,能够及时通知相关人员,进行故障排查和恢复。
系统容错和故障恢复技术

系统容错和故障恢复技术在当今高度数字化和信息化的社会中,各行各业都离不开计算机系统的支持和运行。
但是,计算机系统也经常面临各种故障和问题,这些问题可能会导致系统崩溃,给用户带来不便和损失。
为了保障计算机系统的稳定和可靠性,系统容错和故障恢复技术应运而生。
系统容错技术是指在计算机系统设计和运行过程中,采取一系列措施来防止和处理各种系统故障。
首先,系统容错技术通过硬件冗余来实现。
例如,在一台服务器上设置多个磁盘阵列来存储数据,当某一个磁盘发生故障时,系统可以立即切换到备用磁盘,确保数据的安全性和可用性。
除了硬件冗余,软件冗余也是系统容错技术的重要手段。
通过设计和实现冗余的软件模块,系统能够在一个模块发生故障时,自动切换到备用模块,避免系统的崩溃。
此外,系统容错技术还包括故障检测和修复,当系统出现故障时,能够及时检测到并采取相应的措施进行修复。
在系统容错技术的基础上,故障恢复技术能够帮助系统在出现故障后,快速地恢复正常运行状态。
故障恢复技术包括备份和恢复、日志和快照等。
备份和恢复是最常见和基础的故障恢复技术。
通过定期对系统进行备份,将系统状态保存在可靠的存储介质中,当系统出现故障时,可以根据备份数据来恢复系统。
日志技术可以帮助系统记录各种操作和变更,当系统发生故障时,可以根据日志信息来恢复到故障之前的状态。
而快照技术可以快速地保存系统当前的状态,以便在系统故障时能够迅速回滚到快照点。
除了上述的技术手段,系统容错和故障恢复技术还可以通过监控和自动化来提高系统的可靠性和恢复能力。
监控系统可以实时地检测系统的运行状态和性能指标,一旦系统出现异常,能够及时报警并采取相应的措施。
自动化技术可以帮助系统在出现故障时,自动地进行故障检测、修复和恢复,减少人工干预的时间和成本。
总之,系统容错和故障恢复技术是保障计算机系统稳定和可靠运行的重要手段。
通过采取系统容错技术,可以有效地防止系统故障的发生,保护用户的数据安全和使用体验。
如何进行系统可恢复性和容错性测试

如何进行系统可恢复性和容错性测试系统可恢复性和容错性测试是软件开发中非常重要的环节之一。
它确保在系统发生故障或错误时,能够及时恢复并保持稳定的运行状态。
本文将介绍如何进行系统可恢复性和容错性测试的步骤和方法。
一、概述系统可恢复性和容错性测试旨在验证系统能够在发生异常情况时,自动检测错误、恢复故障,并继续提供正常的功能和服务。
测试过程需要模拟各种异常情况,如硬件故障、软件错误、网络中断等,以确保系统具备较高的可靠性和稳定性。
二、测试准备1. 确定测试环境和测试工具:根据系统的实际情况,选择合适的测试环境和工具。
例如,可以使用虚拟化技术搭建测试环境,并选择合适的性能测试工具。
2. 确定测试目标和范围:根据系统的需求和设计文档,明确测试的目标和范围。
例如,测试系统的自动恢复时间、恢复策略的有效性等。
3. 设计测试用例:根据系统的功能和预期的异常情况,设计测试用例。
测试用例应该覆盖各种可能出现的故障和异常情况,例如服务器宕机、数据库连接中断等。
三、测试步骤1. 执行正常功能测试:在进行可恢复性和容错性测试之前,首先要确保系统的正常功能能够正确运行。
通过执行功能测试用例来验证系统功能的正确性。
2. 引入异常情况:根据设计好的测试用例,引入各种异常情况。
例如,模拟硬件故障,断开网络连接等。
观察系统的行为,并记录相关日志信息。
3. 检测错误和恢复故障:在系统发生异常情况后,观察系统是否能够自动检测错误并恢复故障。
例如,系统是否能够自动重启、自动切换到备用服务器等。
4. 恢复后功能验证:在系统恢复正常后,验证系统的功能是否能够正常运行。
执行之前设计的功能测试用例,确保恢复后的系统功能完整且正确。
四、测试结果分析根据测试结果,分析系统的可恢复性和容错性。
评估系统在不同异常情况下的表现,如恢复时间、数据完整性、用户体验等。
如果测试中出现问题,及时记录并报告给相应的开发人员。
五、测试报告撰写根据测试过程和结果,编写详细的测试报告。
操作系统中的容错与故障恢复方案

操作系统中的容错与故障恢复方案在操作系统中,容错与故障恢复是非常重要的概念,它们可以帮助系统有效地应对各种意外情况,保证系统的稳定性和可靠性。
本文将介绍操作系统中常见的容错与故障恢复方案,以及它们的原理和应用场景。
1. 容错技术容错技术是保证系统在遇到硬件或软件故障时仍然能够正常运行的关键。
常见的容错技术包括硬件容错和软件容错。
硬件容错主要是通过冗余设计来实现的,例如冗余电源、磁盘阵列、冗余网络设备等。
当一个硬件组件发生故障时,系统可以自动切换到备用组件,保证系统的连续性和稳定性。
软件容错则是通过备份和容错检测来实现的,例如备份数据库、容错检测机制等。
当系统软件发生故障时,系统可以自动恢复到备份状态,保证系统的可用性和可靠性。
2. 故障恢复方案故障恢复方案是指系统在遇到硬件或软件故障后如何快速恢复到正常状态的方法。
常见的故障恢复方案包括软件重启、系统还原、数据恢复等。
软件重启是最简单的故障恢复方案,当系统软件出现故障时,可以通过重新启动软件来恢复系统的正常运行。
但这种方法会导致系统服务中断,影响用户体验。
系统还原是通过备份系统状态来实现的,当系统出现问题时,可以恢复到之前备份的状态。
这种方法可以快速恢复系统,但会造成数据丢失或不一致。
数据恢复则是通过备份数据和数据恢复工具来实现的,当数据损坏或丢失时,可以通过恢复工具来恢复数据。
这种方法可以保证数据完整性和可靠性。
3. 应用场景容错与故障恢复方案在各种场景中都有广泛的应用,特别是在关键系统和大型系统中更为重要。
在金融系统中,容错与故障恢复方案可以保证交易数据的完整性和安全性,避免金融风险和数据泄露。
在云计算系统中,容错与故障恢复方案可以保证虚拟机和容器在故障时能够自动迁移和恢复,确保服务的连续性和可用性。
在工业控制系统中,容错与故障恢复方案可以保证工业生产设备在故障时能够自动切换到备用设备,避免生产中断和损失。
总之,容错与故障恢复方案在操作系统中起着至关重要的作用,它们可以提高系统的稳定性和可靠性,保证系统在遇到各种意外情况时能够有效应对,是系统设计和运维中不可或缺的一部分。
Hadoop集群容错和故障恢复的最佳实践

Hadoop集群容错和故障恢复的最佳实践在当今大数据时代,Hadoop已成为处理海量数据的首选框架。
然而,由于庞大的规模和复杂的架构,Hadoop集群容错和故障恢复成为了一个关键问题。
本文将探讨Hadoop集群容错和故障恢复的最佳实践,以帮助企业更好地应对这些挑战。
首先,了解Hadoop集群的架构是理解容错和故障恢复的关键。
Hadoop集群由多个节点组成,其中包括主节点(NameNode)和工作节点(DataNode)。
主节点负责管理整个文件系统的元数据,而工作节点则存储实际的数据块。
因此,主节点的失效将导致整个集群的不可用。
为了保证Hadoop集群的容错性,最佳实践之一是使用Hadoop的高可用性(HA)模式。
HA模式通过引入多个主节点来实现冗余,从而确保即使一个主节点失效,其他主节点仍能继续提供服务。
在HA模式下,主节点之间通过心跳机制进行通信,以及时检测和处理故障。
另一个重要的实践是定期备份Hadoop集群的元数据。
元数据备份可以在主节点失效时快速恢复集群。
在备份过程中,可以使用Hadoop提供的工具(如DistCp)将元数据复制到不同的位置或集群中。
此外,还可以将元数据备份到云存储服务,以提高数据的可靠性和可用性。
除了容错性外,故障恢复也是Hadoop集群管理中的重要环节。
当工作节点失效时,Hadoop提供了自动恢复机制。
在失效的工作节点上,Hadoop会自动将存储在该节点上的数据块复制到其他健康节点上,以确保数据的完整性和可用性。
这种自动恢复机制称为数据复制。
数据复制是Hadoop集群故障恢复的核心机制之一。
在Hadoop中,数据块会被复制到多个工作节点上,以提高数据的冗余性。
通过增加数据的冗余性,即使某个工作节点失效,数据仍然可以从其他节点获取。
根据Hadoop的最佳实践,建议将数据复制因子设置为3,以确保数据的高可用性。
此外,监控和诊断是保障Hadoop集群稳定运行的关键。
Hadoop提供了丰富的监控工具和指标,可以用于实时监控集群的状态和性能。
容错技术的4种手段

容错技术的4种手段引言随着信息技术的快速发展,各种软件系统已经成为现代社会的重要组成部分。
然而,软件系统的错误和故障也时有发生,给用户带来了不便和损失。
为了提高软件系统的稳定性和可靠性,人们提出了各种容错技术。
本文将讨论容错技术的四种主要手段:冗余技术、错误检测与纠正技术、恢复技术以及容错编码技术。
一、冗余技术冗余技术是指在软件系统中增加冗余资源或功能来提高系统的可靠性和容错能力。
冗余技术可以分为硬件冗余和软件冗余两种类型。
1. 硬件冗余硬件冗余是指通过增加冗余的硬件设备来提高系统的容错性。
常见的硬件冗余技术包括:•备份冗余:将系统分为主系统和备份系统,当主系统发生故障时,备份系统会自动接管工作。
•热备插件:系统在工作时可以插拔硬件设备,当某个设备发生故障时,可以立即更换并继续工作。
•重建冗余:在系统中使用多个相同的硬件设备,并通过算法保持它们的状态一致,当某个设备发生故障时,可以用其他设备进行重建。
2. 软件冗余软件冗余是指通过增加冗余的软件模块或进程来提高系统的容错性。
常见的软件冗余技术包括:•任务冗余:将同一个任务分为多个子任务并行执行,当某个子任务发生故障时,其他子任务可以继续执行。
•数据冗余:在系统中存储多份相同的数据副本,当某个副本发生错误时,可以使用其他副本进行恢复。
•算法冗余:在系统中使用多个算法解决同一个问题,并通过多数投票等方法来选择正确的结果。
二、错误检测与纠正技术错误检测与纠正技术是指通过添加或嵌入检错和纠错代码来检测和修复软件系统中的错误。
常见的错误检测与纠正技术包括:1. 奇偶校验奇偶校验是一种简单的错误检测技术,它通过在数据中添加一个校验位来检测数据传输过程中的错误。
校验位的奇偶性可以用来判断数据是否发生错误。
2. 循环冗余校验 (CRC)CRC是一种更强大的错误检测技术,它通过生成多项式来在数据中添加冗余信息,然后将生成的校验码与接收到的数据进行比较,从而检测出数据传输过程中的错误。
软件系统运维技术中的容错和恢复机制详解
软件系统运维技术中的容错和恢复机制详解在软件系统运维技术中,容错和恢复机制是非常重要的概念。
在系统运行过程中,可能会出现各种不可避免的故障,如硬件故障、网络故障、软件错误等,这些故障可能导致系统崩溃或者无法正常工作。
为了保证系统的稳定性和可靠性,运维人员需要采取相应的容错和恢复机制来应对这些故障。
首先,容错机制是指系统能够在发生故障时继续正常运行的能力。
它主要包括硬件容错和软件容错两个方面。
硬件容错是通过冗余设计来实现的,比如采用双机热备份架构。
在双机热备份架构中,两台服务器同时运行同一个软件系统,一台为主服务器,一台为备份服务器。
当主服务器发生故障时,备份服务器能够立即接管其工作,保证系统的连续运行。
此外,还可以使用RAID技术来实现硬盘的容错。
RAID技术将多块硬盘组合成一个逻辑磁盘,实现数据的冗余存储和容错能力。
当一块硬盘发生故障时,其他硬盘能够继续正常工作,系统不会受到影响。
软件容错主要是指软件系统具有自动检测和纠正错误的能力。
常见的软件容错技术包括异常捕获和处理、错误代码检测和处理、数据备份和恢复等。
异常捕获和处理是指在软件运行过程中,对可能发生的异常进行捕获并进行相应的处理,例如记录异常信息、发送警报等。
错误代码检测和处理则是通过对代码进行严格的测试和验证,在代码中出现错误时能够及时发现并进行处理。
数据备份和恢复是指将重要数据进行备份,当系统发生故障导致数据丢失时,能够通过备份数据进行恢复,保证数据的完整性和可用性。
其次,恢复机制是指系统发生故障后,如何将系统从故障状态恢复到正常工作状态的技术手段。
恢复机制主要包括故障诊断和故障恢复两个方面。
故障诊断是指对系统故障进行分析和定位,找出故障的原因和位置。
在实际运维过程中,可以通过查看日志、监控系统、排查硬件等手段进行故障诊断。
通过准确的故障诊断,可以迅速找出故障点,为故障恢复提供有力的支持。
故障恢复是指对系统进行修复和恢复,使系统能够重新正常工作。
什么是计算机网络容错与恢复常见的计算机网络容错与恢复技术有哪些
什么是计算机网络容错与恢复常见的计算机网络容错与恢复技术有哪些计算机网络容错与恢复技术是指在计算机网络中,为了确保系统的可靠性和稳定性,在面临各种故障和意外情况时,采取一系列的技术手段来保障网络的正常运行。
本文将介绍计算机网络容错与恢复的概念以及常见的计算机网络容错与恢复技术。
一、计算机网络容错与恢复的概念计算机网络容错与恢复是指当计算机网络发生故障或者遭到攻击时,通过一系列的技术手段来保障网络的正常运行。
容错是指通过错误检测、错误纠正、冗余备份等技术手段,预防或者提供智能处理来减少错误带来的恶果。
恢复是指在故障发生之后,通过切换、备份恢复、故障隔离、故障恢复等技术手段,保障网络的功能性和可用性。
二、常见的计算机网络容错技术1. 错误检测与纠正技术错误检测技术可以通过校验和、循环冗余校验码(CRC)等方法检测出传输过程中的错误,确保数据的准确性。
纠错技术则是通过使用一些纠错码,比如海明码或者RS码,根据一定算法对数据进行纠错,从而恢复被错误修改的数据。
2. 冗余备份技术冗余备份是指将关键数据、关键设备或者关键系统在多个不同的位置进行备份,当出现故障时,可以使用备份来代替故障设备或者系统的运行。
冗余备份可以分为硬件冗余和软件冗余两种,常见的硬件冗余包括热备份、冷备份和温备份,而软件冗余则通过集群和镜像等技术手段实现。
3. 容错路由技术容错路由技术是指在网络通信过程中,通过使用多个备选路径和故障转发机制,在主路径出现故障时,及时寻找可靠的备选路径来传输数据。
常见的容错路由技术包括静态路由、动态路由协议和链路状态协议等。
三、常见的计算机网络恢复技术1. 故障隔离技术故障隔离技术是指在网络中,当发生故障时,及时将故障节点或者故障链路从网络中隔离,以保护整个网络的正常运行。
常见的故障隔离技术包括冗余链路、虚拟局域网(VLAN)和安全隔离等方法。
2. 故障恢复技术故障恢复技术是指在网络出现故障之后,通过一系列的手段来恢复网络的正常运行。
网络容错与故障恢复
网络容错与故障恢复在现代社会,网络已经成为我们生活中不可或缺的一部分。
无论是个人使用还是商业领域,网络的稳定性和可靠性都提供了许多便利性。
然而,由于网络的复杂性和不可预测性,故障和中断是不可避免的。
因此,网络容错和故障恢复成为了保障网络可用性和稳定性的关键措施。
一、网络容错技术网络容错是指通过一系列技术手段来减少网络故障和中断对用户造成的影响,并保持网络的可用性。
下面将介绍一些常见的网络容错技术:1. 冗余技术冗余技术是一种通过增加冗余设备或路径来提高网络可靠性的方法。
例如,冗余路由器可以用作备份,当主路由器故障时自动切换到备用路由器,保证网络的连通性。
2. 负载均衡负载均衡是一种将网络流量分散到多个服务器上的技术。
通过将流量分散到多个服务器上,可以降低单个服务器的负载,并提高整个网络的性能和可用性。
3. 容错协议容错协议是一种在数据传输过程中具备自我修复能力的协议。
它能够检测和纠正数据传输中可能出现的错误,并确保数据的完整性和准确性。
二、网络故障恢复技术网络故障恢复技术是指在网络出现故障时,通过一系列措施来迅速修复故障,并将网络恢复到正常工作状态。
以下是一些常见的网络故障恢复技术:1. 自动重启服务自动重启服务是一种自动监控和重启网络服务的技术。
通过监控网络服务的状态,一旦出现故障,系统将自动进行重启,以恢复网络的正常功能。
2. 备份和恢复备份和恢复是一种通过定期备份数据和配置信息,并在发生故障时恢复到备份状态的技术。
这可以帮助快速恢复网络,并最小化对用户的影响。
3. 网络故障监测系统网络故障监测系统是一种用于实时监测和检测网络故障的技术。
它能够及时发现故障,并提供详细的故障报告,以便管理员能够快速定位和解决问题。
三、网络容错与故障恢复的重要性网络容错和故障恢复对于保障网络的可用性和稳定性至关重要。
以下是网络容错与故障恢复的几个重要方面:1. 最小化服务中断通过有效的网络容错和故障恢复措施,可以最小化网络服务中断的时间和影响。
如何进行计算机系统的容错和冗余设计
如何进行计算机系统的容错和冗余设计计算机系统是现代社会中不可或缺的一部分,它们承担着重要的任务和功能。
然而,计算机系统也存在着硬件或软件故障的风险,这可能会对系统的正常运行和数据的完整性造成严重影响。
为了应对这些风险,容错和冗余设计成为一种常见的解决方案。
本文将介绍如何进行计算机系统的容错和冗余设计。
一、容错设计容错设计是指在计算机系统中加入一定的机制,使其能够在面对硬件或软件故障时保持正常运行。
容错设计的关键目标是确保系统的可用性,即系统能够持续提供服务而不中断。
以下是一些常见的容错设计技术:1. 容错硬件:容错硬件是指采用特殊设计的硬件组件,能够在硬件故障发生时进行自动修复或切换,以保持系统的正常运行。
例如,采用冗余电源、磁盘阵列等硬件设备可以实现故障切换,从而避免单点故障。
2. 容错软件:容错软件是指在系统的设计和编程过程中采用特殊的算法和技术,以实现故障的自动检测、纠正和恢复。
例如,使用冗余数据和校验位进行数据校验和纠错,可以保证数据的完整性。
3. 容错网络:容错网络是指通过网络协议和拓扑设计来提高系统的可靠性和容错性。
例如,采用双机热备份、链路冗余等技术可以防止网络故障对系统的影响。
二、冗余设计冗余设计是指在计算机系统中增加额外的硬件或软件资源,以实现故障恢复和性能提升。
冗余设计的关键目标是提高系统的可靠性和可用性。
以下是一些常见的冗余设计技术:1. 硬件冗余:硬件冗余是指在计算机系统中加入备用的硬件设备,以备份主要设备的功能。
例如,采用双电源供电、磁盘镜像等技术可以确保系统在硬件故障时正常运行。
2. 数据冗余:数据冗余是指在计算机系统中保存备份数据的副本,以保证数据的可靠性和安全性。
例如,数据库的备份和复制可以避免数据丢失。
3. 服务冗余:服务冗余是指在计算机系统中提供备用的服务节点,以确保系统在主服务不可用时仍能继续提供服务。
例如,通过部署多个服务器节点和负载均衡技术,可以实现服务的冗余和故障切换。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
收稿日期:2000 12 26作者简介:丁俊(1973-),男,湖北咸宁人,硕士研究生,主要研究方向:并行计算容错; 童维勤(1962-),浙江人,男,副教授,主要研究方向:并行计算.文章编号:1001-9081(2001)06-0090-03群机系统的容错和恢复丁 俊,童维勤(上海大学计算机工程与科学学院,上海200072)摘 要:工作站群机系统已成为分布式并行处理发展的主流方向之一。
随着群机系统应用领域的逐渐拓展和规模的不断扩大,人们对其可靠性的要求日益提高。
设计高可靠的群机系统,需要着重研究其系统容错技术。
本文主要论述linux 群机分布式系统进程的容错和恢复。
重点讲述用户层中的检查点设置、卷回和进程迁移关键技术。
关键词:检查点;容错;故障恢复;卷回;进程迁移;进程状态;中图分类号:TP303 文献标识码:B1 引言从计算机硬件来看,计算机朝两个方向发展。
一是大型机或巨型机的方向,其运算速度达亿次甚至百亿次;二是朝着微机方向发展,以PC 机为代表的微机已深入家庭。
计算机硬件技术发展的另一显著特点是网络技术的崛起,它使人们共享计算机的资源成为可能。
基于网络的并行技术的出现,使广大用户研究和实际应用并行技术变成现实。
特别是近几年发展迅速的工作站群机系统(Network of workstations(NOW)或Cluster of WorkStations(COW ))。
它是利用高速互连网将一组高性能工作站或高档PC 机连接起来,在并行程序设计和集成开发环境支持下,统一调度,协调处理,实现高效并行计算的系统[1]。
各结点独立运行自己的操作,灵活性高;结点处理能力强,资源为多用户共享。
各个结点机共同承担计算任务,进行并行计算,从而达到甚至超过大型计算机的计算能力。
由于集群计算系统的构成特点,随着结点数的增加,发生故障的概率会迅速增大,系统在发生各种异常或故障事件时会导致某次计算的彻底失败,此前的大量计算不能再用[2]。
所以系统容错要求是:必须具有一定的出错恢复能力,保证在发生各种异常事件或故障时,为用户提供持续的服务。
卷回恢复是提高分布式系统容错性能的重要后向恢复技术[3]。
卷回技术是指系统从故障中恢复时,从出错时刻以前的某一确定正确的时刻开始恢复。
系统从故障中恢复到正常状态需要有两个过程:检查点设置和卷回恢复或迁移恢复[3,4]。
做检查点(checkpointing )和程序回卷或迁移一个挑战性难题是在用户层如何取得进程状态以及如何在另一台机器(也许同类型机器和同操作系统)重新起动,从最近检查点处继续执行。
本文主要讨论在Linux 操作系统中用户作业进程的容错和恢复;论述了在用户层如何实现进程的容错恢复。
2 做检查点在做检查点时写进程的所有状态信息到文件或套接口(socket),然后在起动时刻使用这些已保存的信息恢复进程状态。
而用户不需要知道何时何处做检查点/起重或迁移进程,从而实现透明检查点和起重进程的封装。
2.1 进程状态Linux [5]操作系统已是一个专业化的自由软件,是Unix 在IB M PC 机上的完整实现,并且遵循POSIX 规范,具有Unix 操作系统所具有的功能,对外接口与Unix 操作系统很相似,具有很强的网络功能。
众所周知,用户作业只能在用户态下执行。
而要做检查点或恢复或迁移一个正在执行的用户作业,重新起动从最近检查点处继续执行,在用户层如何做到,是一个挑战性难题。
下面详细论述。
进程状态是指进程的上下文,由其用户地址空间的内容,硬件寄存器的内容以及与该进程有关的内核数据结构组成。
更严格地说,进程上下文是由它的用户级上下文(user -level -context )、寄存器上下(register context )以及系统上下文(system-level con text)组成。
用户级上下文是由进程的正文、数据、用户栈和共享存储区组成。
它们占据了该进程的虚地址空间。
寄存器上下文由程序计数器、处理机状态寄存器、栈指针、通用寄存器、一个进程的进程表表项、一个进程的u 区、本进程区表表项、区表及页表、核心栈、进程的系统级上下文的动态部分由一些 层组成。
图1 进程上下文的组成上下文的静态部分:它由用户级上下文和系统级上下文的静态部分组成。
用户级上下文包括进程的正文(指令)、数据、栈和共享存储区。
系统级上下文的静态部分包括进程表项,u 区以及本进程区表表项(是用户级上下文中的虚地址映射信息)。
上下文的动态部分:由几个栈结构组成。
其中每个第21卷2001年6月计算机应用Computer Applications Vol.21,No.6Jun.,2001栈结构中分别保存前一层寄存器上下文以及当内核在该层执行时的核心栈。
内核的上下文层0是虚设层,它表示用户级上下文;栈是向用户地址空间方向增长,核心栈是空的。
图1中的箭头从系统级上下文层的静态部分,指向动态部分的顶层,表示进程表项的逻辑信息能使内核恢复进程的当前上下文层。
2.2 进程状态的保存当做检查点时,就要对进程状态上下文进行保存。
先安装做检查点的信号处理器,初始化其数据结构,然后调用用户main()过程。
在用户代码执行过程中,检查点信号触发调用checkpoin t()过程做检查点,保存进程状态,记录所用文件信息、数据区信息及栈信息,写数据、共享库和栈区等信息到检查点文件。
现在进程既可以退出也可以从信号处理器返回继续运行。
2.2.1 进程的正文、数据、栈和共享存储区C 编译器将每个源文件翻译成目标文件后,将单个的目标文件连接在一起生成一个可执行模块。
程序是一个包含可执行模块的文件。
当程序运行时,操作系统将可执行模块拷贝到内存的一个程序映像。
进程是正在执行的程序的一个实例,每个实例都有它自己的地址空间和执行状态。
操作系统将程序读入虚内存,并为程序映像分配内存。
图2给出了内存中程序的一个样本布局。
图2 主存储器中程序的布局程序映像有多个不同的区域。
程序正文或代码显示在低序(low-order)内存中。
静态扩初始化和未初始化变量在映像中有它们自己的区域。
其他的区域包括堆、栈和环境。
由于现代操作系统要求装入的文本只可读。
因此,在运行时不会被改变,不需做特别的工作来保存和恢复文本。
数据区由三部分组成:初始化区、未初始化区及堆区;初始化区在编译时给初值,未初始化区在编译时分配空间,但不被赋值,而在装入时填充0;malloc()函数族通过系统调用brk ()/sbrk()从堆区空闲池中分配存储空间。
在堆上分配的存储空闲将持续到它被释放或程序退出。
数据区布局在文本区高端,从页边界处开始,依次分布初始化区、未初始化区及堆区。
进程运行时,可能重写初始化区。
因此,在重启动进程时,不能依赖可执行文件中的初始化区中的值。
所以在做检查点时,保存整个数据段。
在重启动时,读到地址空间。
无论如何,都要获取数据段的起址和长度。
栈简化处理函数/过程调用机制。
活动记录是在栈顶分配的一个内存块,用以在函数被调用时保存函数的执行环境。
活动记录包含返回地址、参数、状态信息及调用时C PU 寄存器值的一份拷贝,以便返回时将这些值重新装入。
栈的大小随函数调用/返回而动态变化。
类似于数据区,保存栈时,也要知道栈的起址和长度。
但恢复时,不能简单从检查点文件读出到地址空间。
问题在于它可能覆盖正在做重启动准备工作的过程的活动记录。
当重启动过程完成准备工作返回时,由于活动记录已被破坏,返回地址无效,过程无法返回。
为避免发生这种情况,恢复栈要有一点技巧:当正在做重启动准备工作时,在数据区中预定义一个区作为临时栈。
若用汇编代码实现,则要有不同汇编模块以满足不同机型结构,比较复杂,工作量大,可移植性差。
权衡各种因素,用函数setjmp()和longjmp()来实现,减轻机器依赖性。
setjmp(JMP !B UF *pjmpbuf)例程保存当前环境(context)到J MP !BUF 型指针变量(pj mpbuf)中。
变量pjmpbuf 包含上下文切换所需的任何信息。
调用longjmp(pjmpbuf)例程恢复上下文。
在重启动时,栈被恢复到数据区中的一临区。
因为数据区栈区前被恢复,pjmpbuf 在此时有效。
现代操作系既支持静态链接,又支持动态链接。
进程在其地址空间里除包含传统意义上的文本、数据和栈外,还有映像区(mapped segments)。
映像区便于实现动态链接机制,完美地支持动态链接、共享文本库。
虽然进程在运行时,在任何所需处都可以链接动态库,但不能保证同一程序的多次执行,同一动态库都被映像到同一虚地址空间。
检查点时,除保存栈和数据外,还应保存进程的动态库数据,以确保进程被重启动时每个动态库被链接并恢复原状态。
动态库可能分布在进程空间不同区段。
因而需要保存其所有活动区域的数据。
方法如下:第一,为映像段做检查点。
调用/proc 文件系统接口函数ioctl(),找出所有活动片。
在/proc 目录下,系统为每个运行进程创建一个以进程号命名的文件,记录与之关联的进程内存的内容。
调用i octl()例程有两种形式,其一调用i octl()取得指定进程所使用映像区数目;另一种找出每个映像区的有关信息(虚存起址、大小、保护及其他属性标志)。
但第一种调用返回进程所有区段,包括栈、数据段和文本区。
若系统不支持/proc 文件系统,那么库在调用mmap()全程例程时,记录有关信息。
链接时,动态链接器调用mmap()例程创建新区段,并把该共享库映像到刚刚创建的新段上。
因此要修改系统调用函数mmap(),在m map()能保存这些区段信息。
关于怎样修改系统调用函数,将在2.1.3节详细介绍。
进程由不同区段组成,有些要特殊处理。
一旦取得区段信息,首先区分开各区段。
分别比较静态函数地址和全局变量地址,就能标识出数据段和文本段。
而比较栈指针和系统定义的栈常量来标识栈段。
余下的区段就属于动态库。
最后,调用read()写入检查点文件。
第二,恢复映像区段。
当重启动时,应恢复保存在检查文件里的所有区段。
数据段按原样恢复,最后恢复栈段,并返回到栈顶,就像刚从信号处理器返回。
恢复动态库稍微要复杂。
先调用mmap()函数在虚存分配所需映像空间,即从适当起始/结束地址映像/dev/zero 文件,分配一个初始化区段。
除了设置写和私有属性外,其他属性维持原设置。
设置写标志,把保存的共享库数据写入;设置私有属性使其不干扰影响欺其他进程。
然后调用read()/read()用保存的数据覆盖。
特别要注意:mmap()和read()函数必须强制为静态调用,否则当调用mmap()/read()时,可能覆盖共享库区段,导致意想不到的灾难。
91第6期丁俊等:群机系统的容错和恢复2.2.2 文件文件属性包括文件描述符、打开/创建模式、偏移量、是否是另一个文件描述符的拷贝(dup)。