LINUX.ORG.RU

Работа с PostgreSQL: настройка и масштабирование

 , ,


14

5

Добрый день. Прошло много времени с выпуска второй версии книги по PostgreSQL — успела выйти версия 9.1 и 9.2 этой замечательной базы данных. Материалов по практическому использованию этой БД также накопилось немало, поэтому я решил выпустить обновление по книге. Итак, встречайте:«Работа с PostgreSQL: настройка и масштабирование», 3-е издание.

Как и раньше, в книге исследуются вопросы по настройке производительности PostgreSQL, репликации и кластеризации. Список изменений можно глянуть на странице книги. Любые пожелания или замечания можно высылать по почте (в моем блоге указано) или писать в github issues (или даже делать pull request на исправления). Приятного прочтения!

Исходники

>>> Работа с PostgreSQL: настройка и масштабирование



Проверено: maxcom ()
Последнее исправление: cetjs2 (всего исправлений: 2)

Лео ОГРОМНОЕ СПАСИБО за книгу, модераторам решпект за удаление 4.2 Видел камент с фразой"не ставится на винду" - для школоты http://postgresql.ru.net/docs/win7_inst.html у самого в стандартной установке на оффтоп2003срв полный комплект с доками и туторами в дистре докоборота живет ещё 8.3 PS: не везде есть гетерогенные/nixonly сети, приходится приспосабливаться как админам так м разрабам:), даж 1с-ники это просекли:)

anonymous
()

Ух ты! Спасибо, очень вовремя.

gwinn ★★★★
()

Очень много нового материала. А исходники книги - высшего качества пример как надо верстать научно-техническую литературу. Можно использовать как шаблон для верстки своих книжек.

Deleted
()

Отличная работа, благодарю.

anonymous
()
Ответ на: комментарий от le0pard

ага, спасибо. pgpool я видел какое-то время назад и как-то общее впечатление было не очень.

crypt ★★★★★
()
Ответ на: комментарий от anonymous

Какую СУБД посоветуете?

Разные под разные задачи, и сабж в частности для односерверных нагруженных и не очень сайтов. Для кластеров проще и удобнее nosql решение использовать с честным мультимастером, чем танцевать вокруг постегреса и его репликации. Тот же elasticsearch (он не только по тексту индексы строит).

shahid ★★★★★
()
Последнее исправление: shahid (всего исправлений: 3)

Мир не без добрых людей :-) Респект!

MrBlues
()

Больше книжек хороших и разных :) Автору всяческое уважение.

Evgueni ★★★★★
()

Хочу печатную версию (не A4)!

anonymous
()
Ответ на: комментарий от insider

Не знаю, сам не большой специалист, к сожалению. Но данное руководство, насколько я помню его прошлую версию, больше подходит для админов, разворачивающих конкретные БД для конкретных целей и конкретной нагрузки. А так, надо плясать от имеющегося уровня в реляционных СУБД как такового, я считаю.

Binary ★★★★★
()

Алексей, огромное спасибо за книгу.

Такая задача (уже подобный вопрос тут был): настроили streaming репликацию, есть master и slave, при падении сервера с master включается slave. Вопрос в том, как определить какой из серверов master, какой slave автоматически. Предположим, оба сервера упали (кончилось электричество) - кто должен стать мастером после запуска серверов? Если сервер после падения включается, как он может определить что он мастер и запустить репликацию на слейве?

kt
()

Скажите пожалуйста, а что означает штрих-код размещенный в последней строке картинки с титульной страницы.

https://github.com/le0pard/postgresql_book/blob/master/images/cover.jpg?raw=true

Увеличил немного: http://imageshack.us/scaled/landing/21/baruq.png

Или это просто глюк фотошопа для мака?

anonymous
()
Ответ на: комментарий от anonymous

Или это просто глюк фотошопа для мака?

Наверно. Так все равно pdf этой картинки юзается при конвертации.

le0pard
() автор топика
Ответ на: комментарий от le0pard

Ну так эти странные белые точки есть и в pdf. Мне вдруг показалось, что ваш коварный замысел по внедрению цифровой метки раскрыты, а оказалось всего то, что это совместное действие глюка фотошопа и моей параноии. Жаль. Пойду попью глицина.

anonymous
()
Ответ на: комментарий от anonymous

Это вы к чему? К тому что такой способ есть? Тогда давайте пруфлинк, т.к. это, думаю, многим будет интересно.

А на счет английского все просто - на русском мне лично читать книгу легче чем на английском.

UncleAndy ★★★
()
Последнее исправление: UncleAndy (всего исправлений: 1)
Ответ на: комментарий от Wizard_

Читалка должна html поддерживать. Она там есть готовый.

le0pard
() автор топика
Ответ на: комментарий от Binary

ИМХО, такая ситуация должна решаться админом базы.

И как именно она должна решаться, если репликация делается для уменьшения простоя, а реакция админа быстрой не будет. Да и на основе чего админ будет решать кто мастер? Мне только приходит в голову сравнение времени файлов логов, но правильно ли это?

kt
()
Ответ на: комментарий от kt

И как именно она должна решаться, если репликация делается для уменьшения простоя, а реакция админа быстрой не будет. Да и на основе чего админ будет решать кто мастер? Мне только приходит в голову сравнение времени файлов логов, но правильно ли это?

Ну так чудес не бывает. Если вам нужно чтобы простоя не было, делайте больше серверов, ставьте UPSы и мониторинг, тогда сможете принять какие-то действия заранее и конфликта не возникнет. А так конфликт придётся разруливать вручную по разным соображениям, универсального рецепта быть не может.

Binary ★★★★★
()
Ответ на: комментарий от Binary

универсального рецепта быть не может.

У Oracle есть , почему бы и тут не быть. Вообще мои вопросы были к автору книги, философствовать я и сам обучен.

kt
()
Ответ на: комментарий от kt

pgpool-II + Streaming replication

backend_hostname0 = 'host1'
backend_port0 = 5432
backend_weight0 = 1
backend_data_directory0 = '/data'
backend_hostname1 = 'host2'
backend_port1 = 5432
backend_weight1 = 1
backend_data_directory1 = '/data1'
backend_hostname2 = 'host3'
backend_port2 = 5432
backend_weight2 = 1
backend_data_directory2 = '/data2'
0 - будет мастер, 1 - 2 — слейвы. переключение будет по порядку: упал ноль - станет мастером 1, упал еще и 1 - станет 2. При падении 1 и 2 мастер 0 будет продолжать работать. Не забыть добавить скрипт
failover_command = '/usr/local/etc/failover.sh %d "%h" %p %D %m %M "%H" %P'
Чтобы слейв перешел со слейва в мастер: failover.sh содержит
#!/bin/sh
# Execute command by failover.
# special values:  %d = node id
#                  %h = host name
#                  %p = port number
#                  %D = database cluster path
#                  %m = new master node id
#                  %M = old master node id
#                  %H = new master node host name
#                  %P = old primary node id
#                  %% = '%' character
failed_node_id=$1
failed_host_name=$2
failed_port=$3
failed_db_cluster=$4
new_master_id=$5
old_master_id=$6
new_master_host_name=$7
old_primary_node_id=$8
trigger=/var/log/pgpool/trigger/trigger_file1

if [ $failed_node_id = $old_primary_node_id ];then	# master failed
    touch $trigger	# let standby take over
fi

Ставиться тригер файл, что переводит слейв с режима чтения WAL-логов на работу в обычном режиме.

Тут же можно и настроить балансировку на чтение с проверкой отставания мастера. Удачи :)

le0pard
() автор топика

Огромное спасибо!

renya ★★★★★
()
Ответ на: комментарий от le0pard

Но с какими параметрами надо запустить failover.sh, если кластер упал в произвольный момент времени? Откуда узнать, какой из хостов до падения был мастером?

Да, и ещё вопрос. Если между мастером и слейвом плохой канал, это не помешает репликации? Плохой - в смысле медленный и с разрывами связи. Это вызовет только большую рассинхронизацию?

kt
()
Ответ на: комментарий от anonymous

Замечательно поставлен вопрос!
Равносильно:
- Какой резачок посоветуете?
- Скальпель
- Гавно ваш скальпель - поломался нахрен, даже одно дерево не дорезал!

Инструмент подбирают для решения конкретной задачи.
Так же, как не бывает «универсального компьютерщика», не бывает универсальной СУБД, ОС или ЯП.

Pronin ★★★★
()
Ответ на: комментарий от kt

Но с какими параметрами надо запустить failover.sh, если кластер упал в произвольный момент времени?

Вам это не нужно делать - pgpool-II это сделает сам. Он держит отдельное подключение к каждой базе и если одна из них отвалится, то он отключит эту базу из кластера. Назад упавшие PostgreSQL сам не вернет (даже если вы их подымите) - только по команде восстановления или добавления.

Откуда узнать, какой из хостов до падения был мастером?

Можно узнать через pcp_* интерфейс pgpool-II, прочитать в логах pgpool, или даже на failover_command добавить свой скрипт на отсылку письма или еще чего при падении в кластере.

Если между мастером и слейвом плохой канал, это не помешает репликации? Плохой - в смысле медленный и с разрывами связи. Это вызовет только большую рассинхронизацию?

Да, но как сами понимаете это не желательно.

le0pard
() автор топика
Ответ на: комментарий от le0pard

Давненько довольно плотно курил мануалы по pgpool, но до использования дело не дошло. Как в описанном случае с failover'ом самого pgpool?

Binary ★★★★★
()
Ответ на: комментарий от le0pard

Спасибо! Про pgpool я такого не знал, точнее знал, но только теперь понял что именно так и должно быть - одиночные отключения серверов он обработает. Мне сам он (pgpool) не понравился только тем, что требует учитывать его наличие при написании программ.

Но всё равно это не решает вопроса о том, какой из серверов назначить мастером после падения _всех_ серверов одновременно ( после нескольких переключений мастера ).

kt
()
Ответ на: комментарий от Binary

Давненько довольно плотно курил мануалы по pgpool, но до использования дело не дошло. Как в описанном случае с failover'ом самого pgpool?

Он ставится вместе с чем-то вроде heartbeat на нескольких серверах.

kt
()
Ответ на: комментарий от kt

Но всё равно это не решает вопроса о том, какой из серверов назначить мастером после падения _всех_ серверов одновременно ( после нескольких переключений мастера ).

Не будет мастера. Все будут отключены из кластера (поскольку все упали), и первый что вы вернете и станет мастером.

le0pard
() автор топика
Ответ на: комментарий от Binary

Это уже будет Ваша проблема при решении как востановить весь упавший кластер :) pgpool-II только отключит.

le0pard
() автор топика
Ответ на: комментарий от le0pard

Ну собственно то, что я и сказал уже выше.

Binary ★★★★★
()
Ответ на: комментарий от le0pard

Cron задача

Ну это если партицировать по дате. А что если нужно что-то типа разбивки по 100000 записей? Может какой триггер можно?

k_andy ★★★
()
Ответ на: комментарий от le0pard

Можно же, наверно, взять дату чего-то и сравнить. Например, xfer-логов. Сейчас я , становясь мастером, делаю touch <файл>, и при старте серверов тот, кто имеет старшую версию этого файла, объявляет себя мастером и инициализирует слейв. Собственно говоря, pgpool в моей схеме вообще не участвует. Кстати, введь pgpool не знает кто из серверов мастер? Тогда он не может направить запись на нужный сервер?

kt
()
Ответ на: комментарий от anonymous

оракл для бедных.

...тут пришёл поручик...

hobbit ★★★★★
()
Ответ на: комментарий от Pronin

Гавно ваш скальпель

Ну сабж я бы сравнил, скорее, со швейцарским ножом. Он действительно очень хорошо масштабируется (хотя для особо нагруженных проектов до того же Oracle и не дотягивает).

hobbit ★★★★★
()

Обновил PDF и HTML

Обновил PDF и HTML (исправлено множество синтаксических и грамматических ошибок). Спасибо контрибьюторам!

le0pard
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.