Создание двух TARGET баз средствами ОС
В первой части статьи (см. «OpenEdge Replication: создание TARGET-базы средствами операционной системы») мы изучили способ создания одной TARGET-базы средствами ОС. Но как быть, если нам сразу нужно создать две TARGET-базы? Или как создать вторую TARGET-базу позже, например, когда через несколько месяцев после успешного включения репликации мы получили второй резервный сервер? Нет ничего проще…
P.S. Стоит отметить, в этой статье все примеры приведены исключительно с образовательной целью. Способов создания TARGET-баз может быть несколько, в том числе и с помощью утилиты PROBKUP. И какой бы способ вы не выбрали, любой из них может накладывать или не накладывать определенные ограничения, которые могут влиять на работу вашей системы. Именно поэтому я всем всегда рекомендую, прежде чем что-то делать в промышленной среде тщательно изучите выбранный метод и отладьте свои действия в тестовом окружении. Такой подход позволит понять, какие проблемы могут возникнуть, и оптимален ли выбранный метод именно для вашей системы.
Одновременное создание двух TARGET-баз средствами ОС
Для чистоты «эксперимента» сделаем всё с самого начала, но без детального описания. Предполагается, что механизм After-Imaging в базе sports уже включен, а OpenEdge Replication нет.
$ mkdir target/ <-- каталог для первой TARGET-базы $ mkdir target2/ <-- каталог для второй TARGET-базы $ cd source/ $ cp $DLC/properties/source.repl.properties ./sports.repl.properties $ vi ./sports.repl.properties
В настройках сервера репликации необходимо сразу описать двух агентов репликации, как показано:
[server] control-agents=agent1,agent2 database=sports transition=manual transition-timeout=1200 defer-agent-startup=1400 agent-shutdown-action=recovery [control-agent.agent1] name=agent1 database=sports host=localhost <-- Здесь необходимо указать IP или HOSTNAME 1-го резервного сервера port=4501 connect-timeout=120 replication-method=async critical=0 [control-agent.agent2] name=agent2 database=sports host=localhost <-- Здесь необходимо указать IP или HOSTNAME 2-го резервного сервера port=4502 connect-timeout=120 replication-method=async critical=0 [transition] database-role=normal
Описание второго агента отличается в нашем случае от первого только именем агента и портом, на котором работает этот агент (выделено жирным).
Далее активируем репликацию:
$ proutil sports -C enablesitereplication source
Изменяем файл параметров исходной базы:
$ vi sports.pf
Его содержимое:
-S 4500 -B 10000 -L 20000 -spin 10000 -pica 10000 -bibufs 30 -aibufs 30 -aistall -aiarcdir ./ai -aiarcdircreate -aiarcinterval 300 -bithold 75000 -bistall -DBService replserv
Стартуем SOURCE-базу:
$ proserve sports -pf sports.pf
Теперь приступим к созданию TARGET-баз.
На стартованной исходной базе останавливаем транзакционную активность:
$ proquiet sports enable -REPLTargetCreation
Копируем средствами ОС исходную базу в каталог для первой TARGET-базы:
$ cp ./sports* ../target/
Для того чтобы как можно быстрее вернуть исходную базу пользователям восстанавливаем транзакционную активность в ней:
$ proquiet sports disable
Переходим в каталог target:
$ cd ../target/
Изменяем файл настроек репликации target/sports.repl.properties. Удаляем в нём все настройки и вносим новые:
[agent] database=sports listener-minport=4387 listener-maxport=4500 [transition] database-role=normal
Удалим lock-файл, который остался от SOURCE-базы.
$ rm -f ./sports.lk
Внимание! Будьте осторожны! Никогда не удаляйте lk-файл промышленной базы, находящейся в стартованном состоянии.
Копируем средствами ОС первую TARGET-базу в каталог для второй TARGET-базы:
$ cp ./sports* ../target2/
Изменим пути к файлам базы в структурном файле sports.st на новое расположение этих файлов, заменив каталог source на каталог target в первой TARGET-базе, и на target2 для второй TARGET-базы. После чего корректируем пути непосредственно в базах:
$ prostrct repair sports sports.st (повторить на обеих TARGET-базах)
Изменяем роли обеих TARGET-баз с SOURCE на TARGET:
$ proutil sports -C enablesitereplication target (повторить на обеих TARGET-базах)
Отключаем на них After-Imaging:
$ rfutil sports -C aimage end
Изменяем файлы параметров sports.pf.
Для первой TARGET-базы:
-S 4501 -B 10000 -L 20000 -spin 10000 -bibufs 50 -pica 10000 -DBService replagent
Для второй TARGET-базы:
-S 4502 -B 10000 -L 20000 -spin 10000 -bibufs 50 -pica 10000 -DBService replagent
Обратите внимание, отличие этих файлов параметров только в номерах портов, на которых стартует брокер. Эти номера должны соответствовать номерам, которые были указаны в файле настроек сервера репликации.
Стартуем обе TARGET-базы:
$ proserve sports -pf sports.pf
Проверяем работу репликации через DSRUTIL MONITOR:
$ dsrutil source/sports -C monitor OpenEdge Replication Monitor Page 1 Database: /home/valeriy/replic/source/sports Database is enabled as OpenEdge Replication: Source Server is: In Normal Processing Number of configured agents: 2
$ dsrutil target/sports -C monitor OpenEdge Replication Monitor Page 1 Database: /home/valeriy/replic/target/sports Database is enabled as OpenEdge Replication: Target Agent: Name: agent1 ID: 1 Host name: 127.0.0.1 State: Normal Processing Ready: Yes
$ dsrutil target2/sports -C monitor OpenEdge Replication Monitor Page 1 Database: /home/valeriy/replic/target2/sports Database is enabled as OpenEdge Replication: Target Agent: Name: agent2 ID: 2 Host name: 127.0.0.1 State: Normal Processing Ready: Yes
Всё! Репликация работает на две TARGET-базы данных.
Добавление второй TARGET-базы средствами ОС
Предполагается, что в нашей тестовой базе sports уже включен механизм OpenEdge Replication так, как это было описано в первой части, т.е. у нас уже есть одна TARGET-база. Теперь нам надо добавить вторую TARGET-базу, скажем, для репликации на второй резервный сервер. Сделать нам это нужно с минимальным (или даже без) временем простоя SOURCE-базы без её останова.
Остановим работу сервера репликации на SOURCE-базе:
$ cd ../source $ dsrutil sports -C terminate server
В этом случае просто будет приостановлена работа OpenEdge Replication, сама SOURCE-база будет продолжать работать и останется доступной для пользователей.
Перейдем в каталог первой TARGET-базы и остановим её:
$ cd ../target $ proshut sports -by
Скопируем средствами ОС содержимое каталога target в каталог target2:
$ cp ./sports* ../target2/
Перейдем в каталог второй TARGET-базы:
$ cd ../target2
Изменим пути к файлам базы в структурном файле sports.st на новое расположение этих файлов, заменив каталог target на каталог target2 во второй TARGET-базе. После чего корректируем пути непосредственно в базе:
$ prostrct repair sports sports.st
Изменим файл параметров sports.pf для второй TARGET-базы, указав другой порт.
-S 4502 -B 10000 -L 20000 -spin 10000 -bibufs 50 -pica 10000 -DBService replagent
Возвращаемся в каталог SOURCE-базы:
$ cd ../source
В настройках сервера репликации описываем второго агента репликации, как показано:
[server] control-agents=agent1,agent2 database=sports transition=manual transition-timeout=1200 defer-agent-startup=1400 agent-shutdown-action=recovery [control-agent.agent1] database=sports host=localhost port=4501 connect-timeout=120 replication-method=async critical=0 [control-agent.agent2] name=agent2 database=sports host=localhost port=4502 connect-timeout=120 replication-method=async critical=0 [transition] database-role=normal
Перестартовываем сервер репликации и проверяем его работу:
$ dsrutil sports -C restart server $ dsrutil sports -C monitor OpenEdge Replication Monitor Page 1 Database: /disk2/replic/source/sports Database is enabled as OpenEdge Replication: Source Server is: Connecting to Agent(s) Number of configured agents: 2
Переходим в каталог первой TARGET-базы и стартуем её:
$ cd ../target $ proserve sports -pf sports.pf
Переходим в каталог второй TARGET-базы и стартуем её:
$ cd ../target2 $ proserve sports -pf sports.pf
Через некоторое время проверяем статус репликации с помощью утилиты DSRUTIL MONITOR.
Репликация вновь работает, но уже на две TARGET-базы, при этом нам не пришлось останавливать транзакционную активность SOURCE-базы ни на минуту. Задача выполнена!
Метка:OpenEdge Replication