- PVSM.RU - https://www.pvsm.ru -
Ниже будет описан опыт настройки отказоустойчивой системы Master-Slave с использованием собственных ресурсов PostgresSQL — Asynchronous Replication + pgBouncer + PGHA — в формате вольного перевода с комментариями одного поста [1] и руководства по установке [2].
pgHA [3] — программа написанная на Perl, код которой представлен в файле failoverd.pl, который и является основой инструмента. Использует в своей работе pgbouncer и собственную репликацию PostgresSQL; мониторит ведущую бд и в случае ее недоступности открывает вспомогательную бд на запись, останавливая репликацию. По крайней мере с версии 9.3 устанавливается вместе с PostgresSQL, скачать можно здесь [4]. Процесс установки описан в файле README [2], который лежит в ./9.3/pgha/doc/.
На habrahabr, судя по всему, самым популярным инструментом для организации отказоустойчивости является pgpool. К сожалению существующий единичный опыт не позволяет сравнить эти два инструмента.
Данная система требует наличия трех машин: ведущего сервера (master), вспомогательного (slave) и узла масштабирования. Можно обойтись без последнего.
Про настройку нативной репликации уже написано в очень многих статьях, под этим предлогом я просто сошлюсь на некоторые:
pgBouncer [8] — легкий пулер, менеджер соединений для PostgreSQL. Здесь используется как входная точка доступа, которая перенаправляет запросы к главной бд или вспомогательной в зависимости от файла настроек. Устанавливается вместе с PostgresSQL 9.3.
pgbouncer -d /путь/pgbouncer.ini
yum install perl-CPAN
perl -MCPAN -e 'install Module::Build::Compat'
perl -MCPAN -e 'install Config::IniFiles'
perl -MCPAN -e 'install DBI'
perl -MCPAN -e 'install DBD::Pg'
perl -MCPAN -e 'install Log::Log4perl'
perl -MCPAN -e 'install Proc::Daemon'
perl -MCPAN -e 'install Net::Ping'
perl -MCPAN -e 'install Nagios::Plugin'
При этом может возникать безвредная ошибка: yaml' not installed will not store persistent state. Если раздражает, можно сделать:
cpan
install Bundle::CPAN
reload cpan
exit
# Which databases should be part of failover
fence_lock_dbs=postgres
# pgBouncer command to pause / fence the db's
fence_lock_command=kill
# pgBouncer command to reload the config file
fence_move_command=reload
# pgBouncer command to unlock the db's
fence_unlock_command=resume
dbcheck="select 1"
— в разделе [app01] в поле pgbouncer_db_user должен стоять один из admin_users указанных в pgbouncer.ini
— следует ознакомиться и с остальными параметрами
ssh-keygen -t rsa
(создать пустой пароль)mkdir ~/.ssh
chmod 0700 .ssh
vi authorized_keys
(вставить ранее скопированное содержимое id_rsa.pub, закрыть с сохранением) chmod 0600 .ssh/authorized_keys
./failoverd.pl -c /путь/файлНастроекPgHA.conf --auto
./failoverd.pl -c /путь/файлНастроекPgHA.conf --stop
# Start the failoverd monitoring process
elsif ( $startWorker )
{
print "ntInitializing... n";
. . .
# Once we have verified that the system is online, we need
# to set the failover 'spring'.
$logger->info("==Startup==: Arming Failover mechanism");
print "t === Arming Failover mechanism === n";
if ( SetSpring(%Config,$logger) != 1 )
# if ( 0 )
{
$logger->info("Cannot set failover configuration, exiting...");
print "Cannot set failover configuration, exiting...n";
exit(1);
}
. . .
Теперь при отказе ведущей базы pgHA остановит репликацию, откроет вспомогательную базу на запись, перезапустит pgbouncer с настройками для роботы с новой главной бд и завершит свою работу. Возвращать систему в исходное состояние требуется в ручную.
В разделе [failover] указываются команды, которые исполняются во время failover. Таким образом можно, например, не менять код в failoverd.pl, а создать скрипт — который меняет файл настроек pgbouncer и перезагружает его — и указать на него.
Данное решение не уменьшает скорость работы программ, использующих базу данных, и при хорошей настройке pgbouncer может ее увеличить. Плюсом также считаю открытость кода pgHA — его можно дополнять, чтобы научить, например, попыткам перезагрузить ведущую базу перед failover, возобновлять репликацию, менять шрифт в терминале и т.д.
Решение для postgres 8.4 представлено в вышеупомянутом блоге [1].
Автор: chochu
Источник [13]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/postgresql/60551
Ссылки в тексте:
[1] одного поста: http://www.rummandba.com/2013/12/pgha-postgresqlpgbouncer-high.html
[2] установке: https://bitbucket.org/openscg/pgha/src/95ab4749b33dafb36e9632bb509ee6c4deb43b14/doc/?at=master
[3] pgHA: http://www.openscg.com/postgresql-ha-automatic-failover/
[4] здесь: https://bitbucket.org/openscg/pgha/downloads
[5] www.rummandba.com/2013/08/postgresql-92-streaming-replication.html: http://www.rummandba.com/2013/08/postgresql-92-streaming-replication.html
[6] habrahabr.ru/post/106872/: http://habrahabr.ru/post/106872/
[7] habrahabr.ru/post/188096/: http://habrahabr.ru/post/188096/
[8] pgBouncer: http://wiki.postgresql.org/wiki/PgBouncer
[9] здесь: https://bitbucket.org/openscg/pgha/src/95ab4749b33d/support/pgBouncer/cfg/?at=master
[10] здесь: https://bitbucket.org/openscg/pgha/src/95ab4749b33dafb36e9632bb509ee6c4deb43b14/cfg/?at=master
[11] здесь: https://bitbucket.org/openscg/pgha/src/95ab4749b33dafb36e9632bb509ee6c4deb43b14/cfg/status_table.sql?at=master
[12] здесь: https://bitbucket.org/openscg/pgha/src/95ab4749b33dafb36e9632bb509ee6c4deb43b14/bin/failoverd.pl?at=master#cl-375
[13] Источник: http://habrahabr.ru/post/223825/
Нажмите здесь для печати.