Встречная репликация между серверами S1 и S2

Схема встречной репликации между серверами S1 и S2
Рисунок П1.3. Схема встречной репликации между серверами S1 и S2

Начальные данные

Имеется два сервера с IP-адресами S1.serv.com и S2.serv.com. На каждом из них установлен ЛИНТЕР с поддержкой репликации. На каждом имеется таблица TAB с одинаковой структурой данных. Имена баз данных соответственно S1DB и S2DB.

Задача

Требуется настроить репликацию таблицы TAB с сервера S1 на сервер S2 и, одновременно, с сервера S2 на сервер S1.

Последовательность операций

Только для UNIX На сервере S1:
  1. Текстовым редактором открыть файл nodetab, находящийся в подкаталоге bin, установочного каталога СУБД ЛИНТЕР, и изменить строки на:

    S1DB local 54321
    REPLSERV local 1234

    Вместо чисел 54321 и 1234 могут быть другие несовпадающие числа.

На сервере S2:

  1. Текстовым редактором открыть файл nodetab, находящийся в подкаталоге bin, установочного каталога СУБД ЛИНТЕР, и изменить строки на:

    S2DB local 54321
    REPLSERV local 1234

    Вместо чисел 54321 и 1234 могут быть другие несовпадающие числа.

Для всех ОС На сервере S1:
  1. Текстовым редактором открыть файл nodetab, находящийся в подкаталоге bin установочного каталога СУБД ЛИНТЕР, и добавить строку:

    S2 ATCPIP S2.serv.com 1080

На сервере S2:

  1. Текстовым редактором открыть файл nodetab, находящийся в подкаталоге bin установочного каталога СУБД ЛИНТЕР, и добавить строку:

    S1 ATCPIP S1.serv.com 1080

Только для Windows На сервере S1:
  1. Запустить утилиту «Сетевой администратор СУБД ЛИНТЕР» (linadm).

  2. Выбрать базу данных S1DB и выполнить пункт меню База данных = > Стартовать. Запустить БД, установив опцию «Локальная по умолчанию».

  3. Выбрать пункт меню Сеть = > Репликация = > Стартовать. В появившемся диалоговом окне набрать имя и пароль к базе данных S1DB и хранилищу. Если пароли не переопределялись, то имена и пароли будут стандартными: SYSTEM/MANAGER8. После нажатия OK автоматически стартует БД хранилища.

На сервере S2:

  1. Повторить операции 1–3 для БД S2DB.

Только для UNIX На сервере S1:
  1. Установить переменную окружения LINTER_MBX, для этого выполнить команду командного интерфейса:

    export LINTER_MBX=54321

    Или другое число, указанное в nodetab для БД S2DB.

  2. Запустить БД S1DB на сервере S1.

  3. Установить переменную окружения LINTER_MBX, для этого выполнить команду командного интерфейса:

    export LINTER_MBX=1234

    Или другое число, указанное в nodetab для БД хранилища.

  4. Установить переменную окружения SY00, для этого выполнить команду командного интерфейса:

    export SY00=~/linter/db/storage

    Здесь должен быть указан путь к БД хранилища. Обычно это каталог db/storage в каталоге, куда установлен ЛИНТЕР.

  5. Запустить БД хранилища.

  6. Запустить сетевой клиент командой dbc_tcp.

  7. Установить переменную окружения LINTER_MBX, для этого выполнить команду командного интерфейса:

    export LINTER_MBX=54321

    Или другое число, указанное на шаге 1.

  8. Запустить сервер репликации командой:

    lreplserver -u SYSTEM/MANAGER8 -us SYSTEM/MANAGER8 -s REPLSERV -p 1080 -l S1DB -daemon

На сервере S2:

  1. Повторить операции 1–8 для БД S2DB.

Для всех ОС На сервере S1:
  1. Запустить утилиту inl.

  2. Выполнить команду:

    create server S2;

  3. Создать правило репликации:

    create replication rule tabrule for tab to tab on node S2 async;

На сервере S2:

  1. Запустить утилиту inl.

  2. Выполнить команду:

    create server S1;

  3. Создать правило репликации:

    create replication rule tabrule for tab to tab on node S1 async;

На сервере S1:

  1. Запустить утилиту inl.

  2. Занести запись в таблицу TAB.

На сервере S2:

  1. Запустить утилиту inl.

  2. Убедиться, что запись, записанная в таблицу TAB на сервере S1, появилась в таблице TAB на сервере S2.

  3. Занести запись в таблицу TAB.

На сервере S1:

  1. Запустить утилиту inl.

  2. Убедиться, что запись, записанная в таблицу TAB на сервере S2, появилась в таблице TAB на сервере S1.

Инструкция по настройке с помощью консоли приведена в приложении 7.

Необходимо тщательно продумывать репликацию для таблиц, у которых есть триггеры, чтобы избежать конфликтов. Например, пусть есть две таблицы A и B – одинаковой структуры на источнике и на приемнике и с одинаковыми триггерами.

На источнике клиент вызывает добавление записи в таблицу A. Операция добавления проходит успешно и вызывает триггер, который выполняет добавление записи в таблицу B.

На приемнике процесс репликации вызывает добавление записей в таблицы A и B, и, кроме того, срабатывает триггер на таблицу А, который добавляет в таблицу B еще одну запись. Нужно учитывать возможность такого повторного добавления и избегать его нежелательных последствий.