活动介绍

服务与分布式工作负载管理

立即解锁
发布时间: 2025-08-26 00:05:41 阅读量: 3 订阅数: 4
PDF

Oracle 10g RAC Grid与集群服务详解

# 服务与分布式工作负载管理 在当今的业务环境中,业务系统基础设施的复杂性不断增加,这使得系统变得不安全、脆弱且难以维护。随着多年来功能变更的累积,进一步实施变更变得更加困难且效率低下。因此,企业开始重新思考重写这些系统以提高可管理性的想法。而向更松散耦合的复合解决方案的转变,带来了一种以服务为导向的技术架构新趋势。 ## 1. 服务框架 ### 1.1 服务的概念与优势 服务并非新概念,在 Oracle 数据库中,从 Oracle Database 8i 就引入了服务,用于监听器在集群节点和实例之间进行客户端负载均衡。到了 Oracle Database 10g,服务的概念得到了更深入的应用。除了将数据库视为适用于集群中所有实例的单一服务外,还可以创建多种不同类型的服务,这使得跨节点的工作负载管理更加轻松简单。 服务具有以下优势: - **可管理性**:传统系统管理复杂,一个大型应用以单一系统映像提供所有业务功能,导致故障排除和性能诊断困难。而服务可以将每个工作负载作为一个独立单元进行管理,因为服务可以跨越 RAC 环境中的一个或多个实例,负载均衡等功能可以在更可控和功能化的层面实现。 - **可用性**:与整个企业系统故障相比,较小组件或子组件的故障在大多数情况下是可以接受的。当服务出现故障时,资源恢复更快且独立,无需重启整个应用程序栈。如果多个服务同时出现故障,恢复过程还可以并行进行,从而提高企业系统的可用性。当故障实例重新上线时,未配置故障转移的服务会立即启动,而发生故障转移的服务可以恢复到其原始实例。 - **性能**:在 Oracle Database 10g 之前,性能调优基于系统级或会话级收集的统计信息,无法提供应用程序或组件级的性能指标。而引入服务后,可以在服务级别跨实例收集性能指标,实现更精细的组件级故障排除。 ### 1.2 服务的类型 根据服务的用途和所有权,服务大致可分为两类: - **应用服务**:通常与业务相关,描述业务应用、业务功能和数据库任务。可进一步分为数据依赖型和功能依赖型。 - **数据依赖型服务**:基于数据库或数据相关的键值,应用程序根据这些键值被路由到相应的服务。这种服务通常在多个应用共享的数据库上实现,并与数据分区相关联。例如,根据键值,应用程序会连接到数据库服务器中的特定分区,这可以是一组实例或实例内的数据库部分。此类服务通常由事务监视器(如 BEA Systems 的 Tuxedo)支持,也称为数据依赖型路由。 - **功能依赖型服务**:基于业务功能,如 Oracle 应用程序中的应收账款(AR)、应付账款(AP)、总账(GL)和物料清单(BOM)等。这些服务在数据库内创建了功能分工,也称为功能依赖型路由。 - **PRECONNECT 选项**:在早期版本的 Oracle 中使用,服务跨越集群中的一组实例。该服务会预先建立与 Oracle 数据库中多个实例的连接,并在用户会话最初建立连接的主实例发生故障时支持故障转移。 - **内部服务**:由 Oracle 用于管理其资源,主要包括 SYS$BACKGROUND(用于 Oracle 后台进程)和 SYS$USERS(用于未与任何服务关联的用户会话)。这些服务是默认创建的,不能被删除或修改。 ### 1.3 服务的特性 - **位置独立性**:通过 RAC 高可用性(HA)框架实现,确保服务不受位置限制。 - **持续可用性和负载共享**:服务在集群中的一个或多个实例之间持续可用并共享负载。任何实例都可以根据运行时需求、故障和计划维护提供服务,保证服务在集群中始终可用。 - **高可用性配置**:为了实现服务的工作负载平衡和持续可用性,CRS 将每个服务的 HA 配置存储在 OCR 中。HA 配置定义了支持服务的首选实例集和可用实例集。 - **首选实例集**:定义了支持相应服务的实例数量(基数),并标识了系统启动时服务将运行的所有实例。 - **可用实例**:最初不支持服务,但在首选实例无法支持服务时开始接受服务连接。如果首选实例发生故障,服务将透明地恢复到为该服务定义的可用实例。 ### 1.4 服务的创建方法 DBA 可以使用以下几种基本方法创建服务: - **DBCA** - **创建时机**:可以在数据库配置过程中创建应用服务,也可以在数据库创建后,通过选择服务管理选项来创建。 - **创建步骤**: 1. 选择服务管理选项后,从集群或节点的可用数据库列表中选择要创建服务的数据库。 2. 在服务定义屏幕中添加或删除服务。点击“Add”按钮,输入服务名称后点击“OK”。 3. 为服务添加凭据,包括服务将运行的实例、首选实例和备用实例。 4. 定义服务是否受透明应用程序故障转移(TAF)策略约束,Oracle 提供了 NONE、BASIC 和 PRECONNECT 三种策略,根据服务需求选择合适的策略。 5. 点击“Finish”开始服务配置,配置成功后将显示完成状态窗口。 - **注意事项**:使用 DBCA 添加到数据库的服务会自动添加到 OCR 中,同时会在服务器的 tnsnames.ora 文件中添加条目,并自动启动服务。可以使用服务器控制(srvctl)和集群状态实用程序(crs_stat)查看服务。 - **服务器控制(srvctl)实用程序** - **添加服务**:使用以下语法添加服务: ```plaintext srvctl add service -d <name> -s <service_name> -r <preferred_list> [-a "<available_list>"] ``` 例如: ```plaintext [oracle@oradb4 oracle]$ srvctl add service -d SSKYDB -s SRV1 -r SSKY1 -a SSKY2 ``` - **启动服务**:添加的服务不会自动启动,需要使用以下命令启动: ```plaintext srvctl start service -d <name> [-s "<service_name_list>" [-i <inst_name>]] ``` 例如: ```plaintext [oracle@oradb4 oracle]$ srvctl start service -d SSKYDB -s SRV1 -i SSKY1 ``` - **检查服务状态**:可以使用以下语法检查服务配置或状态: ```plaintext srvctl status database -d <database name> ``` 例如: ```plaintext [oracle@oradb4 oracle]$ srvctl status database -d SSKYDB -f -v Instance SSKY1 is running on node oradb4 with online services SRV2 SRV1 Instance SSKY2 is not running on node oradb3 ``` - **PL/SQL 程序** Oracle 提供了 PL/SQL 包(DBMS_SERVICE)来创建和维护应用服务。表 1 列出了 DBMS_SERVICE 包下的子程序: |子程序|描述| | ---- | ---- | |CREATE_SERVICE|创建服务,需要服务名称和网络名称作为参数。服务名称是用户定义的名称,最长可达 64 个字符,网络名称用于所有 SQL*Net 相关的连接描述和数据收集。| |DELETE_SERVICE|删除已存在的服务。| |DISCONNECT_SESSION|断开服务的活动会话。| |MODIFY_SERVICE|提供修改现有服务定义的选项。| |START_SERVICE|启动服务。使用 CREATE_SERVICE 创建服务后,需要使用 START_SERVICE 启动服务,以便外部用户可以访问。| |STOP_SERVICE|停止已启动的服务。| 创建服务的示例代码如下: ```sql SQL> EXEC DBMS_SERVICE.CREATE_SERVICE(SERVICE_NAME=>'SRV5', NETWORK_NAME=>'SRV5'); PL/SQL procedure successfully completed. SQL> EXEC DBMS_SERVICE.START_SERVICE(SERVICE_NAME=>'SRV5', INSTANCE_NAME=>'SSKY2'); PL/SQL procedure successfully completed. ``` 需要注意的是,使用 PL/SQL 创建的服务不会自动添加到 OCR 中,需要使用 srvctl 实用程序手动添加。 - **EM** EM 提供了创建、管理应用服务的界面,该功能在 Database Control 版本和 EM Grid Control 版本中均可用。通过 EM 可以查看已定义的服务,并创建新的服务。如果服务配置了故障转移功能,当节点出现故障时,服务会自动转移到备用实例,但当故障节点恢复上线后,需要 DBA 手动将服务迁回原实例。例如,将服务 SRV8 迁移到实例 RACDB2 的步骤如下: 1. 从 EM 服务界面中点击要迁移的服务 SRV8。 2. 显示包含所有当前配置为运行该服务的实例的屏幕。 3. 选择要迁移到的实例 RACDB2,然后点击“Relocate”。操作完成后,将显示状态屏幕。 ### 1.5 服务结构 Clusterware 新增了一项功能,即当当前节点发生故障或需要在其他节点上启动服务时,可以管理和迁移服务。在服务迁移或状态更改过程中,ONS 会自动生成事件进行通知。为了让 Clusterware 管理服务并通知客户端状态更改,所有服务定义都应添加到 OCR 中。除了使用 PL/SQL 程序和 EM 创建的服务外,其他方法创建的服务会自动添加到 OCR 中。如果使用其他方法创建服务,DBA 需要使用 srvctl 实用程序手动将其添加到 OCR 中。OCR 会维护和跟踪服务的定义、可用性和当前状态。可以使用集群状态(crsstat)实用程序查看服务,示例输出如下: ```plaintext [oracle@oradb4 oracle]$ crsstat HA Resource Target State ----------- ------ ----- ora.SSKYDB.SRV1.SSKY1.srv ONLINE ONLINE on oradb4 ora.SSKYDB.SRV1.cs ONLINE ONLINE on oradb4 ora.SSKYDB.SRV2.SSKY1.srv ONLINE ONLINE on oradb4 ora.SSKYDB.SRV2.cs ONLINE ONLINE on oradb4 ora.SSKYDB.SRV3.SSKY2.srv ONLINE ONLINE on oradb4 ora.SSKYDB.SRV3.cs ONLINE ONLINE on oradb3 ora.SSKYDB.SRV6.SSKY1.srv ONLINE ONLINE on oradb4 ora.SSKYDB.SRV6.SSKY2.srv ONLINE ONLINE on oradb3 ora.SSKYDB.SRV6.cs ONLINE ONLINE on oradb4 ``` 从输出中可以看出,一个 HA 服务定义在 OCR 中至少有两个条目。例如,SRV1 配置在 SSKY1 上作为首选实例,由 ora.SSKYDB.SRV1.SSKY1.srv 条目标识,这是 DBA 定义的应用 HA 服务。而 ora.SSKYDB.SRV1.cs 是一个头或复合资源,用于管理相关的依赖资源(这里是 SSKY1)。 创建服务除了以上功能方面的作用外,还可以根据业务标准、服务的需求(用户数量)以及其对整个企业的重要性来分配资源。例如,物料清单(BOM)、应收账款(AR)等应用每天都会被频繁使用,而工资单或订单处理等应用则具有季节性。工资单应用在处理工资时需要更多资源,订单处理应用在假期期间的使用量会更高。 ## 2. 分布式工作负载管理 ### 2.1 需求背景 不同应用对资源的需求在不同时间段有所不同,这给企业资源分配带来了挑战。例如,订单处理应用在假期期间的使用量会增加,企业需要确保该应用在高峰时段有足够的资源,同时又不能限制非季节性应用所需的资源。工资单应用在处理工资时也需要更多资源,而且处理周期可能是每周、每两周或每月一次。为了应对这些挑战,Oracle 在 Oracle Database 10g 中引入了分布式工作负载管理(DWM),根据预定义的业务标准在集群中的各个实例之间分配工作负载。 ### 2.2 实现方式 Oracle 通过增强和集成现有功能,如数据库资源管理器(ODRM)和调度器,来支持 RAC 架构,实现高效的工作负载管理。 #### 2.2.1 Oracle 数据库资源管理器(ODRM) ODRM 允许 DBA 控制数据库用户、应用程序和服务之间可用资源的分配,确保每个用户、应用程序或服务都能公平地获得可用的计算资源。这通过创建预定义的资源计划来实现,资源计划根据资源使用标准(如 CPU 利用率或活动会话数量)将资源分配给不同的消费者组。 ODRM 的主要组件包括: - **资源消费者组**:是具有相似资源需求的用户或服务的集合。一个用户或服务可以分配到多个资源消费者组,但在执行时,一个特定的用户会话只能映射到一个组。例如,定义一个名为 HIGH_P 的资源消费者组,然后将其映射到一个或多个用户或服务。 - **资源计划**:将一个或多个资源消费者组分配给服务,并通过规则或指令定义 ODRM 如何为资源消费者组分配资源。资源计划可以包含多个消费者组和子计划,具体包括: - **通用分配**:基本的资源分配,为每个组分配一定比例的 CPU 资源。例如,一个消费者组有两个级别,级别 1 分配 60% 的 CPU,级别 2 分配 40%。 - **并行度**:指定每个资源消费者组在单个操作中可使用的最大并行执行服务器数量。 - **会话池**:指定消费者组中允许的最大并发活动会话数量。 - **撤销池**:指定消费者组生成的总撤销数据的最大字节数。 - **最大执行时间**:为消费者组完成操作分配的最大时间(以秒为单位)。 - **消费者组切换**:定义会话自动切换到另一个消费者组的标准。当满足定义的标准时,会话将切换到指定的备用组。 #### 2.2.2 Oracle 调度器 Oracle 用新的 Oracle 调度器(DBMS_SCHEDULER)取代了旧的 DBMS_JOB 包,用于提交和调度数据库作业。Oracle 调度器提供了调度功能,帮助 DBA 管理数据库维护和其他日常任务。它可以将具有共同特征和行为的作业分组为更大的实体,即作业类,并通过控制分配给每个类的资源和将服务映射到类来对作业类进行优先级排序。 Oracle 调度器具有以下优势: - **模块化**:调度器作业是模块化的,可以与其他用户共享,减少创建新作业时的开发时间。 - **可迁移性**:作为数据库功能,Oracle 调度器可以利用标准的维护功能(如导出/导入)将作业从一个系统迁移到另一个系统。 - **作业分组**:支持作业分组,实现调度事件的链式依赖。 - **日志记录**:允许记录活动,提供所有调度器活动的审计跟踪。 - **时区支持**:支持时区,便于在不同时区管理作业。 - **作业优先级**:通过控制在给定时间内可以运行的作业数量来支持作业优先级排序,并有效优化系统资源,确保高优先级作业在低优先级作业之前完成。 - **集成性**:可以与 ODRM 集成,通过创建资源计划来控制作业类之间的资源分配。 - **RAC 特性支持**:支持 RAC 特定的功能,如负载均衡和资源池化。在 RAC 环境中,每个实例都有一个作业队列和作业协调器,作业协调器可以根据需要从其他实例池化资源,实现有效的负载均衡。 Oracle 调度器的架构包括以下组件: - **作业队列**:每个调度器环境都有一个作业队列,用于存储调度器对象的信息,如对象定义、状态更改和与作业相关的历史信息。作业队列可以使用 EM 或 Oracle 提供的 PL/SQL 包 DBMS_SCHEDULER 创建。例如,以下代码创建了一个名为 SRV3 的作业: ```plsql BEGIN SYS.DBMS_SCHEDULER.CREATE_JOB ( JOB_NAME => 'BATCH_USER.SRV3', JOB_TYPE => 'EXECUTABLE', JOB_ACTION => '/u22/app/oracle/batch/batch_srv3.sh', START_DATE => TO_TIMESTAMP_TZ('2005-06-28 America/New_York','YYYY-MM-DD TZR'), JOB_CLASS => 'SRV3', AUTO_DROP => FALSE, ENABLED => TRUE); SYS.DBMS_SCHEDULER.SET_ATTRIBUTE ( NAME => 'BATCH_USER.SRV', ATTRIBUTE => 'restartable', VALUE => TRUE); END; ``` - **作业协调器**:作为作业队列和作业从进程之间的协调者,根据在任何给定实例上安排执行的作业数量,动态生成所需的作业从进程。它可以根据需要动态调整从进程池的大小,以适应作业执行的需求。 - **作业从进程**:负责执行作业,并更新作业队列中的作业信息。 在 RAC 配置中,所有协调器和从进程共享整个集群的一个作业队列,该作业队列定义在 Oracle 数据库中。ODRM 和 Oracle 调度器的增强功能相互集成,并与 Oracle 的新集群管理功能相结合,提供了一个统一的、集成的工作负载管理解决方案。 ### 2.3 DWM 示例 为了更好地理解分布式工作负载管理的实现方式,下面通过一个具体的示例进行说明。假设有一个全球运营组织,希望在一个四节点 RAC 上配置五个应用程序,这些应用程序的业务需求如下: |应用程序|服务|服务类型|首选实例|可用实例|优先级/重要性| | ---- | ---- | ---- | ---- | ---- | ---- | |SRV1|SRV1|客户端应用|SSKY1, SSKY2, SSKY3|SSKY4|高| |SRV2|SRV2|客户端应用|SSKY4|SSKY2, SSKY3|标准| |SRV3|SRV3|计划作业|SSKY4|SSKY3, SSKY1|标准| |SRV4|SRV4|客户端应用|SSKY1, SSKY2, SSKY3|无|低| |SRV6|SRV6|季节性应用|SSKY3, SSKY4|SSKY2, SSKY1|高| #### 2.3.1 配置步骤 1. **服务到实例的映射**:使用 SRVCTL 实用程序将应用程序映射到相应的实例,并设置首选/可用规则: ```plaintext srvctl add service -d SSKYDB -s SRV1 -r SSKY1,SSKY2,SSKY3 -a SSKY4 srvctl add service -d SSKYDB -s SRV2 -r SSKY4 -a SSKY2,SSKY3 srvctl add service -d SSKYDB -s SRV3 -r SSKY4 -a SSKY3,SSKY1 srvctl add ```
corwn 最低0.47元/天 解锁专栏
赠100次下载
继续阅读 点击查看下一篇
profit 400次 会员资源下载次数
profit 300万+ 优质博客文章
profit 1000万+ 优质下载资源
profit 1000万+ 优质文库回答
复制全文

相关推荐

LI_李波

资深数据库专家
北理工计算机硕士,曾在一家全球领先的互联网巨头公司担任数据库工程师,负责设计、优化和维护公司核心数据库系统,在大规模数据处理和数据库系统架构设计方面颇有造诣。
最低0.47元/天 解锁专栏
赠100次下载
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
千万级 优质文库回答免费看