У нас уже давно работает сервисный брокер (работает на том же сервере).Теперь мы хотим добавить зеркалирование базы данных между двумя серверами.
Чтобы это работало, нам нужно было создать новые маршруты и новые конечные точки для сервисного посредника (для поддержки зеркалирования в случае сбоя).
Мы попробовали это в среде разработки, работающей с точно такой же версией Windows и SQL Server.Что такое:
Microsoft SQL Server 2008 R2 (окончательная первоначальная версия) - 10.50.1734.0 (X64) 11 августа 2010 г. 12:51:02 Авторское право (c) Microsoft Corporation Enterprise Edition (64-разрядная версия) в Windows NT 6.1 (Build 7600:)
Одно отличие состоит в том, что среда разработки работает в виртуальной системе.
Когда мы реализовали это в нашей производственной среде, у нас возникли проблемы, которых мы никогда не видели в среде разработки.
Обновления компонента Service Broker стали очень медленными, но мы могли видеть, что некоторые сообщения были получены.
Полученное нами сообщение об ошибке:
Зеркальный маршрут не работает .TCP: //server1.domain.local: 4022 действует как «Неизвестно» [].«TCP: //server2.domain.local: 4022» действует как «Неизвестно» [].
Зеркальный маршрут работает, но подключен только к принципалу.«TCP: //server1.domain.local: 4022» действует как «Принципал» [].«TCP: //server2.domain.local: 4022» действует как «Неизвестно» [].
На наших серверах разработки мы получили похожее сообщение:
Зеркальный маршрут находится в рабочем состоянии .TCP: //server1.devdomain.local: 4022 действует как 'Mirror' [].«TCP: //server2.devdomain.local: 4022» действует как «Принципал» [].
Зеркальный маршрут работает, но подключен только к принципалу.TCP: //server1.devdomain.local: 4022 действует как «Неизвестно» [].«TCP: //server2.devdomain.local: 4022» действует как «Принципал» [].
Как вы можете видеть, мы получаем сообщения о том, что зеркальный маршрут не работает на наших производственных серверах, но нена наших серверах разработки.
Зеркальное отображение базы данных настроено через порт 5022 и брокер служб для 4022.
Некоторые примеры создания маршрутов / конечных точек:
--created on booth principal and mirror
CREATE ENDPOINT [Mirroring]
AUTHORIZATION [domain\sqlservice]
STATE=STARTED
AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
FOR DATA_MIRRORING (ROLE = PARTNER, AUTHENTICATION = WINDOWS NEGOTIATE, ENCRYPTION = DISABLED)
--created on booth principal and mirror
CREATE ENDPOINT [BrokerEndpoint]
AUTHORIZATION [domain\sqlservice]
STATE=STARTED
AS TCP (LISTENER_PORT = 4022, LISTENER_IP = ALL)
FOR SERVICE_BROKER (MESSAGE_FORWARDING = DISABLED, MESSAGE_FORWARD_SIZE = 10, AUTHENTICATION = WINDOWS NEGOTIATE, ENCRYPTION = DISABLED)
--created in DB1 (on principal)
CREATE ROUTE [RouteToDB2] AUTHORIZATION [dbo] WITH SERVICE_NAME = N'ExecSPReceiveService' , BROKER_INSTANCE = N'DF46452B-97F3-4924-AD2A-A130FDC2016F' , ADDRESS = N'TCP://server1.domain.local:4022' , MIRROR_ADDRESS = N'TCP://server2.domain.local:4022'
--created in DB2 (on principal)
CREATE ROUTE [RouteToDB1] AUTHORIZATION [dbo] WITH SERVICE_NAME = N'ExecSPSendService' , BROKER_INSTANCE = N'91CBA730-48A2-47A8-95C8-0558706250AB' , ADDRESS = N'TCP://server1.domain.local:4022' , MIRROR_ADDRESS = N'TCP://server2.domain.local:4022'
Когда мы удаляем конечную точку зеркального отображения базы данных, все снова начинает работать нормально.
Есть идеи?
Спасибо!