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.