[IBM i][AIX Solaris HP-UX Linux Windows]

Logs de Transação e Compensação de Armazenamento em um Banco de Dados Relacional para Alta Disponibilidade

Opcionalmente, é possível escolher armazenar os logs de transação e compensação do WebSphere Application Server em um banco de dados relacional em vez de como arquivos do sistema operacional. Este recurso fornece o suporte de alta disponibilidade (HA) sem que seja necessário usar um sistema de arquivo compartilhado.

Sobre Esta Tarefa

O serviço de transações do WebSphere Application Server grava informações em um log de transação para cada transação global que envolve dois ou mais recursos ou que é distribuída entre vários servidores. Essas transações são iniciadas ou paradas por aplicativos ou pelo contêiner no qual são implementados. O serviço de transações mantém logs de transação para assegurar a integridade das transações. As informações são gravadas nos logs de transação na fase de preparação de uma transação distribuída. Se um WebSphere Application Server com transações ativas reiniciar após uma falha, o serviço de transação será capaz de usar os logs para reproduzir qualquer transação indeterminada. Esse nível de integridade permite que o sistema geral seja retornado a um estado consistente.

Nas liberações anteriores do WebSphere Application Server, os logs de transação eram armazenados como arquivos de sistema operacional. No WebSphere Application Server Versão 8.5.5 e posterior, esta configuração permanece a configuração padrão. Também é possível escolher armazenar os logs de transações em um banco de dados relacional. Essa opção de configuração é usada principalmente por um ambiente de alta disponibilidade (HA). Além disso, nas liberações anteriores do WebSphere Application Server, para o suporte de transação de HA era necessário usar um sistema de arquivo compartilhado para hospedar os logs de transações, com um armazenamento conectado à rede (NAS) montada no NFSv4 ou uma rede de área de armazenamento (SAN). Este novo recurso permite que você, principalmente se tiver um investimento em tecnologia de banco de dados de HA, use seu banco de dados de HA como um repositório compartilhado para os logs de transações como uma alternativa ao uso de um sistema de arquivo compartilhado.

Nota: A implementação atual para armazenamento de logs de transações e de compensações em um banco de dados relacional suporta recursos de alta disponibilidade no DB2 e Oracle. Por exemplo, os recursos específicos do cliente, como o DB2 HADR ou o Oracle RAC DataGuard, que permitem reconexão a outra instância de banco de dados se uma falha ocorrer, são suportados. Os recursos de alta disponibilidade em bancos de dados relacionais de outros fornecedores não são atualmente suportados.

Na implementação atual, se exceções JDBC inesperadas forem encontradas pela função de log de recuperação principal, a criação de log de transações será desativada e o servidor deverá ser encerrado para que as transações em andamento possam ser recuperadas. Não será feita nenhuma tentativa de reconexão até que o servidor seja reiniciado e nenhuma tentativa pela implementação atual para determinar se a condição é temporária.

No WebSphere Application Server Versão 8.5.5 e posterior, é possível usar um recurso semelhante, também indicado a clientes que estão trabalhando em um ambiente de HA, para armazenar os logs de recuperação de compensação em um banco de dados relacional. O serviço de compensação do WebSphere Application Server permite que os aplicativos em sistemas diferentes coordenem atividades que são mais fracamente acopladas que as transações atômicas. Ele armazena informações que são necessárias para executar compensação após uma falha do sistema em seus próprios logs de recuperação dedicados.

Evitar Problemas Evitar Problemas: A origem de dados do Log de Recuperação SQL precisa de um valor de tamanho do conjunto máximo de:
(2 * o número de servidores potenciais em uma recuperação peer) + 2
Esse tamanho do conjunto máximo permite conexões suficientes com o banco de dados para fechar todos os log de transações relacionados. Não ter um tamanho do conjunto máximo configurado para esse valor pode levar à mensagem de erro J2CA0045E, pois não há conexões suficientes disponíveis.gotcha

Procedimento

Deve-se configurar o local do log de transação e o local do log de compensação para cada servidor no cluster antes de ativar a alta disponibilidade, configurando os atributos TransactionLogDirectory e CompensationLogDirectory para cada servidor. Cada servidor em um cluster deve referenciar locais de log de transações e de log de compensação exclusivos, especificando uma propriedade tablesuffix distinta para que vários servidores não tentem acessar os recursos do sistema de gerenciamento de banco de dados relacional (RDBMS). Por exemplo, se você tiver um cluster chamado AppCluster com os quatro servidores membros a seguir:
  • AppClusterMember1
  • AppClusterMember2
  • AppClusterMember3
  • AppClusterMember4
É possível definir os sufixos de tabela a seguir para AppCluster:
  • App1 para AppClusterMember1
  • App2 para AppClusterMember2
  • App3 para AppClusterMember3
  • App4 para AppClusterMember4

Conclua as etapas a seguir:

  1. Configure uma origem de dados não transacional para armazenamento de log de recuperação de transação e de compensação:
    1. Crie um provedor JDBC para implementação de RDBMS específica. Especifique um tipo de implementação não XA.
    2. Crie um alias de dados de autenticação JAAS J2C. Esses alias de dados definem as credenciais de segurança que são usadas para conectar ao RDBMS. As credenciais definidas no RDBMS devem ter autoridade suficiente para criar tabelas no banco de dados.
    3. Crie uma origem de dados usando o provedor JDBC criado na etapa a. Seu alias de autenticação gerenciado pelo componente deve ser configurado para o alias JAAS criado na etapa b. Defina a URL para sua a origem de dados para especificar uma conexão com o RDBMS.
    4. Configure a nova origem de dados como não transacional concluindo as etapas a seguir:
      1. Abra a origem de dados recém criada.
      2. Em Propriedades Adicionais, clique em Propriedades da origem de dados do WebSphere Application Server.
      3. Marque a caixa de seleção Origem de dados não transacional.
      4. Salve suas alterações.
  2. Configure o serviço de transações para armazenar transações em um banco de dados relacional:
    1. Em um console administrativo WebSphere Application Server, clique em Servidores > Tipos de Servidor > Servidores de aplicativos WebSphere > server_name. As propriedades do servidor de aplicativos especificado são exibidas.
    2. Na seção Configurações do contêiner, clique em Serviços do Contêiner > Serviço de transação. A página configurações do serviço de transações é exibida.
    3. Selecione a guia Configuração se ela ainda não estiver exibida.
    4. No campo Diretório de log de transação, insira uma sequência customizada para indicar que você deseja que os logs sejam armazenados em um banco de dados. A sequência deve possuir o formato a seguir:
      custom://com.ibm.rls.jdbc.SQLRecoveryLog?datasource=data_source_jndi_name,tablesuffix=suffix
      em que data_source_jndi_name é o nome JNDI da origem de dados não transacional criada anteriormente e suffix é uma sequência que deve ser definida como etiqueta exclusiva para cada membro do seu cluster de HA.
      Restrição: Se você estiver usando um banco de dados Oracle, o tamanho da sequência suffix não deverá exceder 15 caracteres.
  3. (Opcional) Configure o serviço de compensação para armazenar transações em um banco de dados relacional se planeja usar os serviços Compensação ou Atividade no WebSphere Application Server:
    1. Em um console administrativo WebSphere Application Server, clique em Servidores > Tipos de Servidor > Servidores de aplicativos WebSphere > server_name. As propriedades do servidor de aplicativos especificado são exibidas.
    2. Na seção Configurações do Contêiner, clique em Serviços do Contêiner > Serviço de compensação. A página configurações do serviço de compensação é exibida.
    3. Selecione a guia Configuração se ela ainda não estiver exibida.
    4. No campo Diretório de log de recuperação, insira uma sequência customizada para indicar que você deseja que os logs sejam armazenados em um banco de dados. A sequência deve possuir o formato a seguir:
      custom://com.ibm.rls.jdbc.SQLRecoveryLog?datasource=data_source_jndi_name,tablesuffix=suffix
      em que data_source_jndi_name é o nome JNDI da origem de dados não transacional criada anteriormente e suffix é uma sequência que deve ser definida como etiqueta exclusiva para cada membro do seu cluster de HA.
      Restrição: Se você estiver usando um banco de dados Oracle, o tamanho da sequência suffix não deverá exceder 15 caracteres.
  4. (opcional) Crie tabelas de banco de dados.

    O WebSphere Application Server tentará criar as tabelas de banco de dados necessárias quando for iniciado pela primeira vez. Quando essa criação não for possível, por exemplo, devido à permissão insuficiente, o servidor falhará ao ser iniciado. Nessas circunstancias, deve-se criar as três tabelas de banco de dados manualmente.

    O DDL a seguir é representante e apropriado para um ambiente de servidor independente. Em um ambiente independente, duas tabelas de banco de dados, um log de transações e uma tabela de log de parceiro são necessários para suportar o serviço de transações. Se você planeja usar os serviços de Compensação ou Atividade, uma terceira tabela de log de compensação também será necessária.

    Os nomes das tabelas podem ser customizados para seu ambiente. Por exemplo, deve-se criar quatro tabelas de logs de transações, quatro tabelas de log de parceiro e, opcionalmente, quatro tabelas de compensação se você tiver um cluster chamado AppCluster com os quatro servidores membros a seguir:
    • AppClusterMember1
    • AppClusterMember2
    • AppClusterMember3
    • AppClusterMember4
    Então, será possível definir as tabelas a seguir para AppCluster:
    Nome do cluster Nome do servidor Tabela de log de transações Tabela de logs de parceiro Tabela de logs de compensação
    AppCluster AppClusterMember1 WAS_TRAN_LOGApp1 WAS_PARTNER_LOGApp1 WAS_COMP_LOGApp1
      AppClusterMember2 WAS_TRAN_LOGApp2 WAS_PARTNER_LOGApp2 WAS_COMP_LOGApp2
      AppClusterMember3 WAS_TRAN_LOGApp3 WAS_PARTNER_LOGApp3 WAS_COMP_LOGApp3
      AppClusterMember4 WAS_TRAN_LOGApp4 WAS_PARTNER_LOGApp4 WAS_COMP_LOGApp4
    O DDL a seguir mostra como criar as tabelas de banco de dados com o sufixo de tabela App1 no DB2:
    CREATE TABLE WAS_TRAN_LOGApp1(
      SERVER_NAME VARCHAR(128),
      SERVICE_ID SMALLINT,
      RU_ID BIGINT,
      RUSECTION_ID BIGINT,
      RUSECTION_DATA_INDEX SMALLINT,
      DATA LONG VARCHAR FOR BIT DATA) 
    CREATE TABLE WAS_PARTNER_LOGApp1(
      SERVER_NAME VARCHAR(128),
      SERVICE_ID SMALLINT,
      RU_ID BIGINT,
      RUSECTION_ID BIGINT,
      RUSECTION_DATA_INDEX SMALLINT,
      DATA LONG VARCHAR FOR BIT DATA) 
    CREATE TABLE WAS_COMP_LOGApp1(
      SERVER_NAME VARCHAR(128),
      SERVICE_ID SMALLINT,
      RU_ID BIGINT,
      RUSECTION_ID BIGINT,
      RUSECTION_DATA_INDEX SMALLINT,
      DATA LONG VARCHAR FOR BIT DATA) 
    As estruturas do DDL mostram como criar a tabela de banco de dados no Oracle:
    CREATE TABLE WAS_TRAN_LOGApp1(
      SERVER_NAME VARCHAR(128),
      SERVICE_ID SMALLINT,
      RU_ID NUMBER(19),
      RUSECTION_ID NUMBER(19),
      RUSECTION_DATA_INDEX SMALLINT,
      DATA BLOB)
    CREATE TABLE WAS_PARTNER_LOGApp1(
      SERVER_NAME VARCHAR(128),
      SERVICE_ID SMALLINT,
      RU_ID NUMBER(19),
      RUSECTION_ID NUMBER(19),
      RUSECTION_DATA_INDEX SMALLINT,
      DATA BLOB)
    CREATE TABLE WAS_COMP_LOGApp1(
      SERVER_NAME VARCHAR(128),
      SERVICE_ID SMALLINT,
      RU_ID NUMBER(19),
      RUSECTION_ID NUMBER(19),
      RUSECTION_DATA_INDEX SMALLINT,
      DATA BLOB)

Exemplo

Se você tiver um cluster chamado AppCluster com quatro servidores membros AppClusterMember1, AppClusterMember2, AppClusterMember3, e AppClusterMember4, configure os locais dos logs como a seguir:
Nome do cluster Nome do servidor Tabela de log de transações Tabela de logs de compensação
AppCluster AppClusterMember1 custom://com.ibm.rls.jdbc.SQLRecoveryLog?datasource=jdbc/tranlog,tablesuffix=App1 custom://com.ibm.rls.jdbc.SQLRecoveryLog?datasource=jdbc/tranlog,tablesuffix=App1
AppClusterMember2 custom://com.ibm.rls.jdbc.SQLRecoveryLog?datasource=jdbc/tranlog,tablesuffix=App2 custom://com.ibm.rls.jdbc.SQLRecoveryLog?datasource=jdbc/tranlog,tablesuffix=App2
AppClusterMember3 custom://com.ibm.rls.jdbc.SQLRecoveryLog?datasource=jdbc/tranlog,tablesuffix=App3 custom://com.ibm.rls.jdbc.SQLRecoveryLog?datasource=jdbc/tranlog,tablesuffix=App3
AppClusterMember4 custom://com.ibm.rls.jdbc.SQLRecoveryLog?datasource=jdbc/tranlog,tablesuffix=App4 custom://com.ibm.rls.jdbc.SQLRecoveryLog?datasource=jdbc/tranlog,tablesuffix=App4
Neste exemplo, o sufixo da tabela é definido como a seguir:
  • AppClusterMember1
  • AppClusterMember2
  • AppClusterMember3
  • AppClusterMember4
As tabelas de banco de dados com os nomes a seguir são criadas:
  • WAS_TRAN_LOGApp1
  • WAS_TRAN_LOGApp2
  • WAS_TRAN_LOGApp3
  • WAS_TRAN_LOGApp4
  • WAS_PARTNER_LOGApp1
  • WAS_PARTNER_LOGApp2
  • WAS_PARTNER_LOGApp3
  • WAS_PARTNER_LOGApp4
  • WAS_COMP_LOGApp1
  • WAS_COMP_LOGApp2
  • WAS_COMP_LOGApp3
  • WAS_COMP_LOGApp4

Ícone que indica o tipo de tópico Tópico de Tarefa



Ícone de registro de data e hora Última atualização: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tjta_store_logs_in_rdb
Nome do arquivo: tjta_store_logs_in_rdb.html