У меня есть база данных в группе доступности SQL Server, работающая на сервере базы данных.
Если я вхожу на свой веб-сервер и подключаюсь к первичной базе данных напрямую через IP-адрес сервера базы данных, соединение каждый раз происходит мгновенно.
Если я вместо этого подключаюсь к первичной базе данных по имени прослушивателя группы доступности или IP-адресу прослушивателя группы доступности, он будет подключаться мгновенно 1 из каждых 4 раз и тайм-аут в другом 3. Мгновенное против тайм-аута кажется случайным.
Мы запускаем SQL Server 2014 на виртуальных машинах Azure, если это связано. У меня 8+ часов, поэтому любая помощь будет принята с благодарностью!
Похоже, что проблема связана с DNS. Когда я изменил URL-адрес конечной точки группы доступности на внутренний IP-адрес, а не на полное доменное имя, проблема была решена. Так что для всех, кто попадает в это, есть что попробовать (также может применяться к маршрутизации только для чтения). Пара операторов SQL, которые могут помочь:
Запросить текущие настройки
SELECT ag.name as "Availability Group", ar.replica_server_name as "When Primary Replica Is", rl.routing_priority as "Routing Priority", ar2.replica_server_name as "RO Routed To", ar.secondary_role_allow_connections_desc, ar2.read_only_routing_url ,*
FROM sys.availability_read_only_routing_lists rl inner join sys.availability_replicas ar on rl.replica_id = ar.replica_id inner join sys.availability_replicas ar2 on rl.read_only_replica_id = ar2.replica_id inner join sys.availability_groups ag on ar.group_id = ag.group_id ORDER BY ag.name, ar.replica_server_name, rl.routing_priority
Обновить URL-адрес конечной точки
ALTER AVAILABILITY GROUP [AvailabilityGroupName]
MODIFY REPLICA ON 'ReplicaName' WITH (ENDPOINT_URL = 'TCP://<Internal IP>:<Port>')
Я еще не уверен, почему это происходило с перебоями или почему DNS моей сети не разрешал это на внутренний адрес, а вместо этого он принимался подстановочной записью DNS CNAME Route53 для домена. Если я это выясню, я отправлю это на всякий случай, если это будет полезно. Спасибо Бруно за помощь ранее!