Да-да-да, немного высокотехнологичного порно и все будет работать… Может сложиться так, что два-три-десять сайтов используют одинаковую БД, да еще и меняют ее переодически. Сделать один общий сервер БД не вариант, потому что все начинает тормозить адски. Закинуть все на один мегамощный комп уже не помогает от тормозов. И вот тут-то и приходит на помощь репликация эмси скл. Вот смотришь 12 минутное видео от микрософт, где мужик накликавает все типы репликаций и понимаешь — это же так просто Но есть один момент – репликация не будет нормально работать, если ваши сервера не в локальной сети. VPN поднимать совсем было не охота. Ну да ладно, придумали этакий костыль – механизм веб репликации данных – это та же репликация слиянием, что и обычно, только в миллион раз медленнее, но работает зато через интернет.
Что вообще происходит?
- На подписчике запускается агент слияния. Агент выполняет следующие действия:
- устанавливает SQL-соединение с базой данных подписки;
- извлекает из базы данных все изменения;
- производит HTTPS-запрос к компьютеру, на котором работает IIS-сервер;
- загружает изменения данных в виде XML-сообщения.
- Средство прослушивания репликации SQL Server и посредник репликации слиянием, находящиеся на IIS-сервере, выполняют следующие действия:
- обрабатывают HTTPS-запрос;
- устанавливают SQL-соединение с базой данных публикации;
- применяют переданные изменения к базе данных публикации;
- извлекают загруженные изменения для подписчика;
- возвращают HTTPS-ответ на агент слияния.
- После получения HTTPS-ответа агент слияния на подписчике применяет загруженные изменения к базе данных подписки.
И если тебе захотелось это настроить, вот готовый мануал с картинками!
На сервере, который раздает
Настройка IIS
Ставим IIS, потом настраиваем его по этой инструкции: https://msdn.microsoft.com/ru-ru/library/ff714039.aspx — Установка и настройка средства прослушивания репликации SQL Server. Там много всего не по делу, вот что я из нее делал
- Создайте на компьютере, где запущены службы IIS, новый каталог для файла replisapi.dll. Этот каталог вы можете создать в любом расположении, но рекомендуется разместить его в каталоге C:\Inetpub. Например, создайте каталог C:\Inetpub\SQLReplication\
- Скопируйте файл replisapi.dll из каталога C:\Program Files\Microsoft SQL Server\120\com\ в каталог, созданный на шаге 1.
- Зарегистрируйте файл replisapi.dll. В каталоге, созданном в шаге 1, выполните следующую команду через cmd: regsvr32 replisapi.dll
- Создайте новый веб-сайт для репликации или воспользуйтесь уже существующим. Я сделал новый, а физический путь поставил с:\Inetpub\SQLReplication\Home – это не принципиально
- Создайте виртуальный каталог в службах IIS. Виртуальный каталог должен быть создан на сайте, созданном в шаге 4, и сопоставлен с каталогом, созданным в шаге 1. Разрешения для этого каталога должны быть максимально ограничены. Необходимо выбрать как минимум разрешения Чтение и Выполнение.
- В диспетчере служб IIS на панели Соединения щелкните правой кнопкой мыши Веб-сайт по умолчанию и выберите Добавить виртуальный каталог.
- В поле Псевдоним введите SQLReplication.
- В поле Физический путь введите с:\Inetpub\SQLReplication\, затем нажмите кнопку ОК.
- Установите в настройках служб IIS разрешение выполнять файл replisapi.dll.
- В диспетчере служб IIS щелкните Веб-сайт по умолчанию.
- На центральной панели выберите Сопоставления обработчика.
- На панели Действия выберите Добавить сопоставление модуля.
- В поле Путь запроса введите replisapi.dll.
- В раскрывающемся списке Модуль выберите IsapiModule.
- В поле Исполняемый объект введите С:\Inetpub\SQLReplication\replisapi.dll.
- В поле Имя введите Replisapi.
- Нажмите кнопку Ограничения запроса, перейдите на вкладку Доступ и щелкните Выполнить.
- Нажмите кнопку ОК, чтобы закрыть диалоговое окно Ограничения запроса, а затем повторно нажмите кнопку ОК, чтобы закрыть диалоговое окно Добавить сопоставление модуля. При запросе на разрешение расширений ISAPI нажмите Да, чтобы добавить расширение.
- Убедитесь, что файл Replisapi.dll включен в список Включены сопоставлений обработчика. Если он находится в списке Выключены, щелкните правой кнопкой мыши Replisapi и выберите Изменить разрешения функции. Установите флажок Выполнить, а затем нажмите кнопку ОК.
- Настройка проверки подлинности служб IIS
- В диспетчере служб IIS щелкните на созданный сайт.
- На средней панели дважды щелкните Проверка подлинности.
- Щелкните правой кнопкой мыши «Анонимная проверка подлинности» и выберите «Выключить».
- Щелкните правой кнопкой мыши «Обычная проверка подлинности» и выберите «Включить».
- Если каких-то проверок подлинности не хватает – установите их через диспетчер серверов.
- Получите сертификат через stratssl.com. Вот инструкция как получить: http://habrahabr.ru/post/127643/ В итоге получится два файла: ssl.crt и ssl.key. Ну и пароль для ключа
- Устанавливаем SSL сертификат
- На сайте www.startssl.com идем сюда и жмем Create PKCS#12 (PFX) File:
- Втыкаем туда текст из файлов с шага 8:
- Жмем кнопку и скачиваем PFX файл, который закидываем на сервер IIS.
- Там заходим в IIS Manager, жмем это:
- Жмем справа импортировать, выбираем файлс третьего шага. Пофиг что расширение не подходит. Вводим пароль и жмем ОК
- Потом идем в наш созданный сайт и там создаем привязку:
- Все, заходим сюда: https://<тут_адрес_сайта>/sqlreplication/replisapi.dll?diag, проблем с сертификатом быть уже не должно, вводим админские логин и пароль, должно появится что-то типа этого:
- На сайте www.startssl.com идем сюда и жмем Create PKCS#12 (PFX) File:
- Возможно пулу приложения понадобится указать удостверение в дополнительных настройках. Можно создать левого пользователя без прав, с длинным паролем без ограничения срока действия, воткнуть его в группу IIS_IUSRS и дать ему права Чтение, Чтение & Выполнение и Просмотр содержимого папок на папку с:\Inetpub\SQLReplication\
Создание публикации
Теперь создаем публикацию репликации слияния. Надо помнить что это дерьмо добавляет левые столбцы к базе, поэтому сначала делаем полный бекап! Да кстати если у тебя в бд есть столбец с именем gen – то вероятно ничего не будет работать. Переименовать надобно.
- Жмем сюда
- Выбираем БД и тип – публикация слиянием
- Выбираем объекты, например таблицы.
- Далее, далее, далее…
- Выбираем не лучшее решение. Послушай мелкомягких и сделай по-своему
- Вводим имя публикации и запоминаем его. Оно нам пригодится
- Все четко
Создание снимка БД для инициализации
Публикация создана, но этого мало. Нужно создать снимок.
- Жмем на агента:
- Должно быть как на рисунке. Эта программа кромсает твои таблицы и стопорит транзакции. Но это во благо. Если что не так — жми запустить.
- Кстати может понадобится дать полный доступ для SQLSERVERAGENT или для всех на папку C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\repldata (ну или куда там у тебя инсталирован SQL Server)
- В итоге должно стать так:
Настройка параметров публикации
Теперь заходим в свойства публикации (правая кнопка – меню – свойства). Там надо
- Выбрать срок действия:
- Разрешить веб-синхронизацию и указать сайт:
- Если планируются жирные синхронизации, то можно поэкспериментировать с параметром WebSyncMaxXmlSize по адресу: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\110\Replication
Например если поставить туда 2000000, то все будет примерно так плачевно:
Так что поаккуратнее с этим WebSyncMaxXmlSize.
Последний штрих – регистрируем подписчика
Для этого выполняем скрипт:
1 2 |
USE имя_бд GO |
1 2 3 4 5 |
EXEC sp_addmergesubscription @publication = N'blabla_publication', @subscriber = 'HOMEPC_WIN8', -- это виндовое имя компа подписчика @subscriber_db = N'имя бд', @subscription_type =N'pull'; -- не трогаем |
На сервере, который отгребает (подписчик)
- Создаем БД. Запоминаем ее имя.
- Выполняем такой запрос, только подписать нужно свои параметры
1 2 3 4 5 6 |
USE имя_бд GO EXEC sp_addmergepullsubscription @publisher = 'WIN-JRR7QCOB07G', -- это виндовое имя раздающего сервера @publication = N'blabla_publication', -- имя публикации @publisher_db = N'имя бд'; |
1 2 3 4 5 6 7 8 9 10 11 |
EXEC sp_addmergepullsubscription_agent @publisher = 'WIN-JRR7QCOB07G', -- это виндовое имя раздающего сервера @publisher_db = N'имя бд', @publication = N'blabla_publication', -- имя публикации @distributor = 'WIN-JRR7QCOB07G', -- это виндовое имя раздающего сервера @use_web_sync = 1, @internet_security_mode = 0, @internet_url = 'https://сайт/sqlreplication', @internet_login = 'логин для @internet_url, который вводим при входе с браузера. либо админский, либо пользователь пула', @internet_password = 'пароль для @internet_url'; GO |
И о чудо, появилась подписка:
Жмем Репликация – Локальный подписки – на подписку правой кнопкой – в меню выбираем Свойства. Появляется таблица, и там есть строка “Время ожидания сервера” ставим побольше:
Когда все готово, жмем Репликация – Локальный подписки – на подписку правой кнопкой – в меню выбираем “Просмотр состояния синхронизации”:
Появляется диалог, жмем запустить, ждем полтора года:
Вот такой простой и понятный алгоритм репликации SQL Server.
Добавить комментарий