OpenEdge Replication: создание TARGET-базы средствами операционной системы (Часть 2)
В первой части статьи (см. «OpenEdge Replication: создание TARGET-базы средствами операционной системы» от 23.11.2011 г.) мы изучили способ создания одной 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 8000
-pica 8192
-bibufs 30
-aibufs 45
-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 1
-bibufs 50
-pica 8192
-DBService replagent
Для второй TARGET-базы: -S 4502
-B 10000
-L 20000
-spin 1
-bibufs 50
-pica 8192
-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-базы без её останова. Для этого можно воспользоваться технологией снапшотов (SnapShot), но для нашего эксперимента мы будем использовать обычную команду cp.
Остановим работу сервера репликации на 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 1
-bibufs 50
-pica 8192
-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-базы ни на минуту. Задача выполнена!
|