Страница 1 из 1

Репликация PostgreSQL slony-I ! HELP!

Добавлено: 2010-10-27 16:08:06
Мишаня
Добрый день, форумчане!
Есть необходимость настроить репликацию на двух серверах баз данных PostgreSQL.
Имеется: на обоих серверах стоит FreeBSD 7.2, PosgreSQL_8.2, slony-I.

Кто работал с репликацией подскажите как настроить.

Задача Один сервер сделать мастером, второй слэйвом для периодического просмотра базы мастера.

Вопрос: чем отличаются конфигурационные файлы для мастера и для слэйва для

Код: Выделить всё

[b]/usr/local/etc/slon.conf[/b]
syslog 1
log_level 1
log_timestamp 1
cluster_name master
conn_info 'dbname=database user=user host=10.0.0.1 port=5432'
sync_interval 100
sync_interval_timeout 1000
sync_group_maxsize 6
vac_frequency 3
desired_sync_time 60000
cat /usr/local/etc/slon_tools.conf

Код: Выделить всё



if ($ENV{"SLONYNODES"}) {
require $ENV{"SLONYNODES"};
} else {
$CLUSTER_NAME = 'master';
$LOGDIR = '/var/log/slony1';
$MASTERNODE = 1;
$DEBUGLEVEL = 4;

add_node(
         node           => 1,
         host           => '10.0.0.1',
         dbname         => 'database',
         port           => 5432,
         user           => 'user',
         password       => 'pass');

add_node(
         node           => 2,
         host           => '10.0.0.2',
         dbname         => 'database',
         port           => 5432,
         user           => 'user',
         password       => 'pass');
}
$SLONY_SETS = {
"database" => {
"pkeyedtables" => [
'table',
],

"sequences" => [
'table_count_seq'
]},
};
if ($ENV{"SLONYSET"}) {
    require $ENV{"SLONYSET"};
    }
1;
Для слэйв сервера конфигурации аналогичные, за исключением файла /usr/local/etc/slon.conf.

Подскажите как правильно настроить?

Re: Репликация PostgreSQL slony-I ! HELP!

Добавлено: 2010-10-28 8:59:50
Мишаня
Или подскажите другие средства репликации.

Re: Репликация PostgreSQL slony-I ! HELP!

Добавлено: 2010-11-01 9:54:29
eXtern
обновится до девятого postgresql - там вроде как появилась репликация "из коробки".

Re: Репликация PostgreSQL slony-I ! HELP!

Добавлено: 2010-11-01 9:58:19
Мишаня
eXtern писал(а):обновится до девятого postgresql - там вроде как появилась репликация "из коробки".
А есть реальные гарантии, ну я имею ввиду кто делал и точно может сказать что вот так работает?

Re: Репликация PostgreSQL slony-I ! HELP!

Добавлено: 2010-11-01 10:04:48
eXtern
Лично не пробовал, но где-то видел статью - чувак расписывал как он делал - погугли.
Тем более все равно будешь сначала на тестовых машинах делать. или...? :shock:

Re: Репликация PostgreSQL slony-I ! HELP!

Добавлено: 2010-11-01 10:15:32
Мишаня
eXtern писал(а):Лично не пробовал, но где-то видел статью - чувак расписывал как он делал - погугли.
Тем более все равно будешь сначала на тестовых машинах делать. или...? :shock:
Конечно на тестовых, я вот с тестовыми уже дрючусь энное количество времени. Ладно, спасибо за наводку, почитаю, если что отпишусь.

Re: Репликация PostgreSQL slony-I ! HELP!

Добавлено: 2010-11-01 10:32:40
eXtern
Незачто. Если что - пиши в эту ветку - может чем почущественней помогу.

Re: Репликация PostgreSQL slony-I ! HELP!

Добавлено: 2010-11-01 10:38:44
Мишаня
eXtern писал(а):Незачто. Если что - пиши в эту ветку - может чем почущественней помогу.
Ок, сейчас ставлю 9ю ветку, потому как только что прочитал что у 8й со Слони есть проблемы непонятные, вот и проверю заодно. Думаю часа мне хватит, и отпишусь.

Re: Репликация PostgreSQL slony-I ! HELP!

Добавлено: 2010-11-02 14:14:35
Мишаня
Так, Postgres 9й поставил на обоих тазиках, делаю как написано на http://wiki.postgresql.org/wiki/Streaming_Replication, но у меня не хочет стартовать постмастер на слэйве. В логах:

Код: Выделить всё

cp: /usr/local/pgsql/data/base/archive/000000010000000000000003: No such file or directory
cp: /usr/local/pgsql/data/base/archive/000000010000000000000003: No such file or directory
LOG:  could not bind IPv4 socket: Can't assign requested address
HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
WARNING:  could not create listen socket for "10.11.11.234"
FATAL:  could not create any TCP/IP sockets


Re: Репликация PostgreSQL slony-I ! HELP!

Добавлено: 2010-11-02 16:16:39
Мишаня
Мишаня писал(а):Так, Postgres 9й поставил на обоих тазиках, делаю как написано на http://wiki.postgresql.org/wiki/Streaming_Replication, но у меня не хочет стартовать постмастер на слэйве. В логах:

Код: Выделить всё

cp: /usr/local/pgsql/data/base/archive/000000010000000000000003: No such file or directory
cp: /usr/local/pgsql/data/base/archive/000000010000000000000003: No such file or directory
LOG:  could not bind IPv4 socket: Can't assign requested address
HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
WARNING:  could not create listen socket for "10.11.11.234"
FATAL:  could not create any TCP/IP sockets

Это я не досмотрел - был в конфиге не тот адрес указан для прослушивания.

Re: Репликация PostgreSQL slony-I ! HELP!

Добавлено: 2010-11-05 22:12:56
Мишаня
Добился я наконецто репликации. Спасибо всем, кто подсказал и принимал участие в обсуждении. Выкладываю всю последовательность проведенных мною работ для достижения необходимого результата.

Изображение
1) Устанавливаем PostgreQSL90-server на обеих серверах:

Код: Выделить всё

cd /usr/ports/databases/postgresql90-server/
make install clean
cd /usr/local/pgsql/
mkdir data
chown pgsql data
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
2) Для дальнейшей работы rsync и синхронизации, для пользователя pgsql нужно сосздать пару ключей на мастере для SSH:

Код: Выделить всё

su - pgsql
ssh-keygen -t rsa -P ""
cat /usr/local/pgsql/.ssh/id_rsa.pub >> /usr/local/pgsql/.ssh/authorized_keys
Импортировать ключ нужно на слейве в файл /usr/local/pgsql/.ssh/authorized_keys. Обязательное требование - права на файл должны быть 600 и владелец pgsql, без этого работать не будет.

Создаем на обоих тазиках каталог ../data/archive и даем ему права pgsql.

3) После этого приступаем к конфигурации postgresql.conf
Master:

Код: Выделить всё

listen_addresses = '10.0.0.1'
wal_level = hot_standby
max_wal_senders = 5 
wal_keep_segments = 32 
archive_mode = on 
archive_command = 'cp %p /usr/local/pgsql/data/base/archive/%f' 
Slave:
На слейве оставляем так же, за исключением полей (archive_mode, archive_command - с включенными этими опциями у меня не запускался postgres на слэйве), и добавляем следующие:

Код: Выделить всё

listen_addresses = '10.0.0.2'
hot_standby = on 
4) Создаем файл recovery.conf

Код: Выделить всё

standby_mode = 'on'                                                                                                                                                                                                                                                                                                                                       
primary_conninfo = 'host=10.0.0.1 port=5432'
trigger_file = '/usr/local/pgsql/data/trigger' 
restore_command = 'scp 10.0.0.1:/usr/local/pgsql/data/base/archive/%f "%p"'    
5) Стартуем postgres на мастере:

Код: Выделить всё

/usr/local/etc/rc.d/postgresql start
6) Затем выполняем на мастере:

Код: Выделить всё

su - pgsql
$ psql -ddatabase -c "SELECT pg_start_backup('label', true)"
# rsync -C -a --delete -e ssh --exclude postgresql.conf --exclude postmaster.pid --exclude postmaster.opts --exclude pg_log --exclude pg_xlog --exclude recovery.conf /usr/local/pgsql/data/ 10.0.0.2:/usr/local/pgsql/data/
$ psql -ddatabase -c "SELECT pg_stop_backup()"
7) Теперь стартуем на Слейве postgres. Запустилось и все работает :smile:

До этого было много траблов, если что-дибо не получается читаем в /cat /usr/local/pgsql/data/postmaster.log

Оригиральный файл "recovery.conf" можна найти в /usr/local/share/postgresql/recovery.conf.sample

Еще раз всем спасибо за помощь :smile:

Re: Репликация PostgreSQL slony-I ! HELP!

Добавлено: 2011-01-03 21:03:06
Ситх
А команды в recovery.conf и postgresql.conf что означают? Т.е. директория "archive", её нужно создать?Зачем? Что хранится в этой директории, бэкап как я понял происходит в файл backup_label после команд SELECT pg_start_backup.

Код: Выделить всё

archive_mode = on
archive_command = 'cp %p /usr/local/pgsql/data/base/archive/%f'
restore_command = 'scp 10.0.0.1:/usr/local/pgsql/data/base/archive/%f "%p"'