“Serviço de fila de mensagens não disponível” no Windows Failover Cluster

2

Estou depurando em um site em que nosso aplicativo é executado em um cluster de failover de 3 nós com um grupo de clusters do MSMQ para enfileiramento de mensagens. Estamos vendo que o sistema funciona em algumas combinações de nós, mas não em todos, portanto, a segurança de failover não é tão boa quanto o pretendido.

O problema é receber mensagens da fila em cluster.

Quando nosso aplicativo é executado no nó do cluster B ou C, ele funciona independentemente de em qual nó o MSMQ está sendo executado (works = nosso aplicativo recebe mensagens). Quando nosso aplicativo é executado no nó A, ele falha devido ao serviço de fila de mensagens não disponível, independentemente de onde o MSMQ está sendo executado.

Para confundir ainda mais as coisas, criei um pequeno serviço proxy WCF-MQ com um cliente GUI, que me permite enviar um comando para o serviço, que será enviado ou recebido de uma fila de mensagens, conforme especificado pelo cliente. cliente - e dar o máximo de feedback possível no processo. O padrão é o mesmo com este aplicativo, exceto que o nó em que ele falha é o nó C - independentemente de onde o MSMQ está sendo executado.

Aqui estão algumas das coisas que eu verifiquei:

  • O serviço (nosso aplicativo) é executado nas mesmas contas de usuário de domínio nos três nós.
  • O arquivo de configuração do aplicativo contém o mesmo caminho para a fila de mensagens.
  • Os direitos de acesso à fila: todos têm controle total.
  • O serviço local do MSMQ está sendo executado em todos os nós e garanti que as filas locais não sejam nomeadas da mesma forma que as clusterizadas.
  • O firewall está desativado em todos os nós.
  • O nó A é diferente de B e C, pois possui uma conexão de rede extra na mesma sub-rede que a rede de cluster. Então quando eu pingar do nó B, ele responde na interface "errada". Não tenho certeza se é importante, mas é um pouco estranho.
  • A opção de serviço "Usar nome da rede para o nome da máquina" não parece alterar nada. Meu serviço de proxy reporta o nome da máquina e, para o nó A, ele sempre retorna o nome do grupo de clusters, nos nós B e C sempre retorna o nome do nó.
  • O grupo de clusters do MSMQ usa uma unidade iscsi compartilhada para armazenamento.

Eu sou apenas um desenvolvedor, não um especialista em infraestrutura da Microsoft, por isso, gostaria de perguntar: quais são as etapas recomendadas para depurar uma configuração do MSMQ em cluster como essa?

    
por Kenned 26.02.2015 / 17:55

1 resposta

3

Ok, depois de várias semanas de depuração por conta própria e junto com a equipe de suporte da Fila de Mensagens da Microsoft, foi encontrada uma solução.

TLDR; a solução é remover ou renomear a chave de registro

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\<SERVICENAME>\Environment

O motivo do erro é que o cliente MQ não pode localizar um serviço MQ no sistema local - e isso é necessário para se comunicar com um MQ remoto - como um serviço SMTP local que encaminha seus e-mails para sistemas remotos. No entanto, o sistema local não é o nó do cluster, neste caso, mas o "grupo de clusters" e não há nenhum serviço do MQ em execução no grupo de clusters (porque não é um sistema real, apenas um alias). A razão pela qual o cliente MQ procura um serviço no grupo de clusters é que a caixa de seleção "Usar nome da rede para o nome do computador" foi marcada nas configurações do serviço de cluster. Isso adiciona um novo valor no registro de nós do cluster, configurando o ambiente para o serviço. E o verdadeiro problema é que quando esta caixa de seleção é desmarcada, ela não remove o valor do registro, efetivamente tornando impossível limpar a configuração corretamente (a partir da GUI) depois de definida. Portanto, a correção é excluir o valor manualmente com regedit ou regedt.

    
por 24.03.2015 / 13:09