Одна из последних тенденций в
развитии Microsoft продуктов ветки 2012 - уход от домена для реализации многих
фич, связанных с созданием отказоустойчивых или высокопроизводительных
кластеров. Сегодня мы рассмотрим, как создать зеркалирование БД MS SQL Server
2012, без наличия единого домена для носителей.
При
попытке создать зеркалирование БД через GUI интерфейс, мы получим несколько
разных ошибок, но запустить в работу не выйдет. Так как, сервера не смогут
авторизоваться друг с другом. Microsoft для решения таких задач предлагает
использовать сертификаты для авторизации меж серверами. Так же нам необходимо
будет создать контрольную точки на каждом сервере для работы зеркалирования
(если мы это не сделали при настройке через GUI интерфейс)
И
так, приступим -- пусть у нас уже есть
на двух серверах основная БД и её развёрнутая полная копия в режиме восстановления. Теперь создадим
Master-key, затем сертификат на его основе, и сохраним сертификат для
дальнейшего использования.
USE MASTER
GO
IF NOT EXISTS (SELECT 1 FROM sys.symmetric_keys where name =
'##MS_DatabaseMasterKey##')
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'SUPER-DUPER PASSWORD'
GO
IF NOT EXISTS (select 1 from sys.databases where
[is_master_key_encrypted_by_server] = 1)
ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY
GO
IF NOT EXISTS (SELECT 1 FROM sys.certificates WHERE name =
'DzCert_Main')
CREATE CERTIFICATE DzCert_Main
WITH SUBJECT = 'DzCert_Main',
EXPIRY_DATE = '01/01/2032';
GO
BACKUP CERTIFICATE DzCert_Main TO FILE = '%путь к папке для обмена сертификатами%\DzCert_Main.cer'
Аналогичное действие выполним на
втором сервере, только с указанием
другого имени сертификата
Если у нас нет контрольной точки,
то создадим её:
USE MASTER
GO
IF NOT EXISTS(SELECT * FROM
sys.endpoints WHERE type = 4)
CREATE ENDPOINT DzPoint
STATE = STARTED AS TCP (LISTENER_PORT
= 5022)
FOR DATABASE_MIRRORING (
AUTHENTICATION = CERTIFICATE DzCert_Main, ENCRYPTION = REQUIRED
,ROLE = ALL)
На втором
сервер выполняем аналогичные действия. ( в случае если мы настраиваем на одном
физическом сервере, но разных экземплярах - необходимо указывать различные
порты)
Теперь необходимо обменять
сертификаты меж серверами. Далее необходимо создать пользователей и привязать к
сертификату с другого сервера.
USE MASTER
GO
IF NOT EXISTS(SELECT 1 FROM
sys.syslogins WHERE name = 'DZ_User_Slave')
CREATE LOGIN DZ_User_Slave WITH
PASSWORD = 'SUPER-DUPER PASS'
IF NOT EXISTS(SELECT 1 FROM
sys.sysusers WHERE name = 'DZ_User_Slave')
CREATE USER DZ_User_Slave;
IF NOT EXISTS(SELECT 1 FROM
sys.certificates WHERE name = 'DzCert_Slave')
CREATE CERTIFICATE DzCert_Slave
AUTHORIZATION DZ_User_Slave
FROM FILE = '%путь к папке для обмена сертификатами%\DzCert_Slave.cer'
GRANT CONNECT ON ENDPOINT::DzPoint TO
DZ_User_Slave
GO
И как всегда, аналогичные
действия выполняем на втором сервере.
После выполнения этих действий
сервера могут авторизовать друг друга.
Теперь запускаем зеркалирование
На второстепенном
ALTER DATABASE DB SET PARTNER = 'TCP://SQLMain:5022'
На основном:
ALTER DATABASE DB SET PARTNER =
'TCP://SQLSlave:5022'
Всё, профит. зеркалирование
запущено.
Комментариев нет:
Отправить комментарий