AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 321958
Accepted
Hannah Vernon
Hannah Vernon
Asked: 2023-01-11 12:19:07 +0800 CST2023-01-11 12:19:07 +0800 CST 2023-01-11 12:19:07 +0800 CST

AG disponível a partir do 1º nó, mas não do 2º nó

  • 772

Estou no processo de configuração de um Grupo de Disponibilidade no SQL Server 2019 no Windows Server 2019.

Temos dois servidores Windows, UT01 e UT02, configurados com um único adaptador de rede, usando endereços IP estáticos em um domínio do Active Directory.

O grupo de rede atribuiu um endereço IP estático para o Cluster Virtual Computer Object, UTCL, 192.168.0.12. Eles também atribuíram um endereço IP estático para o Availability Group Listener, UTAG, 192.168.0.13.

Servidor Endereço de IP sub-rede
UT01 192.168.0.10 192.168.0.0/24
UT02 192.168.0.11 192.168.0.0/24
UTCL 192.168.0.12 192.168.0.0/24
UTAG 192.168.0.13 192.168.0.0/24

A equipe do servidor configurou o Windows Server Failover Cluster e eu configurei os SQL Servers e o Availability Group. Ambos os SQL Servers são configurados como instâncias nomeadas; assim UT01\INSe UT02\INSsão os nomes retornados por@@SERVERNAME;

De qualquer máquina na sub-rede local (192.168.0.0/24), posso me conectar ao Grupo de Disponibilidade usando o sqlcmd como tal:

sqlcmd -S UTAG\INS

Quando eu executo PRINT @@SERVERNAME;, UT01\INSou UT02\INSé retornado, dependendo de qual nó está executando o nó primário do Grupo de Disponibilidade.

Posso me conectar aos SQL Servers individuais de uma rede fora da sub-rede local, por meio de um roteador, usando sqlcmd, ou seja, sqlcmd -S UT01\INSe sqlcmd -S UT02\INSfuncionar corretamente, retornando o nome de instância apropriado para @@SERVERNAME.

Tudo bem até agora, e completamente como esperado.

No entanto, quando tento me conectar ao nome AG por meio de uma sub-rede não local, o AG responde apenas quando UT01 está executando o nó primário. Quando UT02 está executando o nó primário, obtemos o erro típico de conectividade:

Ocorreu um erro relacionado à rede ou específico da instância ao estabelecer uma conexão com o SQL Server. Servidor não encontrado ou não acessível. Verifique se o nome da instância está correto e se o SQL Server está configurado para permitir conexões remotas.

O log de erro do SQL Server em UT02 não mostra logins com falha (ele é configurado com o padrão para auditar logins com falha).

ping UTAGretorna o endereço IP correto, 192.168.0.13, independentemente de onde eu o executo. ping UTAGfunciona corretamente na sub-rede local e funciona nas sub-redes remotas quando o AG está sendo executado em UT01, mas não quando UT02 é o primário.

Instalei o WireShark no UT01 e no UT02 para ver se consigo determinar o que está acontecendo. Eu filtrei a saída do WireShark:

((tcp.port == 2136) || (udp.port == 1434)) && ((ip.dst == 192.168.0.13 || ip.src == 192.168.0.13))

A porta de escuta do SQL Server AG está configurada para escutar na porta 2136 e ambas as instâncias também estão configuradas para escutar na porta 2136. O SQL Server Configuration Manager mostra que a configuração de rede está configurada para escutar em todos os endereços IP.

Assistir ao WireShark no UT01, ao tentar se conectar ao AG de um cliente localizado em outra sub-rede, mostra o tráfego TCP de entrada na porta 2136 e o ​​tráfego UDP na porta 1434, independentemente de qual nó é o AG primário. Quando o AG primário está sendo executado em UT01, a conexão com o AG funciona, quando o AG primário está em UT02, a conexão com o AG falha.

Ambos os servidores são máquinas virtuais, rodando em hosts físicos separados. O switch (virtual ou não) está claramente ciente de qual nó está executando o primário, pois ping UTAGa partir da sub-rede local funciona independentemente de qual nó possui o endereço IP UTAG. ping UTAGde qualquer outra sub-rede só responde quando o AG está rodando em UT01.

Alguma ideia?

sql-server
  • 1 1 respostas
  • 100 Views

1 respostas

  • Voted
  1. Best Answer
    Hannah Vernon
    2023-01-12T21:04:46+08:002023-01-12T21:04:46+08:00

    Portanto, a "detecção baseada em GARP" precisava ser habilitada no comutador de rede que atende a sub-rede local conectando os dois SQL Servers com as outras sub-redes.

    GARP é o Gratuitous Address Resolution Protocol, que é usado para transmitir o endereço MAC do adaptador de rede que hospeda o Grupo de Disponibilidade. No nosso caso, o roteador conectado ao switch não estava vendo os pacotes ARP que são gerados automaticamente sempre que ocorre um failover do Availability Group, impedindo-o de enviar pacotes TCP destinados ao AG para o endereço MAC correto - ele simplesmente estava sempre enviando esses pacotes ao primeiro nó.

    Esta página da Microsoft explica o problema.

    • 4

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve