Я пытаюсь настроить зеркалирование со свидетелем, используя свои 3 выделенных сервера под управлением SQL Server 2008 R2. Я настроил все, как описано в этом сообщении в блоге
Зеркальное отображение между основным и дополнительным серверами работает нормально. Но когда я запускаю самую последнюю команду, чтобы добавить свидетеля
alter database citec_vc_prod set witness = 'TCP://witness_address:witness_port';
Через несколько секунд я получаю следующую ошибку:
Сообщение 1456, уровень 16, состояние 3, строка 1 Не удалось отправить команду ALTER DATABASE на удаленный экземпляр сервера TCP: // witness_address: witness_port. Конфигурация зеркального отображения базы данных не изменилась. Убедитесь, что сервер подключен, и повторите попытку.
Кроме того, журнал событий на главном сервере показывает следующую ошибку:
Не удалось отправить команду ALTER DATABASE на удаленный экземпляр сервера «TCP: // адрес_свидетеля: порт_свидетеля». Конфигурация зеркального отображения базы данных не изменилась. Убедитесь, что сервер подключен, и повторите попытку.
Я уже отключил брандмауэр на свидетеле и успешно выполнил telnet-соединение от участника к конечной точке зеркалирования на следящем сервере, чтобы убедиться в отсутствии проблем с подключением. Тем не менее, я все еще получаю эту ошибку.
Моя установка выглядит следующим образом:
Principal: SQL Server 2008 R2 Standard 10.50.1617
Mirror: SQL Server 2008 R2 Standard 10.50.1617
Witness: SQL Server 2008 R2 Express 10.50.2500
Каждый из серверов находится в отдельной рабочей группе.
Пожалуйста, помогите мне, гуру SQL-серверов, вы моя единственная надежда!
Редактировать: Вот полный журнал команд T-SQL, которые я использовал для настройки зеркалирования. Как только первая попытка не удалась с описанной выше проблемой, я удалил все и начал с нуля. Однако та же проблема повторилась.
-- PRINCIPAL
create master key encryption by password = 'mypassword';
GO
create certificate "server1.ourdomain.com_cert" with subject = 'server1.ourdomain.com certificate', start_date = '2007/11/01', expiry_date = '2020/11/01';
GO
Create endpoint endpoint_mirroring state = started
as tcp(listener_port = 5022, listener_ip = all)
for database_mirroring (authentication = certificate "server1.ourdomain.com_cert", encryption = disabled, role = all);
GO
Backup certificate "server1.ourdomain.com_cert" to file = 'f:\cert\server1.ourdomain.com_cert.cer';
GO
-- MIRROR
create master key encryption by password = 'mypassword';
GO
create certificate "server2.ourdomain.com_cert" with subject = 'server2.ourdomain.com certificate', start_date = '2007/11/01', expiry_date = '2020/11/01';
GO
Create endpoint endpoint_mirroring state = started
as tcp(listener_port = 5022, listener_ip = all)
for database_mirroring (authentication = certificate "server2.ourdomain.com_cert", encryption = disabled, role = all);
GO
Backup certificate "server2.ourdomain.com_cert" to file = 'f:\cert\server2.ourdomain.com_cert.cer';
GO
-- WITNESS
create master key encryption by password = 'mypassword';
GO
create certificate "witness.ourdomain.com_cert" with subject = 'witness.ourdomain.com certificate', start_date = '2007/11/01', expiry_date = '2020/11/01';
GO
Create endpoint endpoint_mirroring state = started
as tcp(listener_port = 5022, listener_ip = all)
for database_mirroring (authentication = certificate "witness.ourdomain.com_cert", encryption = disabled,role = witness);
GO
Backup certificate "witness.ourdomain.com_cert" to file = 'd:\cert\witness.ourdomain.com_cert.cer';
GO
-- PRINCIPAL again
create login "server2.ourdomain.com_login" with PASSWORD = 'mypassword';
GO
create user "server2.ourdomain.com_user" from login "server2.ourdomain.com_login";
GO
select * from sys.certificates
Create certificate "server2.ourdomain.com_cert"
Authorization "server2.ourdomain.com_user"
From file = 'f:\cert\server2.ourdomain.com_cert.cer';
GO
Grant CONNECT ON Endpoint::endpoint_mirroring to [server2.ourdomain.com_login];
GO
------
create login "witness.ourdomain.com_login" with PASSWORD = 'mypassword';
GO
create user "witness.ourdomain.com_user" from login "witness.ourdomain.com_login";
GO
Create certificate "witness.ourdomain.com_cert"
Authorization "witness.ourdomain.com_user"
From file = 'f:\cert\witness.ourdomain.com_cert.cer';
GO
Grant CONNECT ON Endpoint::endpoint_mirroring to [witness.ourdomain.com_login];
GO
-- MIRROR again
create login "server1.ourdomain.com_login" with PASSWORD = 'mypassword';
GO
create user "server1.ourdomain.com_user" from login "server1.ourdomain.com_login";
GO
Create certificate "server1.ourdomain.com_cert"
Authorization "server1.ourdomain.com_user"
From file = 'f:\cert\server1.ourdomain.com_cert.cer';
GO
Grant CONNECT ON Endpoint::Endpoint_mirroring to [server1.ourdomain.com_login];
GO
-------
create login "witness.ourdomain.com_login" with PASSWORD = 'mypassword';
GO
create user "witness.ourdomain.com_user" from login "witness.ourdomain.com_login";
GO
Create certificate "witness.ourdomain.com_cert"
Authorization "witness.ourdomain.com_user"
From file = 'f:\cert\witness.ourdomain.com_cert.cer';
GO
Grant CONNECT ON Endpoint::Endpoint_mirroring to [witness.ourdomain.com_login];
GO
-- WITNESS again
create login "server1.ourdomain.com_login" with PASSWORD = 'mypassword';
GO
create user "server1.ourdomain.com_user" from login "server1.ourdomain.com_login";
GO
Create certificate "server1.ourdomain.com_cert"
Authorization "server1.ourdomain.com_user"
From file = 'd:\cert\server1.ourdomain.com_cert.cer';
GO
Grant CONNECT ON Endpoint::Endpoint_mirroring to [server1.ourdomain.com_login];
GO
-------
create login "server2.ourdomain.com_login" with PASSWORD = 'mypassword';
GO
create user "server2.ourdomain.com_user" from login "server2.ourdomain.com_login";
GO
Create certificate "server2.ourdomain.com_cert"
Authorization "server2.ourdomain.com_user"
From file = 'd:\cert\server2.ourdomain.com_cert.cer';
GO
Grant CONNECT ON Endpoint::endpoint_mirroring to [server2.ourdomain.com_login];
GO
-- MIRROR again
alter database MyDBName set partner OFF
alter database MyDBName set partner = 'TCP://server1.ourdomain.com:5022';
GO
-- PRINCIPAL again
alter database MyDBName set partner OFF
alter database MyDBName set partner = 'TCP://server2.ourdomain.com:5022';
GO
alter database MyDBName set witness OFF
alter database MyDBName set witness = 'TCP://witness.ourdomain.com:5022';
GO
Изменить 2: По просьбе Ремуса я прикрепил профилировщик к трем экземплярам сервера, пытаясь добавить свидетель. Я искал :
Database Mirroring State Change
Broker:Connection Event
Я не мог отслеживать «Аудит входа в систему зеркального отображения базы данных», так как не мог найти его в «Списке событий» в профилировщике. Это ведь не в разделе «Аудит безопасности»?
Во всяком случае, я не мог следить за такими событиями на свидетеле или в зеркале. Я пробовал, но событий просто не было. На главном были такие мероприятия:
Database Mirroring Connection 32 2011-12-09 20:04:07.983 1 39796 2 - Connected c6b6054d-56c0-4589-922a-29a40fdd9d96 1 0X01 tcp://<MyWitnessIP>:5022 principal.mytopleveldomain.com,3809
Audit Database Mirroring Login 30 2011-12-09 20:04:08.133 1 39797 1 - Login Success 1 0X01 tcp://<MyWitnessIP>:5022 principal.mytopleveldomain.com,3809 1 witness.mytopleveldomain.com_login CERTIFICATE Microsoft Unified Security Protocol Provider Initiator
Database Mirroring State Change DBM: Synchronized Principal without Witness -> DBM: Synchronizing Principal 27 2011-12-09 20:04:27.980 9 39798 2 1 0X01 principal.mytopleveldomain.com,3809 Zeiterfassung-Staging 0 13
Database Mirroring State Change DBM: Synchronizing Principal -> DBM: Synchronized Principal without Witness 27 2011-12-09 20:04:28.237 9 39799 13 1 0X01 principal.mytopleveldomain.com,3809 Zeiterfassung-Staging 0 2
Database Mirroring Connection An error occurred while receiving data: '64(failed to retrieve text for this error. Reason: 15105)'. 30 2011-12-09 20:05:42.530 1 39803 4 - Closing c6b6054d-56c0-4589-922a-29a40fdd9d96 1 0X01 tcp://<MyWitnessIP>:5022 principal.mytopleveldomain.com,3809
Database Mirroring Connection 30 2011-12-09 20:05:42.533 1 39804 5 - Closed c6b6054d-56c0-4589-922a-29a40fdd9d96 1 0X01 tcp://<MyWitnessIP>:5022 principal.mytopleveldomain.com,3809
Database Mirroring Connection 32 2011-12-09 20:04:07.983 1 39796 2 - Connected c6b6054d-56c0-4589-922a-29a40fdd9d96 1 0X01 tcp://85.214.251.151:5022 srv1.logmytime.de,3809
Audit Database Mirroring Login 30 2011-12-09 20:04:08.133 1 39797 1 - Login Success 1 0X01 tcp://85.214.251.151:5022 srv1.logmytime.de,3809 1 wtn.logmytime.de_login CERTIFICATE Microsoft Unified Security Protocol Provider Initiator
Database Mirroring State Change DBM: Synchronized Principal without Witness -> DBM: Synchronizing Principal 27 2011-12-09 20:04:27.980 9 39798 2 1 0X01 srv1.logmytime.de,3809 Zeiterfassung-Staging 0 13
Database Mirroring State Change DBM: Synchronizing Principal -> DBM: Synchronized Principal without Witness 27 2011-12-09 20:04:28.237 9 39799 13 1 0X01 srv1.logmytime.de,3809 Zeiterfassung-Staging 0 2
Database Mirroring Connection An error occurred while receiving data: '64(failed to retrieve text for this error. Reason: 15105)'. 30 2011-12-09 20:05:42.530 1 39803 4 - Closing c6b6054d-56c0-4589-922a-29a40fdd9d96 1 0X01 tcp://85.214.251.151:5022 srv1.logmytime.de,3809
Database Mirroring Connection 30 2011-12-09 20:05:42.533 1 39804 5 - Closed c6b6054d-56c0-4589-922a-29a40fdd9d96 1 0X01 tcp://85.214.251.151:5022 srv1.logmytime.de,3809
Я с удовольствием отзеркалю и другие события, но, пожалуйста, дайте мне знать, в каком разделе событий я могу их найти при настройке профилировщика.
Редактировать 3: У меня была еще одна попытка профилирования свидетеля, на этот раз почти со всеми типами событий. И наконец я получил некоторые данные:
Trace Start 2011-12-10 01:24:08.180
ErrorLog 2011-12-10 01:24:40.40 Logon Database Mirroring Login succeeded for user 'principal.ourdomain.com_login'. Authentication mode: CERTIFICATE. [CLIENT: <principalip>]
29 2011-12-10 01:24:40.400 1 28046 1428 1 0X01 witness.ourdomain.com,3809 master 0 sa
EventLog Database Mirroring Login succeeded for user 'principal.ourdomain.com_login'. Authentication mode: CERTIFICATE. [CLIENT: <principalip>] 29 2011-12-10 01:24:40.400 1 28046 1429 1 0X01 witness.ourdomain.com,3809 master 0 sa
Затем я проделал то же самое с зеркалом, но у меня остались только эти два довольно неважных события:
ErrorLog 2011-12-10 01:38:02.14 spid29s Database mirroring is inactive for database 'DatabaseName'. This is an informational message only. No user action is required.
sa 29 2011-12-10 01:38:02.143
EventLog Database mirroring is inactive for database 'DatabaseName'. This is an informational message only. No user action is required. sa 29 2011-12-10 01:38:02.143 0XA20500000A0000000F000000570049004E003600360036004800520054004B003700540032004800000000000000
ErrorLog 2011-12-10 01:38:22.40 spid29s Database mirroring is active with database 'DatabaseName' as the mirror copy. This is an informational message only. No user action is required.
sa 29 2011-12-10 01:38:22.407
EventLog Database mirroring is active with database 'DatabaseName' as the mirror copy. This is an informational message only. No user action is required. sa 29 2011-12-10 01:38:22.407 0XA10500000A0000000F000000570049004E003600360036004800520054004B003700540032004800000000000000
Однако я до сих пор не вижу информации о том, почему не удается добавить свидетеля.
Можете ли вы прикрепить SQL Profiler к все трое вовлеченные экземпляры и отслеживают эти события:
Затем попробуйте еще раз установить сеанс зеркального отображения. Убедитесь, что вы выбрали все столбцы при добавлении событий. Начните с пустого шаблона.
2011-12-09 20:04:07.983 Database Mirroring Connection Connected
2011-12-09 20:04:08.133 Audit Database Mirroring Login Login Success
2011-12-09 20:04:27.980 Database Mirroring State Change DBM:
Synchronized Principal without Witness ->
DBM: Synchronizing Principal
2011-12-09 20:04:28.237 Database Mirroring State Change DBM:
Synchronizing Principal ->
DBM: Synchronized Principal without Witness
2011-12-09 20:05:42.530 Database Mirroring Connection An error occurred...
Вот объяснение того, что происходит:
Эта последовательность событий указывает на то, что соединение между принципалом и свидетелем функционирует. Запрос на добавление свидетеля не выполняется, и этому может быть несколько причин. Подобные события должны происходить и на зеркале, и на свидетеле, непонятно, почему вы говорите, что могли зафиксировать их только на главном.
Некоторое время я сталкивался с UNABLE configure Witness, пока не понял, что сертификат, который я использовал на конечной точке Mirror, отличается от конечной точки Principal & Witness.
Как только я использовал один и тот же сертификат (скопированный с Принципала на 2-й и 3-й серверы) для конечных точек зеркалирования в Принципал, Зеркало и Свидетель, я смог решить
"Witness_address" - это IP-адрес или имя?
Если это имя, может ли каждый сервер разрешить имя любого другого сервера? (разные рабочие группы = без разрешения имен = необходимо использовать файл DNS или HOSTS)
Зеркальное отображение уже указано и СОСТОЯНИЕ конечной точки свидетеля НАЧАЛОСЬ? Чтобы проверить: ВЫБЕРИТЕ role_desc, state_desc FROM sys.database_mirroring_endpoints
Вы также:
1. Создана конечная точка:
СОЗДАТЬ ENDPOINT Endpoint_Mirroring
СОСТОЯНИЕ = НАЧАЛО
Как TCP (LISTENER_PORT = 7022)
FOR DATABASE_MIRRORING (ROLE = WITNESS)
ИДТИ
вы используете одну и ту же учетную запись домена на всех экземплярах?
убедиться, что для этой учетной записи установлены разрешения на конечной точке?
--Создайте логин для экземпляров партнерского сервера,
- которые оба работают как MYDOMAIN \ dbousername:
Мастер ИСПОЛЬЗОВАНИЯ;
ИДТИ
СОЗДАТЬ ЛОГИН [MYDOMAIN \ dbousername] ИЗ WINDOWS;
ИДТИ
- Предоставление разрешений на подключение на конечной точке для входа в учетную запись партнеров
GRANT CONNECT ON ENDPOINT :: Endpoint_Mirroring TO [MYDOMAIN \ dbousername];
ИДТИ
Видеть Вот Больше подробностей.
В соответствии с http://msdn.microsoft.com/en-us/library/ms190430.aspx ...
Чтобы выполнить инструкцию SET WITNESS, сеанс зеркального отображения базы данных должен быть уже запущен (между партнерами), а для STATE конечной точки свидетеля должно быть установлено значение STARTED.
Почему в вашем сценарии прямо перед «установкой свидетеля» указано «изменить базу данных MyDBName, установить партнера OFF»? Разве это не разрушает зеркальное отображение?