Os backups demoram tanto que o firewall fecha a conexão

4

Um pouco de um mashup de sistemas aqui, então tenha paciência comigo. Essencialmente, estou tendo problemas para usar o agente do Backup Exec para Oracle, enquanto tento fazer backup de um servidor Linux remoto. O agente BE parece usar o RMAN para fazer backup dos bancos de dados

O servidor de backup está em uma VLAN e o servidor de destino em outro, com um firewall Cisco ASA fornecendo o único link entre eles. Isso ocorre por design, já que o servidor de backup deve suportar vários clientes e cada cliente deve estar em sua própria VLAN para impedir que eles acessem um ao outro. Eu adicionei as portas recomendadas ao firewall para pelo menos permitir que o agente converse com o servidor de mídia.

O backup inicia bem (na verdade, um banco de dados Oracle menor no mesmo servidor é concluído sem problemas), mas um banco de dados de 200 GB, que levaria claramente algumas horas para ser concluído, não pode ser concluído.

Acredito que o problema esteja relacionado ao link , que diz que uma sessão CORBA é estabelecida na porta 5633 no início do backup e usada antes de cada operação do RMAN, mas, enquanto os dados estão sendo transferidos, o soquete da sessão CORBA não recebe pacotes. Como o tempo limite da conexão no firewall é de 60 minutos, a sessão CORBA é interrompida e, quando o agente do RMAN tenta executar sua próxima ação, todo o processo é executado. A Symantec afirmou que esse problema foi corrigido em uma versão anterior do Backup Exec, mas não detalha as configurações adicionais para aplicá-lo.

Definir o tempo limite de conexão no firewall para algo alto o suficiente para cobrir a janela de backup (por exemplo, 12 horas) parece ser a coisa errada a fazer, pois é uma mudança de propriedade, que também afeta a vida útil da conexão (por exemplo) solicitações da web para o servidor da Web de outro cliente.

Mover o servidor Linux para a mesma LAN que o servidor de backup está fora de questão.

Eu não sou um guru do Linux, mas praticamente sei o que fazer. Até agora, tentei usar o libkeepalive ( link ) para forçar a criação do soquete do processo de beremote a ser feita com um sinalizador TCP KEEPALIVE, mas um netstat -top rápido indica que não está sendo usado. Estou usando o libkeepalive incorretamente ou não funciona para o binário do beremote

Acho que estou procurando uma opção que se encaixe no ambiente em que estou. Acredito que estou procurando um ou mais dos seguintes itens:

  • uma maneira de configurar o agente BE para manter a conexão ativa?
  • uma maneira de injetar o sinalizador keepalive na conexão TCP existente (por exemplo, por meio de um cronjob)?
  • uma maneira de informar ao dispositivo Cisco para aumentar o tempo limite de conexão para uma origem / destino específica (talvez um mapa de política)?

Qualquer / todas as outras ideias são bem-vindas ...

J.

RE: Comentário por @Weaver

Conforme solicitado, class-map , policy-map e service-map entradas ...

class-map CLS_INSPECTION_TRAFFIC
 match default-inspection-traffic
class-map CLS_ALL_TRAFFIC
 match any
class-map CLS_BACKUPEXEC_CORBA
 description Oracle/DB2 CORBA port for BackupExec traffic
 match port tcp eq 5633
!
!
policy-map type inspect dns PMAP_DNS_INSPECT_SETTINGS
 parameters
  message-length maximum client auto
  message-length maximum 1280
policy-map PMAP_GLOBAL_SERVICE
 class CLS_INSPECTION_TRAFFIC
  inspect dns PMAP_DNS_INSPECT_SETTINGS 
  inspect ftp 
  inspect h323 h225 
  inspect h323 ras 
  inspect rsh 
  inspect rtsp 
  inspect esmtp 
  inspect sqlnet 
  inspect skinny  
  inspect sunrpc 
  inspect xdmcp 
  inspect sip  
  inspect netbios 
  inspect tftp 
  inspect ipsec-pass-thru 
  inspect icmp 
  inspect snmp 
 class CLS_BACKUPEXEC_CORBA
  set connection timeout idle 1:00:00 dcd 
 class CLS_ALL_TRAFFIC
  set connection decrement-ttl
!
    
por jimbobmcgee 20.07.2011 / 21:15

3 respostas

6

Antecedentes sobre o tempo limite / temporizadores de ASA:

A conexão global tempo limite é o temporizador ocioso do circuito virtual TCP (sessão) e o padrão é 60 minutos. O tempo limite udp global é para buracos UDP e o padrão é 2 minutos. O tempo limite global xlate é para limpar as traduções que perduram após uma conexão expirou. O tempo limite conn (TCP) tem precedência sobre o tempo limite xlate . O próximo parágrafo explica ainda mais a relação entre temporizadores conn e xlate.

Se um conn for destruído com sucesso através do desdobramento TCP, o conn e o xlate vão com ele (se o xlate dinâmico, o NAT estático e o xate de PAT estático nunca forem removidos). Se um conn expirar, então o cronômetro xlate é levado em consideração. Se o xlate expirar primeiro (você define o valor real), ele não interromperá a conexão até que o tempo limite seja atingido.

O ASA tem vários métodos para lidar com os variados tempos limite. Conn é aquele em que a configuração global pode ser substituída com base no mapa de classe - isso deve ser preferível ao aumentar a configuração global, se possível.

A outra característica interessante que o ASA possui está morta detecção de conexão - DCD. O DCD permite que você mantenha seu tempo limite de conexão [global] em 60 minutos (o padrão) e quando 60 minutos são alcançados - o ASA man-in-the-middle falsifica ACKs de dados nulos para cada ponto final como o outro ponto final. Dados nulos funcionam para evitar que os números de sequência sejam incrementados. Se ambos os lados responderem, o temporizador de inatividade da conexão será redefinido como 0 e começará novamente. Se um dos lados não responder após um determinado número de tentativas (configurável) em um determinado período, o conn será removido e o cronômetro xlate ganhará relevância conforme descrito acima.

Eu recomendaria configurar um mapa de classe e adicioná-lo à sua política que habilita o DCD. Você pode usar uma ACL ou uma porta (outras também estão disponíveis). Usar a porta é rápido, fácil e funcionará bem se você tiver certeza de que o TCP / 5633 é o local onde o problema fica ..

Eu usei a global_policy abaixo, mas fique à vontade para ajustar conforme necessário.

class-map BE-CORBA_class
 description Backup Exec CORBA Traffic Class
 match port tcp eq 5633

policy-map global_policy
 class BE-CORBA_class
  -->::Choose one below::<--
  set connection timeout idle 1:00:00 dcd --> for 8.2(2) and up
  set connection timeout tcp 1:00:00 dcd --> for prior to 8.2(2)

service-policy global_policy global

@Comment

De acordo com o guia de referência - "Um pacote pode corresponder a apenas um mapa de classe no mapa de políticas para cada tipo de recurso ."

A frase-chave está em negrito. Um pacote que cruza uma interface pode corresponder a várias classes dentro de um mapa de políticas, mas apenas se essas classes usarem "recursos" diferentes. Se você rolar para cima apenas um pouco no link acima mencionado, você verá os vários recursos listados. Essa página inteira é uma mina de ouro para petiscos do MPF.

Como você mencionou, você tem um mapa de classe match any definido e, em seguida, é referenciado como uma classe dentro do mapa de política - se estiver executando outras alterações nos limites e tempos limite de conexão TCP e UDP nessa classe de mapa de política Em seguida, os mapas de classe subsequentes que correspondem ao tráfego - se definido no mapa de políticas - não realizarão os limites de conexão TCP e UDP e as alterações de tempo limite no pacote.

Se você postar todas as ACLs, class-map , policy-map e service-policy , poderemos determinar com certeza.

    
por 23.07.2011 / 08:14
1

Por mais que eu não seja fã de aplicativos pegando seus brinquedos e voltando para casa (e falhando no backup) quando uma única sessão TCP é eliminada, neste caso eu diria apenas o tempo limite da sessão TCP do ASA. / p>

Colocar um limite rígido na duração da sessão é apenas um produto da necessidade do ASA de rastrear todas as conexões para manter o estado (e normalmente, NAT) - se você está correndo contra o limite de conexão do seu dispositivo, então pode ser um problema, mas por outro lado, basta ligar até 6 horas ou algo assim.

A menos que os dois nós nas extremidades de uma sessão TCP fiquem escuros, o ASA dará testemunho de uma extremidade ou de outra terminando a conexão quando ela terminar naturalmente, e derrubará a conexão (ou acionará a conexão mais curta semiaberta tempo limite), então é improvável que você acabe com uma tonelada de conexões mortas entupindo as coisas. Os dispositivos endpoint também têm interesse em derrubar conexões inúteis - os servidores da web são um bom exemplo, pois geralmente eles têm tempos limite de conexão muito mais curtos do que o seu ASA.

    
por 20.07.2011 / 21:28
0

Você pode considerar o uso de um proxy TCP genérico na máquina Linux remota que responde e encaminha as conexões do Backup Exec para a porta CORBA local. (Você poderia facilmente organizar o servidor do Backup Exec para se conectar a esse proxy por meio das regras de NAT no firewall.) Esse proxy TCP precisaria ter a opção SO_KEEPALIVE definida no soquete de escuta que ele cria. Meu proxy de escolha é rinetd , mas uma rápida olhada na fonte mostra que eles não estão configurando a opção SO_KEEPALIVE seu soquete de escuta (então você teria que modificá-lo para obter o comportamento desejado). Há talvez outro proxy TCP genérico que defina SO_KEEPALIVE por padrão (ou como uma opção), mas eu não estou ciente de um em cima da minha cabeça.

Outra opção pode ser abrir um túnel SSH para a máquina remota como parte de um script pré-tarefa com o cliente SSH configurado para usar pacotes nulos SO_KEEPALIVE ou SSH para manter a conexão ativa.

    
por 20.07.2011 / 21:31