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

Проблемы с установкой, настройкой и работой системных и сетевых программ.

Модераторы: GRooVE, alexco

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Мишаня
мл. сержант
Сообщения: 119
Зарегистрирован: 2009-02-11 19:10:48

Репликация 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.

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

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Мишаня
мл. сержант
Сообщения: 119
Зарегистрирован: 2009-02-11 19:10:48

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

Непрочитанное сообщение Мишаня » 2010-10-28 8:59:50

Или подскажите другие средства репликации.
Последний раз редактировалось terminus 2010-10-28 9:18:28, всего редактировалось 1 раз.
Причина: Размещайте пожалуйста вопросы в разделы соответсвующие их теме. Перенесено из FreeBSD в Софт.

eXtern
проходил мимо

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

Непрочитанное сообщение eXtern » 2010-11-01 9:54:29

обновится до девятого postgresql - там вроде как появилась репликация "из коробки".

Мишаня
мл. сержант
Сообщения: 119
Зарегистрирован: 2009-02-11 19:10:48

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

Непрочитанное сообщение Мишаня » 2010-11-01 9:58:19

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

eXtern
проходил мимо

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

Непрочитанное сообщение eXtern » 2010-11-01 10:04:48

Лично не пробовал, но где-то видел статью - чувак расписывал как он делал - погугли.
Тем более все равно будешь сначала на тестовых машинах делать. или...? :shock:

Мишаня
мл. сержант
Сообщения: 119
Зарегистрирован: 2009-02-11 19:10:48

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

Непрочитанное сообщение Мишаня » 2010-11-01 10:15:32

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

eXtern
проходил мимо

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

Непрочитанное сообщение eXtern » 2010-11-01 10:32:40

Незачто. Если что - пиши в эту ветку - может чем почущественней помогу.

Мишаня
мл. сержант
Сообщения: 119
Зарегистрирован: 2009-02-11 19:10:48

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

Непрочитанное сообщение Мишаня » 2010-11-01 10:38:44

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

Мишаня
мл. сержант
Сообщения: 119
Зарегистрирован: 2009-02-11 19:10:48

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


Мишаня
мл. сержант
Сообщения: 119
Зарегистрирован: 2009-02-11 19:10:48

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

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

Мишаня
мл. сержант
Сообщения: 119
Зарегистрирован: 2009-02-11 19:10:48

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"'
Последний раз редактировалось Alex Keda 2011-01-10 0:27:10, всего редактировалось 1 раз.
Причина: Товарищщи, цените чужое время, юзайте кнопочку [code]...