Este capítulo examina a estrutura do gerenciamento de recurso e descreve um projeto de consolidação de servidor hipotético.
Os tópicos a seguir são tratados neste capítulo:
Neste exemplo, cinco aplicativos estão sendo consolidados em um único sistema. Os aplicativos de destino têm requisitos de recurso que variam, diferentes populações de usuários e diferentes arquiteturas. Atualmente, cada aplicativo existe em um servidor dedicado que foi projetado para atender os requisitos do aplicativo. Os aplicativos e suas características são identificados no quadro abaixo.
Descrição do aplicativo |
Características |
---|---|
Servidor do aplicativo |
Exibe escalabilidade negativa acima de 2 CPUs |
Instância do banco de dados para o servidor do aplicativo |
Processamento de transação pesada |
Servidor do aplicativo em ambiente de teste e desenvolvimento |
Baseado em GUI, com execução de código não testado |
Servidor de processamento de transação |
A preocupação principal é o tempo de resposta |
Instância de banco de dados independente |
Processa um grande número de transações e serve várias regiões |
A configuração a seguir é usada para consolidar os aplicativos em um único sistema.
O servidor do aplicativo tem um conjunto de processadores com duas CPUs.
A instância do banco de dados para o servidor do aplicativo e a instância do banco de dados independente são consolidadas em um único conjunto de processadores com pelo menos quatro CPUs. À instância do banco de dados independente são garantidos 75 por cento desse recurso.
O servidor do aplicativo de teste e desenvolvimento requer a classe de agendamento IA para assegurar a resposta da IU. Limitações de memória são impostas para diminuir os efeitos de construções de código incorretas.
Ao servidor do processamento de transação é atribuído um conjunto de processadores dedicados com pelo menos duas CPUs, para minimizar latência de resposta.
Esta configuração abarca aplicativos conhecidos que estão sendo executados e consumindo ciclos do processador em cada conjunto de recursos. Assim, podem ser estabelecidas restrições que permitem que o recurso do processador seja transferido para conjuntos em que o recurso é necessário.
O objetivo de wt-load é definido para permitir que conjuntos de recursos intensamente utilizados recebam maiores alocações de recursos do que conjuntos com menor utilização.
O objetivo locality é definido para tight, que é usado para maximizar a localidade do processador.
Também é aplicada uma restrição adicional para impedir que a utilização ultrapasse 80 por cento de qualquer conjunto de recursos. Esta restrição garante que os aplicativos tenham acesso aos recursos de que necessitam. Além disso, para o conjunto de processadores de transação, o objeto de manter a utilização abaixo de 80 por cento é duas vezes mais importante do que quaisquer outros objetivos especificados. Esta importância será definida na configuração.
Edite o arquivo do banco de dados /etc/project. Adicione entradas para implementar os controles de recursos necessários e mapear usuários para grupos de recursos, em seguida visualize o arquivo.
# 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) . . . |
A equipe de desenvolvimento tem de executar tarefas no projeto de desenvolvimento porque o acesso para este projeto é baseado em um ID de grupo de usuários (GID).
Crie um arquivo de entrada nomeado pool.host, que será usado para configurar os grupos de recursos necessários. Visualize o arquivo.
# 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") |
Atualize a configuração usando o arquivo de entrada pool.host.
# poolcfg -f pool.host |
Ative a configuração.
# pooladm -c |
A estrutura agora está funcional no sistema.
Para visualizar a configuração da estrutura, que também contém elementos padrão criados pelo sistema, digite:
# 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 |
Segue-se uma representação gráfica da estrutura.
No grupo db_pool, à instância do banco de dados independente são garantidos 75 por cento do recurso da CPU.