Сейчас мы обсудим некоторые вопросы установки и базовой настройки СУБД Postgresql, немного коснемся создания Master – Slave кластера, а вопросы углубленной настройки, SQL-синтаксиса и т.п. оставим для другой статьи.
Установка свежих версий Postgresql в Ubuntu Linux
Снимаем полный дамп текущей базы данных
# su postgres
$ pg_dumpall >/tmp/full_dump.sql
Удаляем все пакеты Postgresql
# apt-get purge postgresql-*
Подключаем репозитарий и устанавливаем самый свежий на данный момент Postgresql
# sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
# wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
# apt -y update
# apt-get install postgresql-15-*
Восстанавливаем полный дамп Postgresql
# su postgres
$ cat /tmp/full_dump.sql | psql
Настройка Master-Slave репликации в Postgresql
Настройка Master-сервера
Создаем пользователя на master-сервере:
CREATE ROLE replicator REPLICATION LOGIN PASSWORD 'xxxSecretPasswordxxx';
Прописываем разрешения на доступ в pg_hba.conf:
local replication all md5
host replication all 127.0.0.1/32 md5
host replication all ::1/128 md5
host replication all 10.54.130.115/32 md5
Конфигурация Master-сервера (отличия от штатного):
max_connections = 1000
wal_level = replica
archive_mode = on
archive_command = 'test ! -f /opt/postgresql_archive_log/%f && cp %p /opt/postgresql_archive_log/%f'
wal_keep_segments = 16
log_timezone = 'Asia/Almaty'
timezone = 'Asia/Almaty'
Настройка Slave-сервера
Копируем данные с Master-сервера
# mkdir /tmp/backup/
# pg_basebackup -h 10.54.130.102 -D /tmp/backup/ -U replicator -v -P -R -X stream -c fast
Последовательность дальнейших действий
- Останавливаем Postgresql
- Очистим хранилище data (/var/lib/postgresql/data)
- Скопируем полученные данные в хранилище (/var/lib/postgresql/data)
- Правим права доступа к каталогу (/var/lib/postgresql/data)
Правки в конфигурации recovery.conf:
restore_command = 'cp /opt/postgresql_archive_log/%f %p'
archive_cleanup_command = 'pg_archivecleanup /opt/postgresql_archive_log/ %r'
Прочие заметки и замечания
PgPool2 – Настройка логирования в текстовый файл
Так-как конфигурация Pgpool2 подразумевает логирование или в stderr или syslog, то для логирования в файл придется немного пошаманить.
Переключаем вывод логов в stderr
/etc/pgpool2/pgpool.conf
log_destination = 'stderr'
Создаем правило переопределения для SystemD-сервиса
Команда редактирования сервиса:
# systemctl edit pgpool2
Добавляем
[Service]
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=pgpool2
StandardOutput=file:/var/log/pgpool/pgpool.log
StandardError=file:/var/log/pgpool/pgpool.log
Перезапускаем сервис
# systemctl daemon-reload
# systemctl restart pgpool2
Таким образом мы логируем и в отдельный файл и в syslog.
Настраиваем logrotate-правило
Файл /etc/logrotate.d/pgpool2
/var/log/pgpool/*.log {
rotate 12
weekly
compress
missingok
}
Видео-инструкция по настройке подключения к базе данных в DbBeaver