Показаны сообщения с ярлыком глава 25. Показать все сообщения
Показаны сообщения с ярлыком глава 25. Показать все сообщения

четверг, 24 января 2013 г.

25.3. Обеспечение отказоустойчивости


Если мастер падает, то резервный сервер должен начать процедуру failover (обеспечения отказоустойчивости).
Если падает резервный сервер, то никаких действий предпринимать не надо. Если резервный сервер может быть перезапущен, даже спустя некоторое время, то процесс восстановления может быть немедленно возобновлён. Если же перезапустить резервный сервер не возможно, то тогда нужно использовать другой резервный сервер.
Если мастер падает и резервный сервер становится новым мастером, а затем перезапускается старый мастер, то у Вас должен быть механизм, который бы сообщил старому мастеру, что он уже не является основным сервером. Чаще всего это называется  STONITH (Shoot The Other Node In The Head - Выстрел Другому Узлу в Голову - ВДрУГ ;) ), что необходимо для того, чтобы избежать ситуаций, где два узла действовали бы как мастера,  что привело бы к проблемам и потере информации.
Многие системы обеспечения отказоустойчивости используют только две системы - мастер и резервный сервер, которые соединены каким-то механизмом, который контролирует наличие соединения между обоими системами и жизнеспособность мастера. Кроме того, можно использовать третью систему ("мудрый" сервер), который позволит избежать некоторых случаев отказа, но его использование оправдано лишь при наличии достаточного внимания к настройке и скрупулёзном тестировании.
PostgreSQL не предоставляет системы ПО, которая бы определяла падение мастера и сообщала об этом резервному серверу. Есть множество систем, которые для этого можно использовать и которых хорошо интегрированы со средствами ОС, необходимыми для обеспечения отказоустойчивости, такими как миграция IP.
После того, как происходит переход на резервный сервер, у Вас есть только один действующий сервер. Это называется "вырожденное" состояние, так как бывший резервный сервер теперь мастер, а бывший мастер выключен и может оставаться в таком состоянии. Чтобы вернуться к нормальной системе, Вы должны пересоздать резервный сервер, либо на бывшем мастере после его ремонта, либо на третей, возможно новой, системе. После этого Вы можете захотеть поменять роли серверов. Некоторые используют третий сервер в качестве резерва для нового мастера, пока не сделают новый резервный сервер, однако это усложняет настройку системы и её обслуживание.
Таким образом переключение с мастера на резервный сервер может быть быстрым, но требует некоторой подготовки отказоустойчивого кластера. Периодическое переключение с мастера на резервный сервер полезно, так как предоставляет время для обслуживания каждого из серверов. Кроме того, это позволяет проверить механизм обеспечения отказоустойчивости и убедиться, что он и вправду будет работать, когда это понадобится. Очень желательно, чтобы все действия администратора на этот случай были так же письменно зафиксированы.
Для того, чтобы активировать резервный сервер в случае аварии при использовании пересылки логов, используйте pg_ctl promote или создайте триггер-файл с именем и по адресу, указанным в параметре trigger_file файла recovery.conf. Если Вы собираетесь использовать команду pg_ctl promote, то параметр trigger_file не нужен. Он так же не нужен, если Вы будете использовать резервные сервера только для снятия нагрузки с мастера за счёт выполнения на них только запросов на чтение, а не для обеспечения отказоустойчивости.

четверг, 27 декабря 2012 г.

Глава 25.2 Резервные сервера на основе пересылки логов

Непрерывное архивирование может быть использовано для создания конфигурации высоко доступного (HA) кластера с одним или несколькими резервными серверами, готовыми принять на себя работу, если основной сервер выходит из строя. Эта возможность широко известна под именем "теплый" режим ожидания или передача логов.
Основной и резервный сервера работают вместе, чтобы обеспечить эту функциональность, хотя сами сервера слабо связаны. Мастер-сервер работает в непрерывном режиме архивирования, а каждый резервный сервер работает в непрерывном режиме восстановления, читая WAL файлы от мастера. Не требуется никаких изменений в таблицах базы данных чтобы включить эту возможность, так что этот метод не требует накладных расходов для настройки по сравнению с некоторыми другими видами репликации. Эта конфигурация также имеет относительно низкое влияние на производительность мастер сервера.
Непосредственное перемещение WAL записей с одного сервера баз данных на другой, как правило, называется "передачей логов". PostgreSQL реализует передачу файлов логов пересылая WAL записи, один файл (WAL сегмент) за раз. WAL файлы (16 МБ) могут быть легко и дешево переданы на любое расстояние, будь то соседняя система, другая система на этом же сайте, или другая система на другом конце земного шара. Пропускная способность, требуемая для этого, зависит от частоты транзакций основного сервера. Доставка логов на основе записей более детальна и передаёт WAL изменения инкрементально через сетевое подключение (см. раздел 25.2.5 ).

вторник, 11 декабря 2012 г.

25.1. Сравнение различных способов

Использование общего диска

Использование общего диска позволяет избежать накладок на выполнение синхронизации, так как у Вас будет всего одна копия базы данных. При этом способе используется всего один дисковый массив, общий для нескольких серверов. Если основной сервер базы данных падает, резервный сервер может смонтировать и запустить базу данных, как если бы она была восстановлена после сбоя. Это позволяет быстро восстановить работу без потери данных.
Обычно для этих целей используются общие физические носители. Однако так же возможно использовать сетевую файловую систему, но необходимо убедиться, что она ведёт себя полностью в соответствии со стандартом POSIX (См. раздел 17.2.1). Существенное ограничение этого метода состоит в том, что если общий дисковый массив выходит из строя или повреждается, основной и резервный сервера перестают функционировать. Другая проблема состоит в том, что резервный сервер не должен обращаться к общему хранилищу в то время как работает основной сервер.