本章概述了资源管理框架,并介绍虚拟的服务器整合项目。
本章包含以下主题:
在此示例中,要将五个应用程序整合到单个系统中。目标应用程序具有不同的资源需求、用户群和体系结构。当前,每个应用程序都位于旨在满足应用程序要求的专用服务器上。下表介绍了各个应用程序及其特征。
应用程序说明 |
特征 |
---|---|
应用服务器 |
CPU 超过 2 个时,可伸缩性会降低 |
应用服务器的数据库实例 |
超负荷的事务处理 |
测试和开发环境中的应用服务器 |
基于 GUI,并且执行未经测试的代码 |
事务处理服务器 |
主要顾虑是响应时间 |
独立数据库实例 |
处理大量事务并为多个时区提供服务 |
以下配置用于将应用程序整合到单个系统中。
应用服务器具有一个双 CPU 处理器集。
将应用服务器的数据库实例和独立数据库实例整合到一个至少具有四个 CPU 的处理器集中。保证为独立数据库实例留出 75% 的资源。
测试和开发应用服务器需要 IA 调度类,以确保 UI 的响应。对内存强加限制,以减轻错误代码造成的影响。
将事务处理服务器指定给一个至少具有两个 CPU 的专用处理器集,以最大程度地缩短响应时间。
此配置适用于执行和占用每个资源集中的处理器时钟周期的已知应用程序。因此,可以建立约束,以便将处理器资源转移到需要资源的集中。
wt-load 目标设置为允许高利用率资源集比低利用率资源集获得更多的资源分配。
locality 目标设置为 tight,这用于最大化处理器的邻近性。
此外还应用了其他约束,以防止利用率超过任何资源集的 80%。此约束确保应用程序可以访问所需的资源。此外,对于事务处理器集,保持利用率低于 80% 的目标的重要性是指定的任何其他目标的两倍。这种重要性将在配置中定义。
编辑 /etc/project 数据库文件。添加条目以实现所需的资源控制并将用户映射到资源池,然后查看此文件。
# cat /etc/project . . . user.app_server:2001:Production Application Server:::project.pool=appserver_pool user.app_db:2002:App Server DB:::project.pool=db_pool;project.cpu-shares=(privileged,1,deny) development:2003:Test and development::staff:project.pool=dev_pool; process.max-address-space=(privileged,536870912,deny)keep with previous line user.tp_engine:2004:Transaction Engine:::project.pool=tp_pool user.geo_db:2005:EDI DB:::project.pool=db_pool;project.cpu-shares=(privileged,3,deny) . . . |
开发小组必须执行开发项目中的任务,因为对此项目的访问基于用户的组 ID (group ID, GID)。
创建名为 pool.host 的输入文件,此文件将用于配置所需的资源池。查看此文件。
# cat pool.host create system host create pset dev_pset (uint pset.min = 0; uint pset.max = 2) create pset tp_pset (uint pset.min = 2; uint pset.max=8) create pset db_pset (uint pset.min = 4; uint pset.max = 6) create pset app_pset (uint pset.min = 1; uint pset.max = 2) create pool dev_pool (string pool.scheduler="IA") create pool appserver_pool (string pool.scheduler="TS") create pool db_pool (string pool.scheduler="FSS") create pool tp_pool (string pool.scheduler="TS") associate pool dev_pool (pset dev_pset) associate pool appserver_pool (pset app_pset) associate pool db_pool (pset db_pset) associate pool tp_pool (pset tp_pset) modify system tester (string system.poold.objectives="wt-load") modify pset dev_pset (string pset.poold.objectives="locality tight; utilization < 80") modify pset tp_pset (string pset.poold.objectives="locality tight; 2: utilization < 80") modify pset db_pset (string pset.poold.objectives="locality tight;utilization < 80") modify pset app_pset (string pset.poold.objectives="locality tight; utilization < 80") |
使用 pool.host 输入文件更新配置。
# poolcfg -f pool.host |
使配置处于活动状态。
# pooladm -c |
现在框架可在系统上正常运行。
要查看框架配置(此配置还包含由系统创建的缺省元素),请键入:
# pooladm system host string system.comment int system.version 1 boolean system.bind-default true int system.poold.pid 177916 string system.poold.objectives wt-load pool dev_pool int pool.sys_id 125 boolean pool.default false boolean pool.active true int pool.importance 1 string pool.comment string pool.scheduler IA pset dev_pset pool appserver_pool int pool.sys_id 124 boolean pool.default false boolean pool.active true int pool.importance 1 string pool.comment string pool.scheduler TS pset app_pset pool db_pool int pool.sys_id 123 boolean pool.default false boolean pool.active true int pool.importance 1 string pool.comment string pool.scheduler FSS pset db_pset pool tp_pool int pool.sys_id 122 boolean pool.default false boolean pool.active true int pool.importance 1 string pool.comment string pool.scheduler TS pset tp_pset pool pool_default int pool.sys_id 0 boolean pool.default true boolean pool.active true int pool.importance 1 string pool.comment string pool.scheduler TS pset pset_default pset dev_pset int pset.sys_id 4 string pset.units population boolean pset.default false uint pset.min 0 uint pset.max 2 string pset.comment boolean pset.escapable false uint pset.load 0 uint pset.size 0 string pset.poold.objectives locality tight; utilization < 80 pset tp_pset int pset.sys_id 3 string pset.units population boolean pset.default false uint pset.min 2 uint pset.max 8 string pset.comment boolean pset.escapable false uint pset.load 0 uint pset.size 0 string pset.poold.objectives locality tight; 2: utilization < 80 cpu int cpu.sys_id 1 string cpu.comment string cpu.status on-line cpu int cpu.sys_id 2 string cpu.comment string cpu.status on-line pset db_pset int pset.sys_id 2 string pset.units population boolean pset.default false uint pset.min 4 uint pset.max 6 string pset.comment boolean pset.escapable false uint pset.load 0 uint pset.size 0 string pset.poold.objectives locality tight; utilization < 80 cpu int cpu.sys_id 3 string cpu.comment string cpu.status on-line cpu int cpu.sys_id 4 string cpu.comment string cpu.status on-line cpu int cpu.sys_id 5 string cpu.comment string cpu.status on-line cpu int cpu.sys_id 6 string cpu.comment string cpu.status on-line pset app_pset int pset.sys_id 1 string pset.units population boolean pset.default false uint pset.min 1 uint pset.max 2 string pset.comment boolean pset.escapable false uint pset.load 0 uint pset.size 0 string pset.poold.objectives locality tight; utilization < 80 cpu int cpu.sys_id 7 string cpu.comment string cpu.status on-line pset pset_default int pset.sys_id -1 string pset.units population boolean pset.default true uint pset.min 1 uint pset.max 4294967295 string pset.comment boolean pset.escapable false uint pset.load 0 uint pset.size 0 cpu int cpu.sys_id 0 string cpu.comment string cpu.status on-line |
下面是框架的图形表示。
在池 db_pool 中,保证为独立数据库实例留出 75% 的 CPU 资源。