Автоматизація відмови в PostgreSQL 9.1


18

Як встановити два однакових сервера для автоматичного відмови в PostgreSQL 9.1.

ОС

Centos 5
PostgreSQL 9.1, зібраний з джерела
Обліковий запис користувача postgres існує на обох машинах і має ключ ssh, що не має пароля, для з'єднання з обома машинами.

Моя поточна настройка:

Конфігурація головного сервера:

postgresql.conf:

listen_address = '*'
wal_level = hot_standby
max_wal_senders = 3
checkpoint_segments = 16    
wal_keep_segments = 8 
archive_mode = on    
archive_command = 'cp "%p" /opt/pgsql91/archive/"%f"'  

pg_hba.conf:

 host  replication   all   10.0.66.1/32      trust
 host  replication   all   10.0.66.2/32      trust

Сервер очікування

postgresql.conf та pg_hba.conf ідентичні тим, що налаштовано на головному сервері.

recovery.conf:

 standby_mode = 'on'
 primary_conninfo = 'host=10.0.66.1'
 trigger_file = '/opt/pgsql91/data/trigger.txt'

Завдяки hzRoot, тепер я розумію, як переключити сервер з режиму очікування на головний.

Використовуючи наступні команди, я можу синхронізувати новий ведений з новим ведучим, а потім отримати резервне копіювання та запуск реплікації.

Про нового ведучого (10.0.66.2)

  1. су - постгреси
  2. торкніться тригер.txt в / opt / pgsql91 / data /
  3. recovery.conf стає recovery.done
  4. psql -c "; SELECT pg_start_backup ('резервна копія', правда)";
  5. rsync -a -v -e ssh / opt / pgsql91 / data / 10.0.66.1:/opt/pgsql91/data/ --exclude postmaster.pid
  6. psql -c "; ВИБІР pg_stop_backup ()";

Про нового раба (10.0.66.1)

  1. створити recovery.conf: cp recovery.done для recovery.conf
  2. vi recovery.conf змінити ip-адресу: Primary_conninfo = 'host = 10.0.66.2'
  3. почати postgresql

Отже, зараз мої запитання:

  1. Це правильний спосіб перемикання ролей?
  2. Хтось автоматизував цей процес, якщо так, що ви робили?
  3. Якщо синхронна реплікація включена, я помітив, що новий головний сервер не здійснюватиме жодних транзакцій, оскільки він чекає, коли підлеглий відповість. Однак немає раба, тому що інший сервер, старий майстер, не працює. Це правильно чи мені потрібно тимчасово відключити синхронну реплікацію, поки новий підлеглий не працює?

1. так правильно 2. можливо, краще не автоматизувати цей процес. 3. тож вам потрібно 2 раби і 1 господар хоч би. тому що, як ви сказали, синхронізація. для тиражування потрібно щонайменше 2 вузли, щоб натиснути на коміти синхронізації. якщо це лише один головний вузол, ви не зможете здійснити ..
sftsz

кроки 4, 5 і 6 для нового ведучого не потрібні, тому що, ну, ви реплікуєте для початку. По-друге, що робити, якщо господар загинув і був офлайн - ви не зможете з ним підключитися. Етапи 4,5 і 6 зазвичай виконуються на новому підлеглому вузлі, що приєднується до пулу реплікації.
Ерік

@Eric, коли я грав з цим, кроки 4,5,6 необхідні для повернення старого майстра до робочого стану. Перетворення в режим очікування нового основного моменту негайно робить новий запис WAL, тому він на 1 запис випереджає старого майстра. Запуск старого майстра в режимі очікування накинув на мене помилки, тому мені довелося зробити кроки 4,5,6 на старому майстрі, щоб синхронізувати його з новим майстром (використовуючи pg_basebackup, який може передавати весь xlog з нового майстра - замінює кроки 4,5,6 в постгресах> = 9.1 Я думаю). Я правильно чи зробив щось не так, і це не повинно бути необхідним?
Dalibor Filus

Відповіді:


8

Перевірте repmrg :

repmgr - це набір інструментів з відкритим кодом, що допомагає DBA та системним адміністраторам керувати кластером баз даних PostgreSQL.

Користуючись можливостями «гарячого режиму очікування», представленою в PostgreSQL 9, repmgr значно спрощує процес створення та управління базою даних з високими вимогами щодо доступності та масштабованості.

repmgr спрощує адміністрування та щоденне управління, підвищує продуктивність і зменшує загальні витрати кластера PostgreSQL за рахунок:

  • моніторинг процесу реплікації; дозволяючи DBA видавати високі
  • операції з доступності, такі як перемикання та збої.

Це робить дві речі:

  1. repmgr: командна програма, яка виконує завдання на вашому кластері, а потім виходить
  2. repmgrd: демон управління та моніторингу, який спостерігає за кластером і може автоматизувати віддалені дії.

Для автоматичного відмови, repmgrd виконує завдання і не є SPOF у вашій мережі, як-от pgPool. Однак все ще важливо стежити за всіма алмазами та повертати їх після відмови.

Вийде версія 2.0, включаючи RPM.


Привіт Френк, дякую за вашу відповідь. Я не чув про repmrg, і обов’язково спробую.
Крейг Ефрейн

Привіт знову Френк, Дякую за repmgr, саме це я шукав. Нарешті я маю це спробувати сьогодні.
Крейг Ефрейн

4

у вашому файлі recovery.conf слід додати рядок, який повідомляє postgres про відмову від master до slave. ви повинні додати

trigger_file = '/any/file/to/trigger'

коли ви створюєте цей файл на заданому шляху. вузли зміняться. (файл не включає нічого, це лише тригер)

ви можете знайти додаткову інформацію про поточну реплікацію

з іншого боку, можливо, це стане можливим зробити його автоматично створеним за допомогою деяких хитрощів, але краще використовувати інструменти моніторингу та відмову від ручного ..


Дякую за відповідь. Може пройти пару днів, перш ніж я зможу перевірити це, але я обов'язково повернусь до вас.
Крейг Ефрейн

Я збираюся дати вам +1 за відповідь на запуск_файлу, яка допомогла мені значно впорядкувати процес. Це не вся відповідь, яка полягає в тому, як повністю автоматизувати процес. Ще одне, що я помітив, це те, що, поки майстер був вниз, транзакції не завершаться, оскільки він чекав, коли майстер підтвердить. Це було вирішено за допомогою реплікації async
Крейг Ефрейн

Це досить приголомшливо. У мене є багато закидів щодо недостатньої гнучкості в реалізації реплікації PostgreSQL, але це чудовий, простий спосіб вирішення несправності.
Аарон Браун

1
Однак він переймає головну роль навіть тоді, коли сам господар ще працює (тож у вас є два господарі). Це не автоматизується самими постгресами.
Dalibor Filus

0

Хтось думав використовувати для цього pgpool-II?

http://pgpool.projects.postgresql.org/contrib_docs/simple_sr_setting/index.html

Я встановлюю реплікацію для PostgreSQL. Здається, хитра частина трапляється, коли старий господар повертається.

З того, що я читав, pgpool здається, що він може автоматизувати більшість із цього. Однак я не впевнений, чи використовуються функції реплікації, які вже є в PostgreSQL 9.1.


1
pgPool - це єдиний момент відмови, ви втрачаєте все, коли воно знижується.
Френк Хайкенс

1
Спасибі за вашу відповідь. Я спробував PGPool II зі змішаними результатами як на CentOS, так і на Debian, і в кінцевому підсумку відмовився.
Крейг Ефрейн

1
Чому б не використовувати pgpool II з HAproxy? З серцебиттям і плаваючим ip слуханням?
mikiemorales

Тільки для історичної довідки, pgpool-ii також наразі не працює у Windows.
приурочений
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.