Pular para o conteúdo

ORACLE E MAA (Maximum Availability Architecture) – Parte VIII – Fast-Start Failover

Fast-Start Failover

Depois de configurar o Broker, precisamos de um último passo para garantir que os requisitos básicos do MAA estejam contemplados. Nos últimos artigos passamos por alguns passos que provavelmente você não iria realizar em produção (e nem gostaria), fizemos o failover e o switchover (ambos com o broker – que configuramos aqui).

OITAVO ARTIGO

Neste artigo vamos configurar/adicionar ao ambiente a figura do Observer, será habilitado o Fast-Start Failover (FSFO) no Broker para permitir um monitoramento em tempo real do ambiente. Com isso, em uma eventual falha do ambiente primary o standby irá assumir o papel sem ser necessário executar qualquer comando.

AMBIENTE

Até o momento, temos o banco “maa” operando como primary e o banco “maastb” operando como standby. Além disso temos o Broker configurado e gerenciando o ambiente, mas não temos o Fast-Start Failover monitorando o ambiente. Aqui, vamos configurá-lo para ter garantia em eventuais falhas.

FAST-START FAILOVER

Como disse acima, o ambiente ainda não está sendo monitorado de forma automática, mas já temos a replicação ocorrendo de forma ativa e garantindo o Maximum Availability. Temos o Broker que nos ajuda a manter a configuração de ambos os sites correta e permite uma operação mais facilitada através de um único console. Como mostrado em artigos anteriores o switchover e failover através do Broker são bem mais “simples” do que os manuais (aqui e aqui).

Mas e se o evento de falha ocorrer no meio da noite? Você tem uma equipe operando o seu ambiente em 24×7? Claro que isso depende do tamanho do ambiente e sua criticidade, mas em muitos casos não existe tal equipe e você ainda assim tem que manter seu ambiente em alta disponibilidade. Então, o que você faz?

A resposta é simples: Fast-Start Failover. Mas o que é isso? O Fast-Start Failover é uma funcionalidade do DataGuard (habilitada através do Broker ou Enterprise Manager) que em uma indisponibilidade do primary faz a troca automática de papeis com um standby definido. Claro que para isso é necessário configurar e definir alguns detalhes.

Antes de tudo um ponto que acredito ser crucial é garantir que a sua aplicação esteja preparada para conseguir conectar em ambos os locais (primary e santdby). No momento de uma falha a troca de papeis será automática e sua aplicação tem que estar preparada para conectar no novo primary automaticamente, você deve garantir que o TNS utilizado está correto (com as duas entradas de host e com service_name).

O segundo detalhe é configurar o Observer, ele é um dos requisitos do Fast-Start Failover e tem a função crucial de validar/verificar/testar/garantir a disponibilidade do primary. De forma resumida vamos fazer a seguinte analogia: o Observer “pergunta” de tempos em tempos para o primary se ele está online, para o standby faz a mesma pergunta e também verifica se este está vendo o primary. Em uma indisponibilidade do primary o Observer registra a falha do primary e pergunta ao standby se ele está “vendo” o primary se a reposta for negativa e não houver conexão/volta do primary dentro do prazo definido a troca de papeis é iniciada.

Observer

Como descrito acima o Observer é fundamental para o funcionamento do Fast-Start Failover, sem ele é impossível garantir de forma automatizada que o ambiente está funcionando corretamente. Ele opera de forma separada do primary, standby e do Broker; fica instalado em um servidor separado.

Aqui um detalhe, tenho por regra deixar o Observer no mesmo site que o ambiente primary. Utilizo assim, pois na eventualidade de uma falha de comunicação do site standby não ocorre troca de papeis, primary, Observer e aplicação ficam no mesmo site.

A configuração do Observer é bem simples, na realidade você só precisa instalar o Oracle Client em qualquer servidor e na escolha dos pacotes garantir que o DGMGRL estará instalado. Aqui no artigo ele foi instalado em um Linux.

Depois de instalado o Client Oracle o único passo passo é configurar o TNS para contemplar tanto entradas para o primary quanto ao standby. Abaixo foi realizada a alteração do TNS e os testes de acesso a ambos:

[oracle@sbdobs ~]$ vi /u01/app/oracle/product/11.2.0.3/client_1/network/admin/tnsnames.ora

[oracle@sbdobs ~]$ cat /u01/app/oracle/product/11.2.0.3/client_1/network/admin/tnsnames.ora

maa =

  (DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = rac11pri-scan.tjsc.jus.br)(PORT = 1521))

(CONNECT_DATA =

  (SERVER = DEDICATED)

  (SERVICE_NAME = maa)

)

  )

maastb =

  (DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = rac11stb-scan.tjsc.jus.br)(PORT = 1521))

(CONNECT_DATA =

  (SERVER = DEDICATED)

  (SERVICE_NAME = maastb)

)

  )

[oracle@sbdobs ~]$

[oracle@sbdobs ~]$ tnsping maa

TNS Ping Utility for Linux: Version 11.2.0.3.0 - Production on 06-JUL-2014 23:18:57

Copyright (c) 1997, 2011, Oracle.  All rights reserved.

Used parameter files:

Used TNSNAMES adapter to resolve the alias

Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = rac11pri-scan.tjsc.jus.br)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = maa)))

OK (60 msec)

[oracle@sbdobs ~]$ tnsping maastb

TNS Ping Utility for Linux: Version 11.2.0.3.0 - Production on 06-JUL-2014 23:19:02

Copyright (c) 1997, 2011, Oracle.  All rights reserved.

Used parameter files:

Used TNSNAMES adapter to resolve the alias

Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = rac11stb-scan.tjsc.jus.br)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = maastb)))

OK (0 msec)

[oracle@sbdobs ~]$

CONFIGURANDO FAST-START FAILOVER NO BROKER

Depois de instalar o Observer e ajustar o seu TNS precisamos configurar Fast-Start Failover no Broker. Considero que o primeiro passo é verificar se o ambiente está operando em Maximum Availability (fiz isso através do Broker):

DGMGRL> SHOW CONFIGURATION VERBOSE;

Configuration - dgrac

  Protection Mode: MaxAvailability

  Databases:

maa    - Primary database

maastb - Physical standby database

  Properties:

FastStartFailoverThreshold      = '30'

OperationTimeout                = '30'

FastStartFailoverLagLimit       = '30'

CommunicationTimeout            = '180'

FastStartFailoverAutoReinstate  = 'TRUE'

FastStartFailoverPmyShutdown    = 'TRUE'

BystandersFollowRoleChange      = 'ALL'

Fast-Start Failover: DISABLED

Configuration Status:

SUCCESS

DGMGRL>

Acima, observe que o Fast-Start Failover aparece como DISABLED, isso significa que nada foi configurado ou que não foi definido nenhum de seus parâmetros. Se você quiser confirmar basta executar os comandos abaixo (note que foi verificado para cada banco participante do DG).

DGMGRL> SHOW DATABASE maa FastStartFailoverTarget

  FastStartFailoverTarget = ''

DGMGRL> SHOW DATABASE maastb FastStartFailoverTarget

  FastStartFailoverTarget = ''

DGMGRL>

A configuração inicial do Fast-Start Failover é simples, basta adicionar/configurar no Broker o parâmetro FastStartFailoverTarget. Através deste você define qual o alvo para cada ambiente que compõe seu DataGuard. É necessário especificar para ao primary qual o standby preferencial em caso de troca de papeis; e para o standby qual o primary (tem que fazer isso para cada standby existente).

DGMGRL> EDIT DATABASE maa SET PROPERTY FastStartFailoverTarget = maastb;

Property "faststartfailovertarget" updated

DGMGRL> EDIT DATABASE maastb SET PROPERTY FastStartFailoverTarget = maa;

Property "faststartfailovertarget" updated

DGMGRL>

Para verificar como está a configuração do Fast-Start Failover basta executar o comando abaixo no Broker, diferentemente dos anteriores este contêm mais detalhes. Observe o parâmetro Threshold, ele nos informa depois de quanto tempo de indisponibilidade do primary é que ocorre a troca de papeis. Perceba que este é tempo em segundos até que a troca inicie efetivamente, se você tem requisitos menores que esse tempo vai ter que reduzi-lo (lembre-se de contar que ainda terá o tempo gasto na troca em si). Caso você queira aumentar este valor utilize o comando abaixo.

DGMGRL> SHOW FAST_START FAILOVER;

Fast-Start Failover: DISABLED

  Threshold:        30 seconds

  Target:           (none)

  Observer:         (none)

  Lag Limit:        30 seconds

  Shutdown Primary: TRUE

  Auto-reinstate:   TRUE

Configurable Failover Conditions

  Health Conditions:

Corrupted Controlfile          YES

Corrupted Dictionary           YES

Inaccessible Logfile            NO

Stuck Archiver                  NO

Datafile Offline               YES

  Oracle Error Conditions:

(none)

DGMGRL>

A documentação da Oracle sugere que em ambientes com Oracle RAC esse valor deve ser aumentado para evitar casos de falso positivos. Quando uma instância do Oracle RAC falha pode existir um “congelamento” das outras até a reorganização do cluster e isso pode gerar ao Observer a falsa impressão de queda completa do Primary (isso está descrito no Oracle® Data Guard Broker 11g Release 2):

DGMGRL> EDIT CONFIGURATION SET PROPERTY FastStartFailoverThreshold = 60;

Property "faststartfailoverthreshold" updated

DGMGRL>

DGMGRL> SHOW CONFIGURATION FastStartFailoverThreshold;

  FastStartFailoverThreshold = '60'

DGMGRL>

Iniciando o Observer

O primeiro passo a ser feito é iniciar o Observer. Isso pode ser feito através de alguns comandos, o primeiro é com o DGMGRL:

[oracle@sbdobs ~]$ dgmgrl -logfile /u01/app/oracle/product/11.2.0.3/client_1/dgmgrl-obs-maa.log

DGMGRL for Linux: Version 11.2.0.3.0 - 64bit Production

Copyright (c) 2000, 2009, Oracle. All rights reserved.

Welcome to DGMGRL, type "help" for information.

DGMGRL> CONNECT sys@maa;

Password:

Connected.

DGMGRL>

Veja que ele foi iniciado passando como parâmetro o LOGFILE para direcionar a saída para um arquivo. Isso não é um requisito mas é uma boa prática para permitir acessar o log do que ocorreu com o Observer. Caso inicie mais de um Observer (para DG’s diferentes) no mesmo servidor você deve usar arquivo separados.

Até o momento o Observer não foi iniciado, para isso basta executar o seguinte comando:

DGMGRL> START OBSERVER FILE = '/u01/app/oracle/product/11.2.0.3/client_1/observer-maa.log'

Com isso o Observer estará presente no ambiente e o Broker e o Fast-Start Failover pode ser habilitado. O parâmetro FILE serve para definir o local onde fica o arquivo binário de controle do Observer e evita que mais de um seja iniciado para o mesmo DG (por padrão o local do arquivo é no diretório atual em que foi chamado o dgmgrl).

Um detalhe, ao iniciar o Observer o console não retorna e fica “preso”, esse é o método padrão e força você a deixar sessões (com o X ou WTS) abertas no servidor. Existe a possibilidade de iniciar o Observer e retornar ao console, mas você terá que definir os dois arquivos de log conforme abaixo (veja também como fica o processo no Linux):

[oracle@sbdobs ~]$ dgmgrl -logfile /u01/app/oracle/product/11.2.0.3/client_1/dgmgrl-obs-maa.log sys/oracle@maastb "START OBSERVER FILE = '/u01/app/oracle/product/11.2.0.3/client_1/observer-maa.log'" &

[1] 5351

[oracle@sbdobs ~]$ DGMGRL for Linux: Version 11.2.0.3.0 - 64bit Production

Copyright (c) 2000, 2009, Oracle. All rights reserved.

Welcome to DGMGRL, type "help" for information.

Connected.

[oracle@sbdobs ~]$

[oracle@sbdobs ~]$ ps -ef |grep dgmgrl

oracle    5351  5252  0 22:18 pts/1    00:00:00 dgmgrl -logfile /u01/app/oracle/product/11.2.0.3/client_1/dgmgrl-obs-maa.log                   START OBSERVER FILE = '/u01/app/oracle/product/11.2.0.3/client_1/observer-maa.log'

oracle    5357  5252  0 22:19 pts/1    00:00:00 grep dgmgrl

[oracle@sbdobs ~]$

Para parar qualquer Observer utilizar o comando “STOP OBSERVER” através do dgmgrl conectado ao DG.

Habilitando Fast-Start Failover

Depois de todos os requisitos cumpridos podemos habilitar o Fast-Start Failover no Broker. Primeiro veja abaixo como está a configuração:

DGMGRL> SHOW FAST_START FAILOVER;

Fast-Start Failover: DISABLED

  Threshold:        60 seconds

  Target:           (none)

  Observer:         sbdobs

  Lag Limit:        30 seconds

  Shutdown Primary: TRUE

  Auto-reinstate:   TRUE

Configurable Failover Conditions

  Health Conditions:

Corrupted Controlfile          YES

Corrupted Dictionary           YES

Inaccessible Logfile            NO

Stuck Archiver                  NO

Datafile Offline               YES

  Oracle Error Conditions:

(none)

DGMGRL>

Verifique que o parâmetro Observer já está preenchido, bem como o Threshold definido com o que especificamos. Além disso temos que a configuração está DISABLED e nenhum Target para monitoramento está aparecendo. Para habilitar o Fast-Start Failover basta executar o seguinte comando:

DGMGRL> ENABLE FAST_START FAILOVER;

Enabled.

DGMGRL>

Se olharmos no log do Broker neste momento teremos a seguinte informação:

07/07/2014 05:53:53

ENABLE FAST_START FAILOVER

Fast-Start Failover (FSFO) has been enabled between:

  Primary = "maa"

  Standby = "maastb"

07/07/2014 05:53:58

Command ENABLE FAST_START FAILOVER completed

A partir deste momento temos o nosso ambiente DG configurado e com o monitoramento através do Fast-Start Failover. No caso de indisponibilidade o ambiente primário “maa” irá trocar os papeis com o “maastb” sem a necessidade de intervenção humana.

Por fim, a configuração final do Fast-Start Failover será:

DGMGRL> SHOW FAST_START FAILOVER;

Fast-Start Failover: ENABLED

  Threshold:        60 seconds

  Target:           maastb

  Observer:         sbdobs

  Lag Limit:        30 seconds (not in use)

  Shutdown Primary: TRUE

  Auto-reinstate:   TRUE

Configurable Failover Conditions

  Health Conditions:

Corrupted Controlfile          YES

Corrupted Dictionary           YES

Inaccessible Logfile            NO

Stuck Archiver                  NO

Datafile Offline               YES

  Oracle Error Conditions:

(none)

DGMGRL> SHOW CONFIGURATION VERBOSE;

Configuration - dgrac

  Protection Mode: MaxAvailability

  Databases:

maa    - Primary database

maastb - (*) Physical standby database

  (*) Fast-Start Failover target

  Properties:

FastStartFailoverThreshold      = '60'

OperationTimeout                = '30'

FastStartFailoverLagLimit       = '30'

CommunicationTimeout            = '180'

FastStartFailoverAutoReinstate  = 'TRUE'

FastStartFailoverPmyShutdown    = 'TRUE'

BystandersFollowRoleChange      = 'ALL'

Fast-Start Failover: ENABLED

  Threshold:        60 seconds

  Target:           maastb

  Observer:         sbdobs

  Lag Limit:        30 seconds (not in use)

  Shutdown Primary: TRUE

  Auto-reinstate:   TRUE

Configuration Status:

SUCCESS

DGMGRL>

Erros de Observer

Caso ocorra algum erro no Observer (como ficar off-line por falha do servidor) os erros poderão ser consultados através do console do dgmgrl como demonstrado abaixo:

DGMGRL> SHOW CONFIGURATION VERBOSE;

Configuration - dgrac

  Protection Mode: MaxAvailability

  Databases:

maa    - Primary database

  Warning: ORA-16819: fast-start failover observer not started

maastb - (*) Physical standby database

  Warning: ORA-16819: fast-start failover observer not started

  (*) Fast-Start Failover target

  Properties:

FastStartFailoverThreshold      = '60'

OperationTimeout                = '30'

FastStartFailoverLagLimit       = '30'

CommunicationTimeout            = '180'

FastStartFailoverAutoReinstate  = 'TRUE'

FastStartFailoverPmyShutdown    = 'TRUE'

BystandersFollowRoleChange      = 'ALL'

Fast-Start Failover: ENABLED

  Threshold:        60 seconds

  Target:           maastb

  Observer:         (none)

  Lag Limit:        30 seconds (not in use)

  Shutdown Primary: TRUE

  Auto-reinstate:   TRUE

Configuration Status:

WARNING

DGMGRL>

Verifique que neste caso não existe mais o monitoramento do Fast-Start Failover, sem o Observer não existe a garantia e a troca de papeis não irá ocorrer em caso de falhas e nada irá ocorrer em caso de falha do primary. Para corrigir basta subir o Observer que automaticamente o Fast-Start Failover irá voltar a normalidade.

AMBIENTE FINAL

Com o Fast-Start Failover temos um ambiente configurado e que segue as melhores práticas do MAA. No momento temos um ambiente Oracle RAC Primary que está replicado através de Data Guard e operando em Maximum Availability (em Real-Time), sendo que o ambiente Standby também é um Oracle RAC com as mesmas configurações. Além disso temos tudo isso sendo monitorado através de Fast-Start Failover que garante em caso de falha do ambiente primary o chaveamento para o standby sem qualquer necessidade de intervenção humana.

Este artigo também está publicado em meu blog pessoal neste link.

Fernando Simon

Fernando Simon

Fernando Simon, administrador de banco de dados para o Tribunal de Justiça de Santa Catarina e também como consultor na mesm área no tempo livre. Mantenho um blog (http://www.fernandosimon.com/blog) com informações para o dia a dia de um DBA e DMA Exadata.

Experiência com bancos de dados desde 2004, Oracle (9i e posteriores), SQLServer (versões desde a 2k5) e PortgreSQL (7, 8 e 9). Além de áreas relacionadas como storage, soluções de backup, virtualização e afins.

Database Machine Administrator (DMA) Exadata desde 2010, usuário e administrador (configuração, atualização e manutenção) da solução Exadata desde a versão V2. Administrador de soluções MAA (DataGuard, Rac e afins), Gerenciamento de Recursos (Database Resource Manager e IO Resource Manager - IORM) para banco de dados Oracle e Oracle Exadata.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress