1.1. Быстрый запуск #
- 1.1.1. Выбор устанавливаемых пакетов
- 1.1.2. Конфигурирование кластера
- 1.1.3. Подготовка
- 1.1.4. Развёртывание узлов Postgres Pro Shardman
- 1.1.5. Инициализация кластера Postgres Pro Shardman
- 1.1.6. Добавление узлов в кластер Postgres Pro Shardman
- 1.1.7. Проверка состояния кластера Postgres Pro Shardman
- 1.1.8. Подключение к кластеру Postgres Pro Shardman
- 1.1.2. Конфигурирование кластера
Если ваш администратор выполнил установку не с параметрами по умолчанию, вам может потребоваться проделать дополнительную работу. Например, если сервер баз данных установлен на удалённом компьютере, вам нужно будет указать в переменной окружения PGHOST имя этого компьютера. Вероятно, также придётся установить переменную окружения PGPORT. То есть, если вы пытаетесь запустить клиентское приложение и оно сообщает, что не может подключиться к базе данных, вы должны обратиться к вашему администратору. Если это вы сами, вам следует обратиться к документации и убедиться в правильности настройки окружения. Если вы не поняли, о чём здесь идёт речь, перейдите к следующему разделу.
Postgres Pro Shardman состоит из следующих программных компонентов:
СУБД PostgreSQL 18 с набором изменений.
Расширение Postgres Pro Shardman.
Инструменты и службы управления, включая встроенный менеджер сегментов для обеспечения отказоустойчивости.
Расширение BiHA.
Конфигурация Postgres Pro Shardman хранится в распределённом хранилище.
Демон shardmand контролирует конфигурацию кластера и управляет BiHA-кластерами, которые обеспечивают отказоустойчивость сегментов. Общая конфигурация Postgres Pro Shardman (shardmand) хранится в распределённом хранилище.
В настоящее время пакеты Postgres Pro Shardman доступны для следующих ОС:
Ubuntu 22.04/24.04 (не сертифицированная редакция)
Debian 12/13 (не сертифицированная редакция)
РЕД ОС 8 и 7.3 (не сертифицированная редакция)
Альт 10/11 (не сертифицированная редакция) и Альт СП релиз 10
Astra Linux 1.7/1.8 и s390 (не сертифицированная редакция)
1.1.1. Выбор устанавливаемых пакетов #
В следующей таблице перечислены все имеющиеся пакеты Postgres Pro Shardman.
Таблица 1.1. Пакеты Postgres Pro Shardman
Пакет | Описание |
|---|---|
| Пакет верхнего уровня, устанавливающий и настраивающий Postgres Pro Shardman для серверных и клиентских систем. Не используйте этот пакет при обновлении или миграции. ВажноПри установке пакета |
| Пакет верхнего уровня, устанавливающий символы отладки для других пакетов. |
| Стандартные клиентские приложения, такие как psql и pg_dump. |
| Пакет для отладки. |
| Демон shardmand для управления службами Postgres Pro Shardman. |
| Утилита командной строки для управления демоном или утилитами, например, shardmanctl. |
| Общие библиотеки, требующиеся для развёртывания клиентских приложений, включая libpq; библиотеки времени выполнения для обработчика ECPG. |
| Пакет для отладки. |
| Сервер Postgres Pro Shardman и серверный язык программирования PL/pgSQL. |
| Пакет для отладки. |
| Дополнительные расширения и программы, разворачиваемые на серверах баз данных. |
| Пакет для отладки. |
| Заголовочные файлы и библиотеки для разработки клиентских приложений и серверных расширений. В системах на базе Debian этот пакет называется |
| Пакет для отладки для заголовочных файлов. |
| Реализация языка Perl для программирования на стороне сервера (см. Главу 45). |
| Пакет для отладки. |
| Реализация языка Python 3 для программирования на стороне сервера (см. PL/Python). |
| Пакет для отладки. |
| Реализация языка Tcl для программирования на стороне сервера (см. Главу 44). |
| Пакет для отладки. |
| Документация на английском языке. |
| Документация на русском языке. |
| Версия bihactl для Golang, которой через BiHA могут управлять shardmanctl и другие утилиты. |
| Этот пакет обеспечивает поддержку JIT-компиляции. Этот пакет предоставляется только для архитектуры x86_64 и только для поддерживаемых систем Debian и Ubuntu, Astra Linux 1.7/1.8 и поддерживаемых систем Альт. Чтобы узнать об использовании JIT больше, обратитесь к Главе 29. |
| Пакет для отладки. |
| Утилита pg_probackup3. Категорически запрещается использовать версии pg_probackup3, отличные от поставляемых в репозитории Postgres Pro Shardman. |
| Пакет для отладки. |
| Утилита pgpro_controldata, показывающая управляющую информацию кластера БД PostgreSQL/Postgres Pro Shardman и параметры совместимости кластера и/или сервера. |
| Расширение pgpro_pwr, позволяющее получать отчёты по нагрузке, полезные для выявления наиболее ресурсоёмких операций в базе данных. |
Кроме того, Postgres Pro Shardman предоставляет отдельные пакеты с отладочной информацией для некоторых операционных систем:
В системах на базе Debian это пакет
postgrespro-sdm-18-dbg.В ОС Альт Линукс для всех пакетов с двоичными файлами имеются соответствующие пакеты
-debuginfo.
1.1.2. Конфигурирование кластера #
Минимальная конфигурация состоит из двух узлов Postgres Pro Shardman.
Допустим, у нас есть следующие имена узлов и IP-адреса:
192.0.1.1 etcd - первый узел etcd 192.0.1.20 sdm01 - первый узел Shardman 192.0.1.21 sdm02 - второй узел Shardman 192.0.1.23 sdm03 - третий узел Shardman 192.0.1.100 ntp - сервер синхронизации по местному времени (необязательно)
Характеристики каждого узла: 4Gb RAM, 20GB HDD, 2CPU и ОС Ubuntu 22.04.
1.1.3. Подготовка #
1.1.3.1. Добавление имён узлов в /etc/hosts #
Этот шаг следует выполнить на всех узлах.
sudo /bin/sh -c 'cat << EOF >> /etc/hosts 192.0.1.20 sdm01 192.0.1.21 sdm02 192.0.1.23 sdm03 EOF'
1.1.3.2. Синхронизация по времени #
Этот шаг следует выполнить на всех узлах.
Установите и запустите демон chrony на всех узлах.
sudo apt install -y chrony
По умолчанию chrony получает время с доступных серверов в Интернете или с локального сервера времени. Проверить доступные серверы времени можно следующим образом:
chronyc sources MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^? 192.0.1.100 1 6 7 1 -98us[ -98us] +/- 11ms ^* time.cloudflare.com 3 6 7 1 +139us[ +163us] +/- 11ms ^+ tms04.deltatelesystems.ru 1 6 7 1 -381us[ -357us] +/- 17ms
Желательно синхронизировать время с вашим сервером или локальным сервером для кластера. В данном случае — сервер ntp. Для этого внесите в конфигурацию chrony следующие изменения:
sudo tee "/etc/chrony/chrony.conf" > /dev/null << 'EOF' server 192.0.1.100 iburst keyfile /etc/chrony.keys driftfile /var/lib/chrony/chrony.drift log tracking measurements statistics logdir /var/log/chrony EOF systemctl restart chrony
Проверьте, что демон chrony подключён к нужному серверу.
chronyc sources MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^? 192.0.1.100 8 6 17 37 +14us[ +70us] +/- 161us chronyc tracking Reference ID : 0A80000C (ntp.local) Stratum : 9 Ref time (UTC) : Wed Nov 15 11:58:52 2023 System time : 0.000000004 seconds slow of NTP time Last offset : -0.000056968 seconds RMS offset : 0.000056968 seconds Frequency : 10.252 ppm fast Residual freq : -2.401 ppm Skew : 364.419 ppm Root delay : 0.000455358 seconds Root dispersion : 0.010503666 seconds Update interval : 2.1 seconds Leap status : Normal
1.1.4. Развёртывание узлов Postgres Pro Shardman #
Добавьте репозиторий Postgres Pro Shardman на каждом узле Postgres Pro Shardman:
Установите следующие пакеты:
sudo apt install -y vim curl jq
Запустите указанные скрипты:
curl -fsSL -u "<user>:<password>" https://repo.postgrespro.ru/sdm/sdm-18/keys/pgpro-repo-add.sh > pgpro-repo-add.sh | bash chmod +x pgpro-repo-add.sh
Задайте свой логин и пароль для репозитория
pgpro-repo-add.sh:ex -s -c "%s/REPOUSER=/REPOUSER=<имя_пользователя>/g" -c "wq" "pgpro-repo-add.sh" ex -s -c "%s/PASSWORD=/PASSWORD=<пароль>/g" -c "wq" "pgpro-repo-add.sh"
Запустите
sudo pgpro-repo-add.sh:sudo ./pgpro-repo-add.sh
Установите пакеты (на каждом узле):
sudo apt update sudo apt install -y postgrespro-sdm-18-server postgrespro-sdm-18-client postgrespro-sdm-18-contrib postgrespro-sdm-18-libs pg-probackup3 sdm-18-services sdm-18-tools biha-utils-sdm-18
Предположим, выбранное имя кластера — cluster0. Следующий шаг — поместить переменные окружения Postgres Pro Shardman в каталог /etc/shardman (на каждом узле):
sudo sh -c 'cat << EOF > /etc/shardman/shardmand18-cluster0.env SDM_CLUSTER_NAME=cluster0 SDM_LOG_LEVEL=info EOF'
Файл и каталог создаются с помощью команды sudo, однако в дальнейшем shardmanctl её не использует, поэтому доступ к файлу с переменными окружения отсутствует. Для получения доступа необходимо добавить переменные в систему через export или дать пользователю права доступа к файлу и каталогу.
Для локального пользователя добавьте путь /opt/pgpro/sdm-18/bin в переменную окружения PATH:
echo "export PATH=$PATH:/opt/pgpro/sdm-18/bin" >> ~/.bashrc source ~/.bashrc
Сгенерируйте пример конфигурации с помощью утилит Postgres Pro Shardman (только на одном узле Postgres Pro Shardman).
shardmanctl config generate > spec.json
На этом шаге можно внести некоторые изменения в спецификацию (конфигурацию) кластера, например изменить пароль или параметр PostgreSQL shared_buffers и так далее.
Для небольшого изменения кластера задайте для параметра Repfactor значение 0. За подробной информацией обратитесь к файлу конфигурации Shardman.
jq ' .Repfactor = 0 ' "spec.json" > tmp.json && mv tmp.json "spec.json"
1.1.5. Инициализация кластера Postgres Pro Shardman #
Осталось несколько последних шагов. Сначала инициализируйте конфигурацию кластера в распределённом хранилище (только на одном [любом] узле Postgres Pro Shardman).
shardmanctl init -f spec.json
Ожидается такой результат:
2023-04-18T12:30:03.043Z DEBUG cmd/common.go:100 Waiting for metadata lock... 2023-04-18T12:30:03.048Z DEBUG cluster/cluster.go:365 DataDir is not specified, setting to default /var/lib/pgpro/sdm-18/data
Включите и запустите службу shardmand (на каждом узле Postgres Pro Shardman):
sudo systemctl enable --now shardmand18@cluster0 sudo systemctl cluster status shardmand18@cluster0
● shardmand18@cluster0.service - deployment daemon for shardman
Loaded: loaded (/lib/systemd/system/shardmand18@.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2023-04-18 12:28:18 UTC; 2min 13s ago
Docs: https://github.com/postgrespro/shardman
Main PID: 618 (shardmand)
Tasks: 10 (limit: 4571)
Memory: 32.0M
CPU: 422ms
CGroup: /system.slice/system-shardmand.slice/shardmand@cluster0.service
└─618 /opt/pgpro/sdm-18/bin/shardmand --cluster-name cluster0 --system-bus --user postgres1.1.6. Добавление узлов в кластер Postgres Pro Shardman #
Следующую команду необходимо выполнить только на одном узле Postgres Pro Shardman.
На этом шаге предполагается, что все предыдущие шаги выполнены успешно: время на всех узлах синхронизировано и демон запущен на sdm01, sdm02 и sdm03. На последнем шаге выполняется команда shardmanctl:
shardmanctl nodes add -n sdm01,sdm02,sdm03 \
--cluster-name cluster0 \
--log-level debugОжидается такой результат:
2023-04-18T12:43:11.300Z DEBUG cmd/common.go:100 Waiting for metadata lock... 2023-04-18T12:43:11.306Z INFO cluster/store.go:277 Checking if shardmand on all nodes have applied current cluster configuration ✓ Waiting for shardmand on node sdm01 to apply current configuration: success 0.000s ✓ Waiting for shardmand on node sdm02 to apply current configuration: success 0.000s ✓ Waiting for shardmand on node sdm03 to apply current configuration: success 0.000s 2023-04-18T12:43:11.307Z INFO add/case.go:112 Initting Stolon instances... 2023-04-18T12:43:11.312Z INFO add/case.go:170 Waiting for Stolon daemons to start... make sure shardmand daemons are running on the nodes ✓ Waiting for Stolon daemons of rg clover-1-sdm01: success 31.012s ✓ Waiting for Stolon daemons of rg clover-1-sdm02: success 0.012s ✓ Waiting for Stolon daemons of rg clover-1-sdm03: success 0.012s 2023-04-18T12:43:42.336Z INFO add/case.go:187 Adding repgroups... ✓ waiting rg 1 config apply: done 7.014s 2023-04-18T12:43:49.444Z DEBUG broadcaster/worker.go:33 start broadcaster worker for repgroup id=1 2023-04-18T12:43:49.453Z DEBUG broadcaster/worker.go:51 repgroup 1 connect established 2023-04-18T12:43:49.453Z DEBUG commands/addrepgroup.go:575 waiting for extension lock... 2023-04-18T12:43:49.453Z DEBUG commands/addrepgroup.go:137 Loading schema into replication group rg 1 ... 2023-04-18T12:44:25.665Z DEBUG rebalance/service.go:528 wait all tasks finish 2023-04-18T12:44:25.666Z DEBUG broadcaster/worker.go:75 finish broadcaster worker for repgroup id=1 2023-04-18T12:44:25.666Z DEBUG broadcaster/worker.go:75 finish broadcaster worker for repgroup id=2 2023-04-18T12:44:25.666Z INFO add/case.go:221 Successfully added nodes sdm01, sdm02, sdm03 to the cluster
Сообщение «Successfully added nodes sdm01, sdm02, sdm03 to the cluster» (Узлы sdm01, sdm02 успешно добавлены в кластер) означает, что всё в порядке и узлы sdm01, sdm02 и sdm03 работают нормально.
1.1.7. Проверка состояния кластера Postgres Pro Shardman #
Проверьте состояние узлов кластера.
shardmanctl cluster status postgres@shrn1:/$ shardmanctl cluster status RESTART REQUIRED PARAMS STATUS OK BIHA STATUS OK METADATA STATUS OK SHARDMAND STATUS OK REPLICATION GROUP STATUS OK DICTIONARY STATUS OK KEEPER STATUS OK STORE STATUS OK MASTER STATUS OK
1.1.8. Подключение к кластеру Postgres Pro Shardman #
Для подключения к кластеру получите строку подключения на любом узле кластера (sdm01, sdm02 или sdm02):
shardmanctl getconnstr
Пример вывода:
dbname=postgres host=sdm01,sdm02,sdm03 password=!!!CHANGE_ME!!! port=5432,5432,5432 user=postgres
Затем попробуйте подключиться:
psql -d 'dbname=postgres host=sdm01,sdm02,sdm03 password=!!!CHANGE_ME!!! port=5432,5432,5432 user=postgres'
Пример вывода:
psql (18.1) Type "help" for help.