2008-10-06

Черновик. Репликация средствами bucardo. №2

Итак, в прошлый раз история с репликацией ничем положительным не закончилась, так что начинаем по новому. Заглядывать в старые черновики не буду, начну писать новый.

Итак для начала на VMWare разворачиваю SLES10 SP2 (будет еще вариант со SLES9 SP3, SP4).
Делаю базовую настройку, как написано с соответствующей теме (Базовая настройка PostgreSQL 8.2.5 на linux).

Вытягиваю с http://bucardo.org последнюю версию bucardo. На тот момент это был Bucardo-3.0.9.tar.gz

Под postgres создаю язык:
CREATE LANGUAGE plpgsql;
Кроме того, в доке написано, что база, которую будет использовать bucardo должна имень установленный язык plperlu:

Bucardo requires that all databases involved in the replication be running version 8.1 or greater, and that they have the Pl/Pgsql language installed. The database that Bucardo itself uses must have the Pl/Perlu language installed.

Когда опрелелюсь, какая будет база, создам язык.
Кроме того есть требования для perl и его модулей:

Bucardo runs as a series of Perl daemons, and requires version 5.8.3 of Perl or better.The following modules are also required to run Bucardo:

  • DBI 1.51
  • DBD::Pg 1.49
  • *DBIx::Safe 1.2.4
  • Moose 0.18
  • IO::Handle 1.24
  • Sys::Hostname 1.11
  • Sys::Syslog
  • Mail::Sendmail 0.79
  • ExtUtils::MakeMaker 6.32

In order to run the test suite (highly recommended), the following modules are required:

  • Test::Simple 0.30
  • Test::More 0.61
  • Test::Harness 2.03
  • *Test::Dynamic 1.3.1

* These modules come bundled with Bucardo.

Итак модули со звездочкой нас не интересуют, так как по утверждению доки они в составе. Нужно найти остальные модули правильных версий. Искать будем на cpan.

DBI 1.51 нашел через google (в YaST есть только 1.50)

DBD::Pg 1.49 нашел через google

Moose 0.18 нашел через google

IO::Handle 1.24 оказался проблемным модулем. Судя по моим поискам в cpan он входит в состав модуля IO, но ни в одном IO в cpan нет IO::Handle необходимой версии. Поэтому я вытянул IO-1.2301 (там в составе IO::Handle 1.27)

Sys::Hostname 1.11 вообще не нашел. Судя по cpan он есть в составе perl-5.8.8, который установлен у меня.

Sys::Syslog не имеет никаких требований по версии. Нашел на cpan.

Mail::Sendmail 0.79 Нашел на cpan.

ExtUtils::MakeMaker 6.32 Нашел на cpan.

Test::Simple 0.30 тоже оказался проблемным. Такой древней версии на cpan нет. Вытянул Test-Simple-0.80, надеюсь подойдет.

Test::More 0.61 проблемный. находится в составе Test::Simple. То есть будем использовать тот вариант, что был выкачан в предыдущем пакете.

Test::Harness 2.03 проблемный. Такой старючей версии на cpan нет. Вытянул последнюю стабильную версию из 2-й ветки Test-Harness-2.62

Осталось только проставить эти модули.
Сначала ставим вот эти:

DBI-1.51
ExtUtils-MakeMaker-6.32
IO-1.2301
Sys-Syslog-0.27
Test-Harness-2.62
Test-Simple-0.80
Mail-Sendmail-0.79

Они для своей установки больше ничего не требуют. Ставим следующим образом. Логинимся под непривилегированным пользователем:

root# su - alexsf

Распаковываем их, поочереди заходим в папку каждого и под непривелигированным пользователем выполняем:

alexsf> perl Makefile.PL
alexsf> make
alexsf> make test

Смотрим внимательно на сообщения. Главное, чтоб не требовало дополнительным модулей и тесты прошли удачно. Потом под root в каждой папке выполняем:

root# make install

Смотрим на сообщения. Если ошибок нет, то все проставилось нормально.

Ставим модуль Moose-0.18:

alexsf> make Makefile.PL
Warning: prerequisite Class::MOP 0.37 not found.
Warning: prerequisite Sub::Exporter 0.972 not found.
Warning: prerequisite Sub::Name 0.02 not found.
Warning: prerequisite Test::Exception 0.21 not found.
Warning: prerequisite Test::LongString 0 not found.
Writing Makefile for Moose

То есть нужно теперь достать модули из этого списка.
Class::MOP 0.37 на cpan.
Sub::Exporter 0.972 не нашел. Есть Sub-Exporter-0.980, его и качаю.
Sub::Name 0.02 на cpan.
Test::Exception 0.21 нету. Есть Test-Exception-0.27, его и качаю.
Test::LongString версия не ясна. Вытянул то, что нашел - Test-LongString-0.11.

Ставим в таком порядке:
Sub-Name-0.02
Test-LongString-0.11

Test-Exception-0.27 требует модуль Sub::Uplevel 0.18 (на cpan есть). Ставим его, потом ставим Test-Exception-0.27.

Ставим Class::MOP 0.37.
Ставим Sub-Exporter-0.980. Ему нехватает:

Warning: prerequisite Data::OptList 0.1 not found.
Warning: prerequisite Params::Util 0.14 not found.
Warning: prerequisite Sub::Install 0.92 not found.

Ищем...
Data::OptList 0.1 не нашел, нашел Data-OptList-0.103 на cpan. Его и тянем.
Params::Util 0.14 не нашел, нашел Params-Util-0.33 на cpan. Его и тянем.
Sub::Install 0.92 не нашел, нашел Sub-Install-0.924 на cpan. Его и тянем.

Ставим в таком порядке:

Sub-Install-0.924
Params-Util-0.33
Data-OptList-0.103

Ну и наконец ставим Sub-Exporter-0.980. Уф, уже запарился с этими модулями... Так, для чего мы все это делали??? А, да, ставим Moose-0.18.

Теперь ставим DBD-Pg-1.49. Получилось.

Таперь беремся за сам Bucardo. Распаковываем куда-нибудь архивчик Bucardo-3.0.9.tar.gz под непривилегированным пользователем. Поочереди захидим в папки

DBIx-Safe-1.2.4
Test-Dynamic-1.3.2
Bucardo-3.0.9

и проставляем перловские модули, будь они неладны... Они там ругаться будут на ошибки - игнорируем и ставим все равно.

Теперь создаем базу данных для bucardo.

root# mkdir /u02
root# chown postgres:postgres /u02
root# su - postgres
postgres> mkdir /u02/pgdata/bucardo -p
postgres> psql
postgres=# CREATE USER bucardo SUPERUSER;
postgres=# ALTER ROLE bucardo password 'bucardo';
postgres=# CREATE TABLESPACE bucardo OWNER bucardo LOCATION '/u02/pgdata/bucardo';
postgres=# CREATE DATABASE bucardo WITH ENCODING='UTF8' OWNER=bucardo TABLESPACE=bucardo;
postgres=# CREATE LANGUAGE plperlu;

...и получаем

ERROR: нет доступа к файлу "$libdir/plperl": Нет такого файла или каталога

Ну а кто говорил, что будет просто... Роем...
Подозреваю, что нужен пакет postgresql-pl версии 8.2.5.
Итак, на http://software.opensuse.org/search нашел и скачал 2 пакета:

postgresql-pl-8.2.4-2.nosrc.rpm
postgresql-plperl-8.2.4-2.i586.rpm

Оба для OpenSUSE 10.3, но на SLES10 SP2 встали нормально, с установленным postgresql 8.2.5. Что я буду делать с SLES9 пока не знаю... Итак, нам же нужно язык проставить...


root# su - postgres
postgres> psql
postgres=# CREATE LANGUAGE plperlu;

Готово... Ур-р-р-р-а-а-а-а!!!! предвариловка закончена, начинаем трахаться по серьезному...
Создаем схемы для bucardo. Для этого переходим в каталог Bucardo-3.0.9, откуда ставили соответствующий модуль perl, и выполняем:

root# su postgres
postgres> psql -f bucardo.schema -h 10.77.1.9 -U bucardo bucardo

, где 10.77.1.9 - ip адрес сервера postgres. В результате получаем:

CREATE SCHEMA
CREATE SCHEMA
SET
SET
SET
CREATE TABLE
CREATE INDEX
CREATE INDEX
ALTER TABLE
psql:bucardo.schema:57: ERROR: язык "plpgsql" не существует
ПОДСКАЗКА: Use CREATE LANGUAGE to load the language into the database.

Так, вроде языки сделал уже все...
Не, нифига, языки оказались в базе postgres, а надо, чтоб были в базе bucardo. Поэтому:

postgres> psql -h 10.77.1.9 -U bucardo bucardo
bucardo=# CREATE LANGUAGE plpgsql;
bucardo=# CREATE LANGUAGE plperlu;
bucardo=# DROP SCHEMA bucardo CASCADE;
bucardo=# DROP SCHEMA freezer CASCADE;
bucardo=# \q
postgres> psql -f bucardo.schema -h 10.77.1.9 -U bucardo bucardo

и, о чудо, скрипт отработал без ошибок!!!

Делаем тест, как написано в документации:

alexsf> time make test TEST_VERBOSE=1
/usr/bin/perl t/bucardo.test.helper
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(1, 'blib/lib', 'blib/arch')" t/*.t
t/01bc....Can't use string ("Test::Dynamic") as a HASH ref while "strict refs" in use at /usr/lib/perl5/site_perl/5.8.8/Test/Dynamic.pm line 30.
FAILED before any test output arrived
FAILED--1 test script could be run, alas--no output ever seen
make: *** [test_dynamic] Ошибка 255

real 0m0.250s
user 0m0.132s
sys 0m0.104s

Пробуем так:

alexsf> time make test TEST_VERBOSE=1 BUCARDO_TEST_NUKE_OKAY=1 BUCARDO_TESTBAIL=0 BUCARDO_KEEP_OLD_DEBUG=0

То же самое... Затык пока. Не знаю, забить на результаты теста и двигаться дальше, или разобраться???

Комментариев нет: