Назад в блог

Создание двух 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-базы ни на минуту. Задача выполнена!


Назад в блог