Início / Trilha 5 / Conteúdo / Tópico 1
1

Oracle RAC - Real Application Clusters

Conceitos, arquitetura, cluster interconnect e cache fusion

📖

Definição

O que é Oracle RAC?

Oracle Real Application Clusters (RAC) é uma solução de alta disponibilidade e escalabilidade que permite que múltiplas instâncias Oracle rodando em diferentes servidores físicos acessem simultaneamente um único banco de dados compartilhado.

Ao contrário de arquiteturas tradicionais onde uma instância é ativa e outras em standby, no RAC todas as instâncias são ativas simultaneamente, processando transações em paralelo e compartilhando a mesma base de dados.

Componentes Principais:

  • Oracle Clusterware: Software de cluster que gerencia disponibilidade de recursos
  • Cluster Interconnect: Rede privada de alta velocidade para comunicação entre nós
  • Shared Storage: Armazenamento compartilhado (ASM/SAN) acessível por todos os nós
  • Cache Fusion: Tecnologia para sincronizar blocos de dados entre memórias dos nós
  • Voting Disk: Mecanismo de quorum para prevenir split-brain
  • OCR (Oracle Cluster Registry): Repositório de configuração do cluster

Arquitetura RAC

┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│   Nó 1      │    │   Nó 2      │    │   Nó 3      │
│             │    │             │    │             │
│ Instância 1 │    │ Instância 2 │    │ Instância 3 │
│   SGA + PGA │    │   SGA + PGA │    │   SGA + PGA │
└──────┬──────┘    └──────┬──────┘    └──────┬──────┘
       │                  │                  │
       └──────────┬───────┴──────────┬───────┘
                  │ Interconnect     │
                  │ (Cache Fusion)   │
                  └──────────┬────────┘
                             │
                    ┌────────┴────────┐
                    │ Shared Storage  │
                    │  (ASM / SAN)    │
                    │                 │
                    │ Datafiles       │
                    │ Control Files   │
                    │ Redo Logs       │
                    │ OCR & Voting    │
                    └─────────────────┘
          

Vantagens do RAC

  • Alta disponibilidade: falha de nó não para o banco
  • Escalabilidade horizontal: adicione servidores
  • Load balancing automático entre instâncias
  • Manutenção rolling (zero downtime)

Desafios do RAC

  • Custo de licenciamento Oracle RAC
  • Complexidade de configuração e administração
  • Necessidade de interconnect de alta velocidade
  • Possível contenção em cache fusion

Cache Fusion: O Coração do RAC

Cache Fusion é a tecnologia que permite que múltiplas instâncias compartilhem blocos de dados em suas respectivas memórias SGA sem passar pelo disco. Quando um nó precisa de um bloco que está modificado na memória de outro nó, o cache fusion transfere o bloco diretamente via interconnect.

Global Cache Service (GCS)

Gerencia o acesso concorrente aos blocos de dados. Mantém informações sobre qual instância possui qual versão de cada bloco (current, consistent read, etc).

Global Enqueue Service (GES)

Gerencia locks e enqueues globalmente no cluster. Coordena acesso a recursos compartilhados como sequences, tabelas temporárias, etc.

Cluster Interconnect

Rede privada dedicada (normalmente InfiniBand ou 10GbE+) para transferência de blocos e mensagens entre nós. Latência deve ser < 1ms para performance ideal.

🛠️

Aplicação Prática

Verificando Status do Cluster RAC

Use os comandos crsctl e srvctl para administrar o cluster:

-- Verificar status geral do cluster
$ crsctl check cluster -all

-- Verificar status do Clusterware
$ crsctl stat res -t

-- Verificar status das instâncias do database
$ srvctl status database -d PRODDB
Instance PRODDB1 is running on node racnode1
Instance PRODDB2 is running on node racnode2
Instance PRODDB3 is running on node racnode3

-- Verificar configuração do database no cluster
$ srvctl config database -d PRODDB

-- Parar uma instância específica
$ srvctl stop instance -d PRODDB -i PRODDB2

-- Iniciar todas as instâncias
$ srvctl start database -d PRODDB

-- Verificar status dos listeners
$ srvctl status listener

Conectando ao RAC: SCAN e VIP

O RAC usa SCAN (Single Client Access Name) para simplificar a conexão de aplicações:

-- Configuração TNS tradicional (específica por nó)
PRODDB1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = racnode1-vip)(PORT = 1521))
    (CONNECT_DATA = (SERVICE_NAME = PRODDB)(INSTANCE_NAME = PRODDB1))
  )

-- Configuração TNS usando SCAN (recomendado)
PRODDB =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan.empresa.com)(PORT = 1521))
    )
    (CONNECT_DATA = (SERVICE_NAME = PRODDB))
  )

-- Easy Connect com SCAN
sqlplus user/pass@rac-scan.empresa.com:1521/PRODDB

-- Verificar services disponíveis
SELECT inst_id, instance_name, host_name, status
FROM gv$instance
ORDER BY inst_id;

-- Ver services e qual instância está servindo
SELECT inst_id, name, network_name
FROM gv$services
ORDER BY inst_id, name;

Monitoramento de Cache Fusion

-- Verificar estatísticas de Global Cache
SELECT * FROM gv$system_event
WHERE event LIKE 'gc%'
ORDER BY inst_id, time_waited DESC;

-- Verificar transferências de blocos entre nós
SELECT inst_id,
       block_gets,
       consistent_gets,
       physical_reads,
       block_changes
FROM gv$buffer_pool_statistics
ORDER BY inst_id;

-- Identificar contenção em cache fusion (top 10)
SELECT SUBSTR(event, 1, 40) event,
       waits,
       time_waited/100 time_waited_sec,
       average_wait
FROM (SELECT event, waits, time_waited, average_wait
      FROM gv$system_event
      WHERE event LIKE 'gc%'
      ORDER BY time_waited DESC)
WHERE ROWNUM <= 10;

-- Verificar interconnect traffic
SELECT name, value/1024/1024 mb_per_sec
FROM gv$sysstat
WHERE name LIKE 'gc%traffic%'
ORDER BY inst_id, name;

-- Ver blocos transferidos via interconnect
SELECT inst_id,
       name,
       value
FROM gv$sysstat
WHERE name IN ('gc blocks received', 'gc blocks served')
ORDER BY inst_id, name;

Services e Load Balancing

-- Criar um service com load balancing
$ srvctl add service -d PRODDB -s APP_SERVICE \
  -r PRODDB1,PRODDB2 -a PRODDB3 \
  -P BASIC -e SELECT -m BASIC -z 180 -w 5

-- Iniciar o service
$ srvctl start service -d PRODDB -s APP_SERVICE

-- Verificar qual instância está servindo o service
SELECT inst_id, service_name, stat_level
FROM gv$services
WHERE service_name = 'APP_SERVICE';

-- Configurar TAF (Transparent Application Failover)
PRODDB_APP =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = APP_SERVICE)
      (FAILOVER_MODE =
        (TYPE = SELECT)
        (METHOD = BASIC)
        (RETRIES = 20)
        (DELAY = 5)
      )
    )
  )

-- Testar failover forçando queda de instância
-- Em sessão conectada, executar em outro terminal:
$ srvctl stop instance -d PRODDB -i PRODDB1 -o immediate
-- A sessão deve migrar automaticamente para outra instância

Resultado Esperado

O que você deve dominar após este tópico:

Entender arquitetura RAC

Componentes, cache fusion, GCS/GES e interconnect

Administrar clusters

Usar crsctl, srvctl para gerenciar recursos

Configurar conectividade

SCAN, VIP, services e load balancing

Monitorar performance

Identificar contenção em cache fusion

Implementar failover

Configurar TAF e Application Continuity

Troubleshooting RAC

Diagnosticar problemas de cluster e interconnect

Métricas de Sucesso em RAC

Interconnect Latency < 1ms

Tempo médio de transferência de blocos entre nós

Cache Fusion Efficiency > 95%

Blocos transferidos sem necessidade de leitura em disco

Failover Time < 30s

Tempo para migração automática de sessões após falha de nó

Load Balance Ratio ± 15%

Distribuição de carga entre instâncias deve ser equilibrada

Voltar ao Índice Próximo: ASM