Создание и понимание кластеров в PostgreSQL: шаг за шагом
Быстрый ответ
«Кластер» PostgreSQL — это совокупность серверных процессов и баз данных, которыми они управляют. Для инициализации нужной структуры каталогов используйте команду initdb
, затем pg_ctl
для запуска кластера:
# Указываем новое место хранения данных
initdb -D /путь/к/данным
# Запускаем сервер
pg_ctl -D /путь/к/данным start
Обратите внимание, что /путь/к/данным
должен указывать на каталог, в котором будут размещены файлы данных PostgreSQL.
Понимание понятия «кластер» в PostgreSQL
Термин «кластер» в PostgreSQL означает не то же самое, что в понятии «вычислительный кластер». В данном контексте под «кластером» понимается postmaster — серверный процесс, а также набор баз данных под его управлением. Это отличие от вычислительного кластера, объединяющего группу компьютеров для выполнения общих задач.
Каждый кластер PostgreSQL имеет свою специальную директорию данных и файлы конфигурации, что обеспечивает изоляцию данных и удобство управления различными версиями и конфигурациями на одном сервере.
Визуализация
Давайте представим, что строим мини-город для хранения данных (🏙️):
🏙️ Кластер PostgreSQL
Кластер — это наш город баз данных, состоящий из:
🚧 Создание кластера 🚧
- INITDB: Возводим основание города (`initdb`)
- PG_CTL: Запускаем жизнь внутри города (`pg_ctl start`)
Каждый город 🏙️ = несколько баз данных, сосуществующих под защитой одной установки PostgreSQL.
Таким образом, образуется урбанизация ваших данных!
Основы создания кластера PostgreSQL
Теперь изучим подробнее процесс создания и управления кластерами:
Создание нескольких кластеров
Хотите создать свою «Матрицу»? Вам потребуются права пользователя для работы с директорией данных. Чтобы создать дополнительные кластеры на Debian/Ubuntu, используйте команду pg_createcluster
:
# Матрица снова зовет...
pg_createcluster <версия> <имя_кластера>
Для просмотра всех существующих кластеров воспользуйтесь командой pg_lsclusters
.
Назначение уникальных портов
Каждый кластер должен использовать свой порт. Укажите порт во время инициализации или в файле postgresql.conf:
# Мы выбрали 5433
initdb -D /путь/к/данным -p 5433
Таким образом, вы запустите новый кластер на порту 5433. 🚀
Обеспечение высокой доступности (High Availability, HA)
Для гарантирования высокой доступности потребуются дополнительные настройки, такие как репликация и балансировка нагрузки.
Местоположение директории данных
По умолчанию управлением данными занимается каталог /var/lib/postgresql/<версия>/<имяКластера>
. Однако вы имеете право выбирать местоположение данных самостоятельно. Главное — правильно настроить права доступа.
Продвинутое управление кластерами
Увеличение количества кластеров усложняет их управление. В помощь при этом могут прийти:
pg_ctlcluster
для основных операций, включая запуск, остановку и перезагрузку.pg_rewind
позволит восстановить данные после сбоев.repmgr
упростит работу с репликацией и переключением в случае ошибок.
Управление базами данных в рамках кластера
Для добавления новой базы данных в кластер достаточно выполнить следующую команду:
# Расширяем наш город новым "районом"
CREATE DATABASE newdb;
Каждая база данных может иметь свои расширения и схемы, позволяющие индивидуализировать настройки и избегать конфликтов с другими базами.
Полезные материалы
- Документация PostgreSQL: Введение в кластеры — официальное описание команды CLUSTER.
- PGClusters: настройка кластера PostgreSQL на GitHub — автоматизированная установка высокодоступного кластера PostgreSQL с использованием Ansible.
- Создание и управление кластером PostgreSQL на Digital Ocean — практическое руководство по конфигурации PostgreSQL кластеризации на Ubuntu 18.04.
- Обзорное видео о кластеризации PostgreSQL на YouTube — обучающее видео для начинающих по установке и настройке кластера PostgreSQL.