Мастер-Тур:Настройка репликации — различия между версиями
[непроверенная версия] | [досмотренная версия] |
Buentaeva (обсуждение | вклад) |
Biryukov (обсуждение | вклад) (→Настройки подключения в ПК «Мастер-Тур», ПК «Мастер-Web» и web-сервисах) |
||
(не показано 68 промежуточных версий 4 участников) | |||
Строка 18: | Строка 18: | ||
''Команды транзакций'' хранятся в базе данных распространителя до тех пор, пока они не будут распространены на все подписчики или пока не закончится максимальный срок хранения на распространителе. '''Подписчики''' получают транзакции в том же порядке, в котором они применялись на издателе. <br> | ''Команды транзакций'' хранятся в базе данных распространителя до тех пор, пока они не будут распространены на все подписчики или пока не закончится максимальный срок хранения на распространителе. '''Подписчики''' получают транзакции в том же порядке, в котором они применялись на издателе. <br> | ||
'''Агент распространителя''' запускается на '''распространителе'''. '''Агент''' применяет транзакции из базы данных распространителя к подписчику. <br> | '''Агент распространителя''' запускается на '''распространителе'''. '''Агент''' применяет транзакции из базы данных распространителя к подписчику. <br> | ||
− | ==Использование репликации== | + | ==Использование репликации в ПК "Мастер-Web"== |
При больших нагрузках на сервер репликация позволяет задействовать дополнительные мощности. Это достигается отделением механизма поиска и подбора данных в ''ПК «Мастер-Web»'' в отдельную базу данных, которая может быть размещена на отдельном сервере, что позволяет значительно увеличить скорость работы как в ''ПК «Мастер-Web»'', так и в ''ПК «Мастер-Тур»''. | При больших нагрузках на сервер репликация позволяет задействовать дополнительные мощности. Это достигается отделением механизма поиска и подбора данных в ''ПК «Мастер-Web»'' в отдельную базу данных, которая может быть размещена на отдельном сервере, что позволяет значительно увеличить скорость работы как в ''ПК «Мастер-Web»'', так и в ''ПК «Мастер-Тур»''. | ||
+ | |||
+ | <BR>Применительно к ПК "Мастер-Web" и "Мастер-Тур" публикатором становится сервер с мастер-туром, а подписчиком с мастер-вебом. Изменения в таблицах передаются с основного на поисковый сервер. Таблицы, участвующие в репликации, называются '''статьями репликации'''. Они делятся на основные и сервисные: основные служат источником данных, сервисные - командами для обработки данных. Подробнее о командах и способах их обработки см. Очередь обработки туров | ||
+ | Просмотреть список статей репликации можно на основном сервере в закладке articles свойств публикации: | ||
+ | <br> | ||
+ | [[Файл:tb133.png|Статьи репликации]]<br> | ||
+ | |||
+ | <BR>Установку репликации баз данных рекомендуется производить в нерабочее для компании время. | ||
+ | Перед началом настройки обязательно необходимо создать резервную копию рабочей базы данных. | ||
[[Файл: am_063.png|left|Предупреждение]]<BR> | [[Файл: am_063.png|left|Предупреждение]]<BR> | ||
<BR> | <BR> | ||
− | + | Для работы механизма репликации необходимо выполнения условия: | |
− | + | имя сервера (hostname) и имя sql server instance должны совпадать (как для публикатора, так и для подписчика) | |
− | |||
<BR> | <BR> | ||
+ | |||
+ | Для настройки репликации необходимо обратиться в Департамент по работе с клиентами Компании Мегатек '''service@megatec.ru'''. | ||
<BR> | <BR> | ||
− | + | '''ВНИМАНИЕ!''' Перед установкой новой версии репликации необходимо удалить предыдущую версию, если таковая использовалась. | |
− | |||
==Удаление репликации== | ==Удаление репликации== | ||
Строка 65: | Строка 73: | ||
Для установки репликации необходимо: | Для установки репликации необходимо: | ||
− | *поднять на | + | *поднять на двух серверах 2 копии рабочей базы данных; |
− | |||
*выполнить скрипты на базе-публикаторе (основная база); | *выполнить скрипты на базе-публикаторе (основная база); | ||
*выполнить скрипты на базе-подписчике (поисковая база). | *выполнить скрипты на базе-подписчике (поисковая база). | ||
− | === | + | ===Изменение настроек таблицы SystemSettings=== |
− | + | ||
+ | При прогоне скрипта создания публикации изменяются настройки в таблице SystemSettings: <br><br> | ||
+ | <code> | ||
+ | <span style="color:blue">update</span> dbo.SystemSettings<br> | ||
+ | <span style="color:blue">set</span><br> | ||
+ | ss_parmvalue = <span style="color:red">'publisher'</span><br> | ||
+ | <span style="color:blue">where</span><br> | ||
+ | ss_parmname = <span style="color:red">'MWReplication'</span><br><br> | ||
+ | |||
+ | <span style="color:blue">update</span> dbo.SystemSettings<br> | ||
+ | <span style="color:blue">set</span><br> | ||
+ | ss_parmvalue = @subscriptionDB –- название БД подписчика<br> | ||
+ | <span style="color:blue">where</span><br> | ||
+ | ss_parmname = <span style="color:red">'MWReplSubscriberDB'</span> | ||
+ | <br> | ||
+ | </code> | ||
+ | <br> | ||
+ | Эти настройки влияют на работу хранимых процедур '''mwIsPublisher()''' и '''mwIsSubscriber()''' и на логику других хранимых процедур, использующих эти процедуры. | ||
+ | |||
===Выполнение скриптов на базе-публикаторе=== | ===Выполнение скриптов на базе-публикаторе=== | ||
− | На базе-публикаторе необходимо выполнить | + | На базе-публикаторе необходимо выполнить следующие скрипты строго в указанном порядке: |
− | *''' | + | *'''01. sp_CreateDirectory.sql''' |
− | ====Изменения в скрипте | + | *'''02. sp_GeneratePassword.sql''' |
− | Изменения нужно внести в секции:< | + | *'''03. ReplicationPUB_92.sql''' (необходимо внести изменения в скрипт) |
+ | ====Изменения в скрипте ReplicationPUB_92.sql:==== | ||
+ | Изменения нужно внести в секции:<br /><br /> | ||
<code> | <code> | ||
− | <span style="color:green">/******** | + | <span style="color:green">/******** НАСТРОЙКИ ********/ <br></span> |
− | + | <span style="color:blue">set </span> @generateREPLUSERPassword = 0 <br> | |
− | <span style="color:blue">set </span> @ | + | <span style="color: green "><br> |
− | <span style="color:green "> | + | /******** УКАЗАТЬ ДАННЫЕ ДЛЯ ПОИСКОВОГО СЕРВЕРА ********/ <br> |
− | |||
− | |||
− | |||
− | |||
− | <br> | ||
− | /******** | ||
/** СЕРВЕР **/ </span> | /** СЕРВЕР **/ </span> | ||
<span style="color:blue">set </span> @subscriptionServer = <span style="color:red">'server' </span> <br> | <span style="color:blue">set </span> @subscriptionServer = <span style="color:red">'server' </span> <br> | ||
Строка 99: | Строка 120: | ||
</code> | </code> | ||
− | |||
− | |||
− | |||
Значением параметра '''@subscriptionServer''' нужно указать адрес сервера, на котором находится база-подписчик. <br> | Значением параметра '''@subscriptionServer''' нужно указать адрес сервера, на котором находится база-подписчик. <br> | ||
Значением параметра '''@subscriptionDB''' нужно прописать название базы-подписчика. <br> | Значением параметра '''@subscriptionDB''' нужно прописать название базы-подписчика. <br> | ||
− | Значением параметра '''@subscriptionLogin''' нужно указать логин пользователя | + | Значением параметра '''@subscriptionLogin''' нужно указать логин пользователя на сервере подписчике с административными правами (должен иметь серверную роль '''sysadmin'''). <br> |
− | Значением параметра '''@subscriptionPassword''' нужно указать пароль пользователя в | + | Значением параметра '''@subscriptionPassword''' нужно указать пароль пользователя на сервере подписчике с административными правами (должен иметь серверную роль '''sysadmin''').<br> |
+ | Значение параметра '''@generateREPLUSERPassword''' может быть двух видов: | ||
+ | * '''0''' – в результате прогона скрипта на серверах публикатора и подписчика будет создан пользователь '''REPLUSER''' с паролем по умолчанию '''REPLUSERREPLUSER'''. | ||
+ | * '''1''' – в результате прогона скрипта на серверах публикатора и подписчика будет создан пользователь '''REPLUSER''' со сгенерированным паролем случайным образом. Данные о созданном логине/пароле будут выведены в результирующем наборе после выполнения скрипта. Если пользователь существовал, то пароль меняться не будет. | ||
+ | <br> | ||
+ | |||
+ | [[Файл: mb_031.png|left|Дополнительная информация]] <BR> | ||
+ | Пароли, которые будут выведены в результирующем наборе после выполнения скрипта необходимо сохранить | ||
+ | (особенно если использовался параметр '''@generateREPLUSERPassword''' в значении '''1'''). Также данные пароли | ||
+ | необходимо будет указать в скрипте '''01. ReplicationSUB.sql''', который будет выполняться на базе-подписчике. | ||
===Выполнение скриптов на базе-подписчике=== | ===Выполнение скриптов на базе-подписчике=== | ||
На базе-подписчике необходимо выполнить следующие скрипты строго в указанном порядке: | На базе-подписчике необходимо выполнить следующие скрипты строго в указанном порядке: | ||
− | *'''01. | + | *'''01. ReplicationSUB.sql''' (необходимо внести изменения в скрипт) |
− | *'''02. | + | *'''02. CheckReplicationTablesIdentity.sql''' (необходимо внести изменения в скрипт и вручную снять идентификаторы) |
− | *'''03. | + | *'''03. fn_mwGetServiceClassesNames.sql''' |
− | *'''04. | + | *'''04. Synchronize tables in replication.sql''' (производит синхронизацию таблиц статей репликации) |
− | *''' | + | *'''Jobs_Standart.sql''' |
− | + | ||
− | *''' | + | ====Изменения в скрипте 01. ReplicationSUB.sql==== |
− | *''' | + | Изменения нужно внести в секции:<br> |
− | *''' | + | <code> |
− | + | <span style="color:green">/******** УКАЗАТЬ ДАННЫЕ ДЛЯ ОСНОВНОГО СЕРВЕРА ********/<br> | |
− | + | /** СЕРВЕР **/</span><br> | |
− | + | <span style="color:blue">set</span> @publisherServer = <span style="color: red ">'server'</span> <br> | |
− | + | <span style="color:green">/** БД **/</span> <br> | |
− | + | <span style="color:blue">set</span> @publisherDB = <span style="color: red ">'testrepl'</span> <br> | |
+ | <span style="color:green">/** ЛОГИН **/</span> <br> | ||
+ | <span style="color:blue">set</span> @pubLogin = <span style="color: red ">'sa'</span> <br> | ||
+ | <span style="color:green">/** ПАРОЛЬ **/</span> <br> | ||
+ | <span style="color:blue">set</span> @pubPassword = <span style="color: red ">'sa'</span> <br> | ||
+ | <span style="color:green">/******** END ********/ <br> | ||
+ | <br> | ||
+ | /******** УКАЗАТЬ ДАННЫЕ ДЛЯ ПОИСКОВОГО СЕРВЕРА ********/ <br></span> | ||
+ | <span style="color:green">/** ЛОГИН **/</span> <br> | ||
+ | <span style="color:blue">set</span> @subLogin = <span style="color: red ">'sa'</span> <br> | ||
+ | <span style="color:green">/** ПАРОЛЬ **/</span> <br> | ||
+ | <span style="color:blue">set</span> @password = <span style="color: red ">'sa'</span> <br> | ||
+ | <span style="color:green">/******** END ********/</span><br> | ||
+ | </code> | ||
+ | Значением параметра '''@publisherServer''' нужно указать адрес сервера, на котором находится база-подписчик. <br> | ||
+ | Значением параметра '''@publisherDB''' нужно прописать название базы-публикатора. <br> | ||
+ | Значением параметра '''@pubLogin''' нужно указать логин пользователя в базе-публикаторе, под которым будет работать репликация. <br> | ||
+ | Значением параметра '''@pubPassword''' нужно указать пароль пользователя в базе-публикаторе, под которым будет работать репликация. <br> | ||
+ | Значением параметра '''@subLogin''' нужно указать логин пользователя в базе-подписчике, под которым будет работать репликация. <br> | ||
+ | Значением параметра '''@password''' нужно указать пароль пользователя в базе-подписчике, под которым будет работать репликация. <br> | ||
+ | ====Изменения в скрипте + ручное снятие признака identity: скрипт 02. CheckReplicationTablesIdentity.sql==== | ||
+ | Изменения нужно внести в секции:<br> | ||
+ | <br> | ||
+ | <code> | ||
+ | <span style="color:green">/******** УКАЗАТЬ БАЗУ ДАННЫХ ПУБЛИКАТОРА ********/</span><br> | ||
+ | <span style="color:blue">declare</span> @publisher_db <span style="color:blue">as nvarchar</span> (100) <br> | ||
+ | <span style="color:blue">set</span> @publisher_db = <span style="color:red">'testrepl'</span><br> | ||
+ | <br> | ||
+ | <span style="color:green">/******** УКАЗАТЬ ИМЯ ПУБЛИКАЦИИ ********/</span><br> | ||
+ | <span style="color:blue">declare</span> @publicationName <span style="color:blue">as nvarchar</span> (100)<br> | ||
+ | <span style="color:blue">set</span> @publicationName = <span style="color:red">'MW_PUB'</span><br> | ||
+ | </code><br> | ||
+ | Значением параметра '''@publisher_db''' нужно прописать название базы-публикатора. <br> | ||
+ | Значением параметра '''@publicationName''' нужно прописать имя публикации.<br><br> | ||
+ | <br /> | ||
+ | В результате выполнения скрипта будет выведен список таблиц, у которых необходимо снять признак identity specification у первичного ключа. | ||
+ | '''Ручное снятие признака identity:''' <br> | ||
+ | Примерный результат после выполнения скрипта отображен ниже: | ||
+ | <br><br> | ||
+ | <table border:0> | ||
+ | <tr> <td align:center>Seed </td><td align:center>Increment </td><td align:center>Table_Name</td></tr> | ||
+ | <tr> <td align:center>1</td><td align:center> 1 </td><td align:center> HotelOption </td></tr> | ||
+ | <tr> <td align:center>1</td><td align:center> 1 </td><td align:center> HotelTypeRelations </td></tr> | ||
+ | <tr> <td align:center>1</td><td align:center> 1 </td><td align:center> HotelTypes </td></tr> | ||
+ | <tr> <td align:center>1</td><td align:center> 1 </td><td align:center> mwReplTours </td></tr> | ||
+ | <tr> <td align:center>1</td><td align:center> 1 </td><td align:center> ObjectGroupLinks </td></tr> | ||
+ | <tr> <td align:center>1</td><td align:center> 1 </td><td align:center> ObjectGroupMembers </td></tr> | ||
+ | <tr> <td align:center>1</td><td align:center> 1 </td><td align:center> ObjectGroups </td></tr> | ||
+ | <tr> <td align:center>1</td><td align:center> 1 </td><td align:center> PrtBonusDetails </td></tr> | ||
+ | <tr> <td align:center>1</td><td align:center> 1 </td><td align:center> PrtBonuses </td></tr> | ||
+ | <tr> <td align:center>1</td><td align:center> 1 </td><td align:center> stopavia </td></tr> | ||
+ | <tr> <td align:center>1</td><td align:center> 1 </td><td align:center> tbl_Costs </td></tr> | ||
+ | <tr> <td align:center>1</td><td align:center> 1 </td><td align:center> TurDate </td></tr> | ||
+ | </table> | ||
+ | <br> | ||
+ | Необходимо во всех указанных таблицах сбросить значение '''Is Identity''' с yes на no. Для этого нужно в каждой таблице выбрать колонку с первичным ключом. В свойствах колонки ''Identity Specification'' -> ''(Is Identity)'' – значение '''yes''' сбросить на '''no''': | ||
+ | <br /> | ||
+ | [[Файл:dg_01.png]] | ||
+ | <br /> | ||
+ | Далее сохранить. | ||
+ | <br> | ||
+ | Для того, чтобы была возможность корректно сохранять изменения, необходимо проверить, чтобы в приложении ''Microsoft SQL Server Management Studio'', экране ''Tools'' -> ''Options'', разделе ''Designers'' признак ''Prevent saving changes that require table re-creation'' – не был выбран: | ||
+ | [[Файл:dg_02.png]] | ||
+ | <br> | ||
+ | В случае, если в таблице большое количество записей, то при попытке сохранения возникает соответствующее окно с предупреждением, что данная операция займет много времени. В этом случае нужно отказаться от продолжения и сгенерировать скрипт (выбрав в контекстном меню экрана редактирования таблицы пункт <code>Generate Change Script</code>): | ||
+ | <br /> | ||
+ | [[Файл:dg_03.png]] | ||
+ | <br /> | ||
+ | Далее сгенерированный скрипт выполнить на базе данных (изменения будут внесены не с помощью кнопки '''«Сохранить»''', а с помощью скрипта). | ||
+ | ===Установка заданий (Jobs)=== | ||
+ | Для корректной работы репликации рекомендуется установить [[Мастер-Тур:Настройка заданий#Jobs_MW (Репликация)|следующие задания]]. | ||
− | == | + | ==Включение репликации== |
+ | После установки репликации необходимо включить задание '''mwReplQueueManager''' ('''mwReplQueueManagerDivide_X'''). Для этого на стороне сервера подписчика в контекстном меню задания ''SQL Server Agent'' -> ''Job'' -> ''mwReplQueueManager'' необходимо выбрать значение '''Enable'''. | ||
− | + | ===Остановка/повторное включение=== | |
+ | Для остановки работы репликации необходимо: | ||
+ | * на сервере подписчика в контекстном меню ''Replication'' -> ''Local Subscriptions'' -> ''<название базы-подписчика>'' выбрать '''View Synchronization Status''' и в открывшемся окне нажать кнопку '''Stop''' | ||
+ | * на сервере публикатора в контекстном меню ''Replication'' -> ''Local Publications'' -> ''<название базы-публикатора>'' выбрать '''View Log Reader Agent Status''' и в открывшемся окне нажать кнопку '''Stop''' | ||
+ | <br /> | ||
+ | Для повторного запуска репликации необходимо: | ||
+ | * на сервере подписчика в контекстном меню ''Replication'' -> ''Local Subscriptions'' -> ''<название базы-подписчика>'' выбрать '''View Synchronization Status''' и в открывшемся окне нажать кнопку '''Start''' | ||
+ | * на сервере публикатора в контекстном меню ''Replication'' -> ''Local Publications'' -> ''<название базы-публикатора>'' выбрать '''View Log Reader Agent Status''' и в открывшемся окне нажать кнопку '''Start''' | ||
+ | |||
+ | ==Пересоздание подписки== | ||
+ | |||
+ | [[Файл: mb_030.png|left|Предупреждение]] <br /> | ||
+ | Для пересоздания подписки необходимо подключаться через SQL Server аутентификацию под пользователем, обладающим правами администратора. | ||
+ | |||
+ | <br /><br /> | ||
+ | В некоторых случаях, например, при обновлении ПК Мастер-Тур/Мастер-Web на релиз/service pack, понадобится пересоздание подписки (в случае, если это указано в примечании к обновлению). Для этого необходимо сначала удалить старую подписку. | ||
+ | <br />[[Файл:mb_133.png|Пересоздание подписки_1]]<br /> | ||
+ | <br /> | ||
+ | Далее в контекстном меню '''Local Subscriptions''' выбрать пункт '''New Subscriptions...'''. | ||
+ | <br />[[Файл:mb_134.png|Пересоздание подписки_2]]<br /> | ||
+ | <br /> | ||
+ | В подразделе '''Publication''' выбрать необходимую публикацию. | ||
+ | <br />[[Файл:mb_135.png|Пересоздание подписки_3]]<br /> | ||
+ | <br /> | ||
+ | В подразделе '''Distribution Agent Location''' выбрать пункт '''Run each agent at its Subscriber (pull subscriptions)'''. | ||
+ | <br />[[Файл:mb_136.png|Пересоздание подписки_4]]<br /> | ||
+ | <br /> | ||
+ | В подразделе '''Subscribers''' выбрать базу-подписчик. | ||
+ | <br />[[Файл:mb_137.png|Пересоздание подписки_5]]<br /> | ||
+ | <br /> | ||
+ | В подразделе '''Distribution Agent Security''' выбрать данные, как указано на скриншоте ниже, плюс указать логин и пароль пользователя. | ||
+ | <br />[[Файл:mb_138.png|Пересоздание подписки_6]]<br /> | ||
+ | <br /> | ||
+ | В подразделе '''Synchronization Schedule''' выбрать '''Run continuously'''. | ||
+ | <br />[[Файл:mb_139.png|Пересоздание подписки_7]]<br /> | ||
+ | <br /> | ||
+ | В подразделе '''Initialize Subscriptions''' обязательно снять признак '''Initialize'''. | ||
+ | <br />[[Файл:mb_140.png|Пересоздание подписки_8]]<br /> | ||
+ | <br /> | ||
+ | В подразделе '''Wizard Actions''' ничего не изменять, нажать кнопку '''Next'''. | ||
+ | <br />[[Файл:mb_141.png|Пересоздание подписки_9]]<br /> | ||
+ | <br /> | ||
+ | В подразделе '''Complete the Wizard''' нажать кнопку '''Finish'''. | ||
+ | <br />[[Файл:mb_142.png|Пересоздание подписки_10]]<br /> | ||
+ | <br /> | ||
+ | После успешного создания подписки в подразделе '''Creating Subscription(s)...''' в колонке Status будет проставлен статус Success. | ||
+ | <br />[[Файл:mb_144.png|Пересоздание подписки_12]]<br /> | ||
+ | |||
+ | ==Мониторинг репликации== | ||
+ | ===Проверка работы инфраструктуры в целом=== | ||
+ | Для того, чтобы проверить корректность работы репликации необходимо на сервере публикатора в контекстном меню '''Replication''' -> '''Local Publications''' -> '''<название базы-публикатора>''' выбрать значение '''Replication Monitor''', в открывшемся окне выбрать вкладку '''Tracer Tokens''' и нажать кнопку '''Insert Tracer'''. | ||
+ | <br />[[Файл:mb_169.png|Пересоздание подписки_13]]<br /> | ||
+ | Через некоторое время в колонках '''Publisher to Distributor''', '''Distributor to Subscriber''', '''Total Latency''' появятся значения. Наличие этих значений свидетельствует о корректности работы репликации после пересоздания подписки. | ||
+ | <br />[[Файл:mb_170.png|Пересоздание подписки_14]] | ||
+ | <br /> | ||
+ | В случае, если в одной из колонок на протяжении достаточно долгого времени (индивидуально, зависит от скорости сети, загруженности серверов) так и осталось значение '''pending...''', это свидетельствует о наличии проблем в доставке изменений. Так, значение '''pending...''' в колонке '''Distributor to Subscriber''' свидетельствует об ошибке при применении изменения на базе данных подписчика (см. следующий пункт). | ||
+ | |||
+ | ===Получение текста команды, вызвавшей ошибку=== | ||
+ | Для просмотра текста ошибкок, возникших в процессе доставки изменений с публикатора на подписчик, на основном сервере на системной базе данных distribution необходимо выполнить запрос:<br><br> | ||
<code> | <code> | ||
− | <span style="color:blue"> | + | <span style="color:blue">select</span> <span style="color:pink">cast </span>(cmd.Command <span style="color:blue">as nvarchar</span>(<span style="color:pink">max</span>)), * <span style="color:blue">from</span> dbo.MSrepl_errors err<br> |
− | + | <span style="color:gray">left join</span> dbo.MSrepl_commands cmd<br> | |
− | + | <span style="color:blue">on</span> err.xact_seqno = cmd.xact_seqno<br> | |
− | + | <span style="color:blue">order by time desc</span></code><br><br> | |
− | + | ||
+ | Если известны параметры '''@xact_seqno_start''', '''@xact_seqno_end''', полученные из монитора репликации и идентифицирующие конкретную ошибку, то запрос может выглядеть следующим образом: <br><br> | ||
+ | <code><span style="color:blue">exec</span> sp_browsereplcmds @xact_seqno_start = <span style="color:red">'0x000019a0000032e50008'</span><br> | ||
+ | ,@xact_seqno_end = <span style="color:red">'0x000019a0000032e50008'</span></code><br><br> | ||
+ | где:<br> | ||
+ | |||
+ | <span style="color:red">'0x000019a0000032e50008'</span>, <span style="color:red">'0x000019a0000032e50008'</span> – значения параметров '''@xact_seqno_start''', '''@xact_seqno_end''', которые можно получить из монитора репликации при возникновении ошибки. | ||
+ | |||
+ | ==Настройки подключения в ''ПК «Мастер-Тур»'', ''ПК «Мастер-Web»'' и ''web-сервисах''== | ||
+ | ===''ПК «Мастер-Тур»''=== | ||
+ | ''ПК «Мастер-Тур»'' после установки репликации должен быть настроен на базу-публикатор. | ||
− | + | ===''ПК «Мастер-Web»''=== | |
− | + | После установки репликации в ''ПК «Мастер-Web»'' добавляется дополнительная строка подключения: | |
− | |||
− | |||
− | |||
<br> | <br> | ||
− | </ | + | '''Строка подключения к базе данных ''ПК «Мастер-Тур»'' ''':<br> |
+ | |||
+ | '''1.''' <add key = "connectionString" value = "Data Source=<span style="color:blue">''ip-адрес сервера основной базы данных ПК «Мастер-тур»</span">'';Initial Catalog=<span style="color:blue">''название основной базы данных ПК «Мастер-тур»</span">'';User ID=<span style="color:blue">''логин пользователя ПК «Мастер-тур», под которым работает репликация</span">'';Password=<span style="color:blue">''пароль пользователя ПК «Мастер-тур», под которым работает репликация</span">''"/><br> | ||
+ | '''2.''' <add key = "searchConnectionString" value = "Data Source=<span style="color:blue">''ip-адрес сервера поисковой базы данных ПК «Мастер-тур»</span">'';Initial Catalog=<span style="color:blue">''название поисковой базы данных ПК «Мастер-тур»</span">'';User ID=<span style="color:blue">/''логин пользователя ПК «Мастер-тур», под которым работает репликация''</span">;Password=<span style="color:blue">''пароль пользователя ПК «Мастер-тур», под которым работает репликация''</span">"/><br> | ||
+ | '''3.''' <add key = "connectionStringShort" value = "Data Source=<span style="color:blue">''ip-адрес сервера основной базы данных ПК «Мастер-Тур»''</span">;Initial Catalog=<span style="color:blue">''название основной базы данных ПК «Мастер-Тур»''</span">"/> <br> | ||
+ | |||
+ | ===''Web-сервиса''=== | ||
+ | Если используются web-сервиса, то после установки репликации в конфигурационном файле web-сервисов указывается следующее подключение: | ||
<br> | <br> | ||
− | + | '''Строка подключения к базе данных ''ПК «Мастер-Тур»'' ''':<br> | |
+ | |||
+ | '''1.''' <add key = "connectionString" value = "Data Source=<span style="color:blue">''ip-адрес сервера основной базы данных ПК «Мастер-тур»</span">'';Initial Catalog=<span style="color:blue">''название основной базы данных ПК «Мастер-тур»</span">'';User ID=<span style="color:blue">''логин пользователя ПК «Мастер-тур», под которым работает репликация</span">'';Password=<span style="color:blue">''пароль пользователя ПК «Мастер-тур», под которым работает репликация</span">''"/><br> | ||
+ | '''2.''' <add key = "searchConnectionString" value = "Data Source=<span style="color:blue">''ip-адрес сервера поисковой базы данных ПК «Мастер-тур»</span">'';Initial Catalog=<span style="color:blue">''название поисковой базы данных ПК «Мастер-тур»</span">'';User ID=<span style="color:blue">/''логин пользователя ПК «Мастер-тур», под которым работает репликация''</span">;Password=<span style="color:blue">''пароль пользователя ПК «Мастер-тур», под которым работает репликация''</span">"/><br> | ||
==Статьи репликации ПК "Мастер-Web"== | ==Статьи репликации ПК "Мастер-Web"== | ||
Строка 189: | Строка 362: | ||
Процесс удаления тура при репликации с помощью Priceremover представлен на рисунке.<br> | Процесс удаления тура при репликации с помощью Priceremover представлен на рисунке.<br> | ||
[[Файл:tb139.png|Процесс удаления тура при репликации с помощью Priceremover]] <br> | [[Файл:tb139.png|Процесс удаления тура при репликации с помощью Priceremover]] <br> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
[[Category:Мастер-Тур_Администрирование]] | [[Category:Мастер-Тур_Администрирование]] |
Текущая версия на 14:01, 15 февраля 2019
Содержание
- 1 Общая архитектура репликации
- 2 Использование репликации в ПК "Мастер-Web"
- 3 Удаление репликации
- 4 Установка репликации
- 5 Включение репликации
- 6 Пересоздание подписки
- 7 Мониторинг репликации
- 8 Настройки подключения в ПК «Мастер-Тур», ПК «Мастер-Web» и web-сервисах
- 9 Статьи репликации ПК "Мастер-Web"
- 10 Очередь обработки туров
- 11 Выставление тура
- 12 Снятие тура
- 13 Удаление тура
- 14 Удаление тура с помощью Priceremover
Общая архитектура репликации
Репликация представляет собой набор технологий копирования и распространения данных и объектов баз данных между базами данных.
При репликации изменения, сделанные в одной копии объекта, могут быть распространены в другие копии.
Существует несколько видов репликации:
- Моментальных снимков
- Транзакций
- Слиянием
Компания Мегатек использует репликацию транзакций. Её схема представлена на рисунке:
Инфраструктура состоит из 3 блоков:
- Издатель
- Распространитель
- Подписчик
Репликация транзакций реализуется агентом моментальных снимков, агентом чтения журналов и агентом распространителя.
Прежде чем новый подписчик репликации транзакций сможет получить добавочные изменения от издателя, на подписчике должны находиться таблицы со схемой и данными, совпадающими со схемой и данными в таблицах на издателе. Исходный набор данных обычно является моментальным снимком, созданным агентом моментальных снимков. Исходный набор данных может также предоставляться через резервную копию или другим способом.
Агент моментальных снимков готовит файлы моментальных снимков, содержащие схему, данные публикуемых таблиц и объекты базы данных, хранит файлы в папке моментальных снимков и записывает задания синхронизации в базу данных распространителя на распространителе.
Агент чтения журналов выполняется на распространителе; обычно он выполняется непрерывно, но может также запускаться согласно задаваемому расписанию. При выполнении агент чтения журнала сначала читает журнал транзакций публикации (обычный журнал транзакций базы данных) и выявляет все инструкции INSERT, UPDATE и DELETE или другие изменения данных в транзакциях, отмеченных для репликации. Далее агент копирует эти транзакции в пакетах в базу данных распространителя на стороне распространителя.
Команды транзакций хранятся в базе данных распространителя до тех пор, пока они не будут распространены на все подписчики или пока не закончится максимальный срок хранения на распространителе. Подписчики получают транзакции в том же порядке, в котором они применялись на издателе.
Агент распространителя запускается на распространителе. Агент применяет транзакции из базы данных распространителя к подписчику.
Использование репликации в ПК "Мастер-Web"
При больших нагрузках на сервер репликация позволяет задействовать дополнительные мощности. Это достигается отделением механизма поиска и подбора данных в ПК «Мастер-Web» в отдельную базу данных, которая может быть размещена на отдельном сервере, что позволяет значительно увеличить скорость работы как в ПК «Мастер-Web», так и в ПК «Мастер-Тур».
Применительно к ПК "Мастер-Web" и "Мастер-Тур" публикатором становится сервер с мастер-туром, а подписчиком с мастер-вебом. Изменения в таблицах передаются с основного на поисковый сервер. Таблицы, участвующие в репликации, называются статьями репликации. Они делятся на основные и сервисные: основные служат источником данных, сервисные - командами для обработки данных. Подробнее о командах и способах их обработки см. Очередь обработки туров
Просмотреть список статей репликации можно на основном сервере в закладке articles свойств публикации:
Установку репликации баз данных рекомендуется производить в нерабочее для компании время.
Перед началом настройки обязательно необходимо создать резервную копию рабочей базы данных.
Для работы механизма репликации необходимо выполнения условия: имя сервера (hostname) и имя sql server instance должны совпадать (как для публикатора, так и для подписчика)
Для настройки репликации необходимо обратиться в Департамент по работе с клиентами Компании Мегатек service@megatec.ru.
ВНИМАНИЕ! Перед установкой новой версии репликации необходимо удалить предыдущую версию, если таковая использовалась.
Удаление репликации
База-публикатор
Задания (Jobs)
Необходимо удалить задания:
- mwReplCleanPublisher
- mwReplDeliverChanges
Триггеры (Triggers)
Необходимо удалить триггеры:
- Таблица tbl_Costs: все триггеры с префиксом mwRepl в названии;
- Таблица tbl_Quotes: все триггеры с префиксом mwRepl в названии;
- Таблица TurDate: все триггеры с префиксом mwRepl в названии;
- Таблица TP_Tours: все триггеры;
- Таблица TP_Prices: триггер mwReplDeletePrice.
Хранимые процедуры (Stored Procedures)
Необходимо заменить хранимую процедуру dbo.ClearMasterWebSearchFields на релизную.
База-подписчик
Задания (Jobs)
Необходимо удалить задания:
- mwReplApplyChanges
- mwReplCleanSubscriber
Триггеры (Triggers)
Необходимо удалить триггеры:
- Таблица tbl_Costs: все триггеры с префиксом mwRepl в названии;
- Таблица tbl_Quotes: все триггеры с префиксом mwRepl в названии;
- Таблица TurDate: все триггеры с префиксом mwRepl в названии;
- Таблица TP_Tours: триггер mwReplDeletePriceTour;
- Таблица TP_Prices: триггер mwReplDeletePrice.
Установка репликации
Для установки репликации необходимо:
- поднять на двух серверах 2 копии рабочей базы данных;
- выполнить скрипты на базе-публикаторе (основная база);
- выполнить скрипты на базе-подписчике (поисковая база).
Изменение настроек таблицы SystemSettings
При прогоне скрипта создания публикации изменяются настройки в таблице SystemSettings:
update dbo.SystemSettings
set
ss_parmvalue = 'publisher'
where
ss_parmname = 'MWReplication'
update dbo.SystemSettings
set
ss_parmvalue = @subscriptionDB –- название БД подписчика
where
ss_parmname = 'MWReplSubscriberDB'
Эти настройки влияют на работу хранимых процедур mwIsPublisher() и mwIsSubscriber() и на логику других хранимых процедур, использующих эти процедуры.
Выполнение скриптов на базе-публикаторе
На базе-публикаторе необходимо выполнить следующие скрипты строго в указанном порядке:
- 01. sp_CreateDirectory.sql
- 02. sp_GeneratePassword.sql
- 03. ReplicationPUB_92.sql (необходимо внести изменения в скрипт)
Изменения в скрипте ReplicationPUB_92.sql:
Изменения нужно внести в секции:
/******** НАСТРОЙКИ ********/
set @generateREPLUSERPassword = 0
/******** УКАЗАТЬ ДАННЫЕ ДЛЯ ПОИСКОВОГО СЕРВЕРА ********/
/** СЕРВЕР **/
set @subscriptionServer = 'server'
/** БД **/
set @subscriptionDB = 'testrepl2'
/** ЛОГИН **/
set @subscriptionLogin = 'sa'
/** ПАРОЛЬ **/
set @subscriptionPassword = 'sa'
/******** END ********/
Значением параметра @subscriptionServer нужно указать адрес сервера, на котором находится база-подписчик.
Значением параметра @subscriptionDB нужно прописать название базы-подписчика.
Значением параметра @subscriptionLogin нужно указать логин пользователя на сервере подписчике с административными правами (должен иметь серверную роль sysadmin).
Значением параметра @subscriptionPassword нужно указать пароль пользователя на сервере подписчике с административными правами (должен иметь серверную роль sysadmin).
Значение параметра @generateREPLUSERPassword может быть двух видов:
- 0 – в результате прогона скрипта на серверах публикатора и подписчика будет создан пользователь REPLUSER с паролем по умолчанию REPLUSERREPLUSER.
- 1 – в результате прогона скрипта на серверах публикатора и подписчика будет создан пользователь REPLUSER со сгенерированным паролем случайным образом. Данные о созданном логине/пароле будут выведены в результирующем наборе после выполнения скрипта. Если пользователь существовал, то пароль меняться не будет.
Пароли, которые будут выведены в результирующем наборе после выполнения скрипта необходимо сохранить (особенно если использовался параметр @generateREPLUSERPassword в значении 1). Также данные пароли необходимо будет указать в скрипте 01. ReplicationSUB.sql, который будет выполняться на базе-подписчике.
Выполнение скриптов на базе-подписчике
На базе-подписчике необходимо выполнить следующие скрипты строго в указанном порядке:
- 01. ReplicationSUB.sql (необходимо внести изменения в скрипт)
- 02. CheckReplicationTablesIdentity.sql (необходимо внести изменения в скрипт и вручную снять идентификаторы)
- 03. fn_mwGetServiceClassesNames.sql
- 04. Synchronize tables in replication.sql (производит синхронизацию таблиц статей репликации)
- Jobs_Standart.sql
Изменения в скрипте 01. ReplicationSUB.sql
Изменения нужно внести в секции:
/******** УКАЗАТЬ ДАННЫЕ ДЛЯ ОСНОВНОГО СЕРВЕРА ********/
Значением параметра @publisherServer нужно указать адрес сервера, на котором находится база-подписчик.
/** СЕРВЕР **/
set @publisherServer = 'server'
/** БД **/
set @publisherDB = 'testrepl'
/** ЛОГИН **/
set @pubLogin = 'sa'
/** ПАРОЛЬ **/
set @pubPassword = 'sa'
/******** END ********/
/******** УКАЗАТЬ ДАННЫЕ ДЛЯ ПОИСКОВОГО СЕРВЕРА ********/
/** ЛОГИН **/
set @subLogin = 'sa'
/** ПАРОЛЬ **/
set @password = 'sa'
/******** END ********/
Значением параметра @publisherDB нужно прописать название базы-публикатора.
Значением параметра @pubLogin нужно указать логин пользователя в базе-публикаторе, под которым будет работать репликация.
Значением параметра @pubPassword нужно указать пароль пользователя в базе-публикаторе, под которым будет работать репликация.
Значением параметра @subLogin нужно указать логин пользователя в базе-подписчике, под которым будет работать репликация.
Значением параметра @password нужно указать пароль пользователя в базе-подписчике, под которым будет работать репликация.
Изменения в скрипте + ручное снятие признака identity: скрипт 02. CheckReplicationTablesIdentity.sql
Изменения нужно внести в секции:
/******** УКАЗАТЬ БАЗУ ДАННЫХ ПУБЛИКАТОРА ********/
declare @publisher_db as nvarchar (100)
set @publisher_db = 'testrepl'
/******** УКАЗАТЬ ИМЯ ПУБЛИКАЦИИ ********/
declare @publicationName as nvarchar (100)
set @publicationName = 'MW_PUB'
Значением параметра @publisher_db нужно прописать название базы-публикатора.
Значением параметра @publicationName нужно прописать имя публикации.
В результате выполнения скрипта будет выведен список таблиц, у которых необходимо снять признак identity specification у первичного ключа.
Ручное снятие признака identity:
Примерный результат после выполнения скрипта отображен ниже:
Seed | Increment | Table_Name |
1 | 1 | HotelOption |
1 | 1 | HotelTypeRelations |
1 | 1 | HotelTypes |
1 | 1 | mwReplTours |
1 | 1 | ObjectGroupLinks |
1 | 1 | ObjectGroupMembers |
1 | 1 | ObjectGroups |
1 | 1 | PrtBonusDetails |
1 | 1 | PrtBonuses |
1 | 1 | stopavia |
1 | 1 | tbl_Costs |
1 | 1 | TurDate |
Необходимо во всех указанных таблицах сбросить значение Is Identity с yes на no. Для этого нужно в каждой таблице выбрать колонку с первичным ключом. В свойствах колонки Identity Specification -> (Is Identity) – значение yes сбросить на no:
Далее сохранить.
Для того, чтобы была возможность корректно сохранять изменения, необходимо проверить, чтобы в приложении Microsoft SQL Server Management Studio, экране Tools -> Options, разделе Designers признак Prevent saving changes that require table re-creation – не был выбран:
В случае, если в таблице большое количество записей, то при попытке сохранения возникает соответствующее окно с предупреждением, что данная операция займет много времени. В этом случае нужно отказаться от продолжения и сгенерировать скрипт (выбрав в контекстном меню экрана редактирования таблицы пункт Generate Change Script
):
Далее сгенерированный скрипт выполнить на базе данных (изменения будут внесены не с помощью кнопки «Сохранить», а с помощью скрипта).
Установка заданий (Jobs)
Для корректной работы репликации рекомендуется установить следующие задания.
Включение репликации
После установки репликации необходимо включить задание mwReplQueueManager (mwReplQueueManagerDivide_X). Для этого на стороне сервера подписчика в контекстном меню задания SQL Server Agent -> Job -> mwReplQueueManager необходимо выбрать значение Enable.
Остановка/повторное включение
Для остановки работы репликации необходимо:
- на сервере подписчика в контекстном меню Replication -> Local Subscriptions -> <название базы-подписчика> выбрать View Synchronization Status и в открывшемся окне нажать кнопку Stop
- на сервере публикатора в контекстном меню Replication -> Local Publications -> <название базы-публикатора> выбрать View Log Reader Agent Status и в открывшемся окне нажать кнопку Stop
Для повторного запуска репликации необходимо:
- на сервере подписчика в контекстном меню Replication -> Local Subscriptions -> <название базы-подписчика> выбрать View Synchronization Status и в открывшемся окне нажать кнопку Start
- на сервере публикатора в контекстном меню Replication -> Local Publications -> <название базы-публикатора> выбрать View Log Reader Agent Status и в открывшемся окне нажать кнопку Start
Пересоздание подписки
Для пересоздания подписки необходимо подключаться через SQL Server аутентификацию под пользователем, обладающим правами администратора.
В некоторых случаях, например, при обновлении ПК Мастер-Тур/Мастер-Web на релиз/service pack, понадобится пересоздание подписки (в случае, если это указано в примечании к обновлению). Для этого необходимо сначала удалить старую подписку.
Далее в контекстном меню Local Subscriptions выбрать пункт New Subscriptions....
В подразделе Publication выбрать необходимую публикацию.
В подразделе Distribution Agent Location выбрать пункт Run each agent at its Subscriber (pull subscriptions).
В подразделе Subscribers выбрать базу-подписчик.
В подразделе Distribution Agent Security выбрать данные, как указано на скриншоте ниже, плюс указать логин и пароль пользователя.
В подразделе Synchronization Schedule выбрать Run continuously.
В подразделе Initialize Subscriptions обязательно снять признак Initialize.
В подразделе Wizard Actions ничего не изменять, нажать кнопку Next.
В подразделе Complete the Wizard нажать кнопку Finish.
После успешного создания подписки в подразделе Creating Subscription(s)... в колонке Status будет проставлен статус Success.
Мониторинг репликации
Проверка работы инфраструктуры в целом
Для того, чтобы проверить корректность работы репликации необходимо на сервере публикатора в контекстном меню Replication -> Local Publications -> <название базы-публикатора> выбрать значение Replication Monitor, в открывшемся окне выбрать вкладку Tracer Tokens и нажать кнопку Insert Tracer.
Через некоторое время в колонках Publisher to Distributor, Distributor to Subscriber, Total Latency появятся значения. Наличие этих значений свидетельствует о корректности работы репликации после пересоздания подписки.
В случае, если в одной из колонок на протяжении достаточно долгого времени (индивидуально, зависит от скорости сети, загруженности серверов) так и осталось значение pending..., это свидетельствует о наличии проблем в доставке изменений. Так, значение pending... в колонке Distributor to Subscriber свидетельствует об ошибке при применении изменения на базе данных подписчика (см. следующий пункт).
Получение текста команды, вызвавшей ошибку
Для просмотра текста ошибкок, возникших в процессе доставки изменений с публикатора на подписчик, на основном сервере на системной базе данных distribution необходимо выполнить запрос:
select cast (cmd.Command as nvarchar(max)), * from dbo.MSrepl_errors err
left join dbo.MSrepl_commands cmd
on err.xact_seqno = cmd.xact_seqno
order by time desc
Если известны параметры @xact_seqno_start, @xact_seqno_end, полученные из монитора репликации и идентифицирующие конкретную ошибку, то запрос может выглядеть следующим образом:
exec sp_browsereplcmds @xact_seqno_start = '0x000019a0000032e50008'
,@xact_seqno_end = '0x000019a0000032e50008'
где:
'0x000019a0000032e50008', '0x000019a0000032e50008' – значения параметров @xact_seqno_start, @xact_seqno_end, которые можно получить из монитора репликации при возникновении ошибки.
Настройки подключения в ПК «Мастер-Тур», ПК «Мастер-Web» и web-сервисах
ПК «Мастер-Тур»
ПК «Мастер-Тур» после установки репликации должен быть настроен на базу-публикатор.
ПК «Мастер-Web»
После установки репликации в ПК «Мастер-Web» добавляется дополнительная строка подключения:
Строка подключения к базе данных ПК «Мастер-Тур» :
1. <add key = "connectionString" value = "Data Source=ip-адрес сервера основной базы данных ПК «Мастер-тур»</span">;Initial Catalog=название основной базы данных ПК «Мастер-тур»</span">;User ID=логин пользователя ПК «Мастер-тур», под которым работает репликация</span">;Password=пароль пользователя ПК «Мастер-тур», под которым работает репликация</span">"/>
2. <add key = "searchConnectionString" value = "Data Source=ip-адрес сервера поисковой базы данных ПК «Мастер-тур»</span">;Initial Catalog=название поисковой базы данных ПК «Мастер-тур»</span">;User ID=/логин пользователя ПК «Мастер-тур», под которым работает репликация</span">;Password=пароль пользователя ПК «Мастер-тур», под которым работает репликация</span">"/>
3. <add key = "connectionStringShort" value = "Data Source=ip-адрес сервера основной базы данных ПК «Мастер-Тур»</span">;Initial Catalog=название основной базы данных ПК «Мастер-Тур»</span">"/>
Web-сервиса
Если используются web-сервиса, то после установки репликации в конфигурационном файле web-сервисов указывается следующее подключение:
Строка подключения к базе данных ПК «Мастер-Тур» :
1. <add key = "connectionString" value = "Data Source=ip-адрес сервера основной базы данных ПК «Мастер-тур»</span">;Initial Catalog=название основной базы данных ПК «Мастер-тур»</span">;User ID=логин пользователя ПК «Мастер-тур», под которым работает репликация</span">;Password=пароль пользователя ПК «Мастер-тур», под которым работает репликация</span">"/>
2. <add key = "searchConnectionString" value = "Data Source=ip-адрес сервера поисковой базы данных ПК «Мастер-тур»</span">;Initial Catalog=название поисковой базы данных ПК «Мастер-тур»</span">;User ID=/логин пользователя ПК «Мастер-тур», под которым работает репликация</span">;Password=пароль пользователя ПК «Мастер-тур», под которым работает репликация</span">"/>
Статьи репликации ПК "Мастер-Web"
Объекты, из которых копируются данные, называются статьями репликации.
Очередь обработки туров
Очередь содержится в таблице mwReplQueue, детализация – mwReplQueueHistory.
Для отработки очереди используется job mwReplQueueManager, который вызывает хранимую процедуру mwReplProcessQueue. В зависимости от команды выполняется соответствующее действие.
Выставление тура
Процесс выставления тура при репликации представлен на рисунке.
Сегментация поисковых таблиц
Включением управляет настройка MWDivideByCountry в таблице SystemSettings. Происходит сегментирование ценовой таблицы mwPriceDataTable по ключам страны и города вылета. Исходная таблица mwPriceDataTable более не используется.
Имя новой таблицы:
mwPriceDataTable_ключСтраны_ключГородаВылета
Механизм единственной цены
Производит удаление ранее выставленных цен с одинаковыми параметрами:
- PT_CTKEYTO
- PT_hdkey
- PT_hrkey
- PT_PnKey
- PT_Days
- PT_Nights
- PT_ctkeyfrom
- TI_TOKey
- PT_TourDate
Снятие тура
Процесс снятия тура при репликации представлен на рисунке.
Удаление тура
Процесс удаления тура при репликации представлен на рисунке.
Удаление тура с помощью Priceremover
Процесс удаления тура при репликации с помощью Priceremover представлен на рисунке.