1.1. Быстрый запуск #
- 1.1.1. Выбор устанавливаемых пакетов
- 1.1.2. Конфигурирование кластера
- 1.1.3. Подготовка
- 1.1.4. Развёртывание кластера etcd
- 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.9. Подключение к кластеру Postgres Pro Shardman
- 1.1.10. Пример: развёртывание кластера etcd с несколькими узлами
- 1.1.2. Конфигурирование кластера
Если ваш администратор выполнил установку не с параметрами по умолчанию, вам может потребоваться проделать дополнительную работу. Например, если сервер баз данных установлен на удалённом компьютере, вам нужно будет указать в переменной окружения PGHOST имя этого компьютера. Вероятно, также придётся установить переменную окружения PGPORT. То есть, если вы пытаетесь запустить клиентское приложение и оно сообщает, что не может подключиться к базе данных, вы должны обратиться к вашему администратору. Если это вы сами, вам следует обратиться к документации и убедиться в правильности настройки окружения. Если вы не поняли, о чём здесь идёт речь, перейдите к следующему разделу.
Postgres Pro Shardman состоит из следующих программных компонентов:
СУБД PostgreSQL 17 с набором изменений.
Расширение Postgres Pro Shardman.
Инструменты и службы управления, включая встроенный менеджер сегментов для обеспечения отказоустойчивости.
Расширение BiHA.
Конфигурации Postgres Pro Shardman хранятся в кластере etcd, поэтому можно использовать существующий или развернуть новый простой кластер etcd с одним узлом.
Демон shardmand контролирует конфигурацию кластера и управляет кластерами BiHA, которые обеспечивают отказоустойчивость сегментов. Общая конфигурация Postgres Pro Shardman (shardmand) хранится в кластере etcd.
В настоящее время пакеты Postgres Pro Shardman доступны для следующих ОС:
Ubuntu 20.04/22.04
Debian 10/11/12
Red Hat Enterprise Linux 7/8/9
РЕД ОС 7.3/8
Альт 9/10/10SP
Astra Linux 1.7/1.8/s390
1.1.1. Выбор устанавливаемых пакетов #
В следующей таблице перечислены все имеющиеся пакеты Postgres Pro Shardman.
Таблица 1.1. Пакеты Postgres Pro Shardman
Пакет | Описание |
|---|---|
| Пакет верхнего уровня, устанавливающий и настраивающий Postgres Pro Shardman для серверных и клиентских систем. Не используйте этот пакет при обновлении или миграции. ВажноПри установке пакета |
| Пакет верхнего уровня, устанавливающий символы отладки для других пакетов. |
| Стандартные клиентские приложения, такие как psql и pg_dump. |
| Пакет для отладки. |
| Сервер etcd. |
| Демон shardmand для управления службами Postgres Pro Shardman. |
| Утилита командной строки для управления демоном или утилитами, например, shardmanctl. |
| Общие библиотеки, требующиеся для развёртывания клиентских приложений, включая libpq; библиотеки времени выполнения для обработчика ECPG. |
| Пакет для отладки. |
| Сервер Postgres Pro Shardman и серверный язык программирования PL/pgSQL. |
| Пакет для отладки. |
| Дополнительные расширения и программы, разворачиваемые на серверах баз данных. |
| Пакет для отладки. |
| Заголовочные файлы и библиотеки для разработки клиентских приложений и серверных расширений. В системах на базе Debian этот пакет называется |
| Пакет для отладки для заголовочных файлов. |
| Реализация языка Perl для программирования на стороне сервера (см. Главу 45). |
| Пакет для отладки. |
| Реализация языка Python 3 для программирования на стороне сервера (см. Главу 46). |
| Пакет для отладки. |
| Реализация языка Tcl для программирования на стороне сервера (см. Главу 44). |
| Пакет для отладки. |
| Документация на английском языке. |
| Документация на русском языке. |
| Этот пакет обеспечивает поддержку JIT-компиляции. Этот пакет предоставляется только для архитектуры x86_64 и только для поддерживаемых систем Debian и Ubuntu, Astra Linux 1.7/1.8 и поддерживаемых систем Альт. Чтобы узнать об использовании JIT больше, обратитесь к Главе 29. |
| Пакет для отладки. |
| Утилита pg_probackup. |
| Пакет для отладки. |
| Утилита pgpro_controldata, показывающая управляющую информацию кластера БД PostgreSQL/Postgres Pro Shardman и параметры совместимости кластера и/или сервера. |
| Расширение pgpro_pwr, позволяющее получать отчёты по нагрузке, полезные для выявления наиболее ресурсоёмких операций в базе данных. |
Также Postgres Pro Shardman включает библиотеки и утилиты, необходимые для предоставляемых пакетов и сервера Postgres Pro Shardman. Эти пакеты предоставляются только для дистрибутивов, в которых отсутствует требуемая версия таких библиотек.
Таблица 1.2. Сторонние библиотеки и утилиты, собранные для Postgres Pro Shardman
Библиотека/утилита | Описание |
|---|---|
| Библиотека для быстрого сжатия данных без потерь. |
| Две библиотеки Perl, используемые в рамках TAP-тестирования и доступные в пакете |
Кроме этого, имеются отдельные пакеты с несколькими дополнительными модулями, собранные специально для совместимости с Postgres Pro Shardman:
Таблица 1.3. Сторонние пакеты, собранные для Postgres Pro Shardman
Пакет | Описание |
|---|---|
| Драйвер открытого соединения с базами данных (open database connectivity, ODBC) для доступа к системам управления базами данных. В качестве альтернативы можно использовать |
| В этом пакете представлены реализации некоторых функций, которые существуют в СУБД Oracle, но отсутствуют в Postgres Pro Shardman (или работают немного по-другому). |
| pgbouncer — пул соединений для Postgres Pro Shardman. |
| Расширение pgvector, предоставляющее поиск сходства векторов в Postgres Pro Shardman. |
| Набор разделяемых библиотек, реализующих API для отладки функций PL/pgSQL в Postgres Pro Shardman. |
| Разделяемая библиотека PLV8, добавляющая в Postgres Pro Shardman поддержку процедурного языка Javascript в реализации V8. Этот пакет предоставляется только для систем Debian и Ubuntu, Альт 10/11 и РЕД ОС 7.3. |
| Утилиты командной строки для библиотеки |
Кроме того, Postgres Pro Shardman предоставляет отдельные пакеты с отладочной информацией для некоторых операционных систем:
В системах на базе Debian это пакет
postgrespro-sdm-17-dbg.В ОС Альт Линукс для всех пакетов с двоичными файлами имеются соответствующие пакеты
-debuginfo.
1.1.2. Конфигурирование кластера #
Минимальная конфигурация представляет собой один узел etcd и два узла Postgres Pro Shardman. Здесь рассмотрим более сложную конфигурацию с кластером etcd из двух узлов и кластером Postgres Pro Shardman из двух узлов.
Допустим, у нас есть следующие имена узлов и IP-адреса:
192.0.1.1 etcd - первый узел etcd 192.0.1.2 etcd - второй узел etcd 192.0.1.20 sdm01 - первый узел Shardman 192.0.1.21 sdm02 - второй узел 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.1 etcd1 192.0.1.2 etcd2 192.0.1.20 sdm01 192.0.1.21 sdm02 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. Развёртывание кластера etcd #
Данные шаги необходимо выполнить на всех узлах etcd.
Установите следующие пакеты:
sudo apt install -y vim curl
Чтобы подключить репозиторий Postgres Pro Shardman, выполните следующие шаги:
Запустите скрипт (указав имя пользователя и пароль):
curl -fsSL -u "<имя_пользователя>:<пароль>" https://repo.postgrespro.ru/sdm/sdm-17/keys/pgpro-repo-add.sh > pgpro-repo-add.sh 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
Установите пакеты etcd-sdm:
sudo apt install -y etcd-sdm
Укажите значения переменных окружения в соответствующем файле:
sudo vim /etc/default/etcd-sdm
##следующие две строки должны содержать данные вашего узла
ETCD_NAME=<имя_узла>
ETCD_ADVERTISE_CLIENT_URLS=http://<ip_адрес_узла>:2379
ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
ETCD_MAX_SNAPSHOTS=5
ETCD_MAX_WALS=5
ETCD_AUTO_COMPACTION_MODE=periodic
ETCD_AUTO_COMPACTION_RETENTION=5m
ETCD_QUOTA_BACKEND_BYTES=6442450944
ETCD_DATA_DIR=/var/lib/etcd-sdm/sdm-17
#последующие параметры требуются только для кластера etcd с несколькими узлами
#замените на свои IP
ETCD_INITIAL_ADVERTISE_PEER_URLS=http://<ip_адрес_узла>:2380
ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380
ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster-1
ETCD_INITIAL_CLUSTER_STATE=new
ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380Этот файл будет загружен при запуске etcd.
Очистите каталог данных etcd:
sudo rm -rf /var/lib/etcd-sdm/sdm-17/*
Перезапустите службу etcd-sdm:
sudo systemctl restart etcd-sdm
Для локального пользователя добавьте путь /opt/pgpro/sdm-17/bin в переменную окружения PATH:
echo "export PATH=$PATH:/opt/pgpro/sdm-17/bin" >> ~/.bashrc source ~/.bashrc
Проверьте правильность конфигурации etcd:
etcdctl endpoint --endpoints=http://192.0.1.1:2379 status health -w table +------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------------------------------+ | ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS | +------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------------------------------+ | http://192.0.1.1:2379 | 9324a99282752a09 | 3.5.9 | 2.1 GB | true | false | 14 | 91459207 | 91459207 | memberID:10602785869456026121 | | | | | | | | | | | alarm:NOSPACE | +------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------------------------------+
Кластер etcd с одним узлом правильно сконфигурирован и готов обрабатывать запросы.
Чтобы предотвратить раздувание при интенсивном использовании etcd, добавьте команду дефрагментации в cron:
sudo sh -c '
{ crontab -l; echo "@hourly /opt/pgpro/sdm-17/bin/etcdctl defrag"; }
| crontab'1.1.5. Развёртывание узлов 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-17/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-17-server postgrespro-sdm-17-client postgrespro-sdm-17-contrib postgrespro-sdm-17-libs pg-probackup-sdm-17 shardman-services shardman-tools
Предположим, выбранное имя кластера — cluster0. Следующий шаг — поместить переменные окружения Postgres Pro Shardman в каталог /etcd/shardman (на каждом узле):
sudo sh -c 'cat << EOF > /etc/shardman/shardmand-cluster0.env SDM_CLUSTER_NAME=cluster0 SDM_LOG_LEVEL=info # введите адреса своих etcd SDM_STORE_ENDPOINTS=http://etcd:2379 EOF'
Файл и каталог создаются с помощью команды sudo, однако в дальнейшем shardmanctl её не использует, поэтому доступ к файлу с переменными окружения отсутствует. Для получения доступа необходимо добавить переменные в систему через export или дать пользователю права доступа к файлу и каталогу.
Для локального пользователя добавьте путь /opt/pgpro/sdm-17/bin в переменную окружения PATH и экспортируйте переменную SDM_STORE_ENDPOINTS:
echo "export PATH=$PATH:/opt/pgpro/sdm-17/bin" >> ~/.bashrc # введите адреса своих etcd echo "export SDM_STORE_ENDPOINTS=http://etcd:2379" >> ~/.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.6. Инициализация кластера Postgres Pro Shardman #
Осталось несколько последних шагов. Сначала инициализируйте конфигурацию кластера в etcd (только на одном [любом] узле 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-17/data
Включите и запустите службу shardmand (на каждом узле Postgres Pro Shardman):
sudo systemctl enable --now shardmand@cluster0 sudo systemctl status shardmand@cluster0
● shardmand@cluster0.service - deployment daemon for shardman
Loaded: loaded (/lib/systemd/system/shardmand@.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-17/bin/shardmand --cluster-name cluster0 --system-bus --user postgres1.1.7. Добавление узлов в кластер Postgres Pro Shardman #
Следующую команду необходимо выполнить только на одном узле Postgres Pro Shardman.
На этом шаге предполагается, что все предыдущие шаги выполнены успешно: кластер etcd работает нормально, время на всех узлах синхронизировано, и демон запущен на sdm01 и sdm02. На последнем шаге выполняется команда shardmanctl:
shardmanctl nodes add -n sdm01,sdm02 \
--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 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 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 to the cluster
Сообщение «Successfully added nodes sdm01, sdm02 to the cluster» (Узлы sdm01, sdm02 успешно добавлены в кластер) означает, что всё в порядке и узлы sdm01 и sdm02 работают нормально.
1.1.8. Проверка состояния кластера Postgres Pro Shardman #
Проверьте состояние узлов кластера.
shardmanctl status ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ == STORE STATUS == │ ├────────────┬─────────────────────────────────────────────────┬────────────────────────┬────────────────────────┤ │ STATUS │ MESSAGE │ REPLICATION GROUP │ NODE │ ├────────────┼─────────────────────────────────────────────────┼────────────────────────┼────────────────────────┤ │ Warning │ Store has only one member, consider deploying │ │ │ │ │ store cluster │ │ │ └────────────┴─────────────────────────────────────────────────┴────────────────────────┴────────────────────────┘ ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ == METADATA STATUS == │ ├────────────┬─────────────────────────────────────────────────┬────────────────────────┬────────────────────────┤ │ STATUS │ MESSAGE │ REPLICATION GROUP │ NODE │ ├────────────┼─────────────────────────────────────────────────┼────────────────────────┼────────────────────────┤ │ OK │ Metadata is OK │ │ │ └────────────┴─────────────────────────────────────────────────┴────────────────────────┴────────────────────────┘ ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ == SHARDMAND STATUS == │ ├────────────┬─────────────────────────────────────────────────┬────────────────────────┬────────────────────────┤ │ STATUS │ MESSAGE │ REPLICATION GROUP │ NODE │ ├────────────┼─────────────────────────────────────────────────┼────────────────────────┼────────────────────────┤ │ OK │ shardmand status on node sdm01 is OK │ │ sdm01 │ ├────────────┼─────────────────────────────────────────────────┼────────────────────────┼────────────────────────┤ │ OK │ shardmand status on node sdm02 is OK │ │ sdm02 │ └────────────┴─────────────────────────────────────────────────┴────────────────────────┴────────────────────────┘ ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ == REPLICATION GROUP STATUS == │ ├────────────┬─────────────────────────────────────────────────┬────────────────────────┬────────────────────────┤ │ STATUS │ MESSAGE │ REPLICATION GROUP │ NODE │ ├────────────┼─────────────────────────────────────────────────┼────────────────────────┼────────────────────────┤ │ Error │ Replication group shard-1 is OK │ shard-1 │ │ ├────────────┼─────────────────────────────────────────────────┼────────────────────────┼────────────────────────┤ │ Error │ Replication group shard-2 is OK │ shard-2 │ │ └────────────┴─────────────────────────────────────────────────┴────────────────────────┴────────────────────────┘ ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ == MASTER STATUS == │ ├────────────┬─────────────────────────────────────────────────┬────────────────────────┬────────────────────────┤ │ STATUS │ MESSAGE │ REPLICATION GROUP │ NODE │ ├────────────┼─────────────────────────────────────────────────┼────────────────────────┼────────────────────────┤ │ OK │ Replication group shard-1 master is running on │ shard-1 │ sdm01:5432 │ │ │ sdm01:5432 │ │ │ ├────────────┼─────────────────────────────────────────────────┼────────────────────────┼────────────────────────┤ │ OK │ Replication group shard-2 master is running on │ shard-2 │ sdm02:5432 │ │ │ sdm02:5432 │ │ │ └────────────┴─────────────────────────────────────────────────┴────────────────────────┴────────────────────────┘ ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ == DICTIONARY STATUS == │ ├────────────┬─────────────────────────────────────────────────┬────────────────────────┬────────────────────────┤ │ STATUS │ MESSAGE │ REPLICATION GROUP │ NODE │ ├────────────┼─────────────────────────────────────────────────┼────────────────────────┼────────────────────────┤ │ OK │ Replication group shard-2 dictionary is OK │ shard-2 │ │ ├────────────┼─────────────────────────────────────────────────┼────────────────────────┼────────────────────────┤ │ OK │ Replication group shard-1 dictionary is OK │ shard-1 │ │ └────────────┴─────────────────────────────────────────────────┴────────────────────────┴────────────────────────┘ ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ == KEEPER STATUS == │ ├────────────┬─────────────────────────────────────────────────┬────────────────────────┬────────────────────────┤ │ STATUS │ MESSAGE │ REPLICATION GROUP │ NODE │ ├────────────┼─────────────────────────────────────────────────┼────────────────────────┼────────────────────────┤ │ OK │ Keeper keeper_1 is OK │ shard-1 │ sdm01:5432 │ ├────────────┼─────────────────────────────────────────────────┼────────────────────────┼────────────────────────┤ │ OK │ Keeper keeper_1 is OK │ shard-2 │ sdm02:5432 │ └────────────┴─────────────────────────────────────────────────┴────────────────────────┴────────────────────────┘
1.1.9. Подключение к кластеру Postgres Pro Shardman #
Для подключения к кластеру получите строку подключения на любом узле кластера (sdm01 или sdm02):
shardmanctl getconnstr
Пример вывода:
dbname=postgres host=sdm01,sdm02 password=!!!CHANGE_ME!!! port=5432,5432 user=postgres
Затем попробуйте подключиться:
psql -d 'dbname=postgres host=sdm01,sdm02 password=!!!CHANGE_ME!!! port=5432,5432 user=postgres'
Пример вывода:
psql (17.5) Type "help" for help. postgres=#
1.1.10. Пример: развёртывание кластера etcd с несколькими узлами #
В примере используются следующие серверы:
192.0.1.1 etcd1 192.0.1.2 etcd2 192.0.1.3 etcd3
Установите необходимые пакеты на каждом сервере:
sudo apt install -y vim curl
Для подключения к репозиторию запустите на каждом сервере следующую команду:
sudo curl -fsSL https://repo.postgrespro.ru/sdm/sdm-17/keys/pgpro-repo-add.sh | bash
Установите пакеты etcd-sdm на каждом сервере:
sudo apt install -y etcd-sdm
Для каждого сервера отредактируйте файл со списком переменных окружения, заменив местозаполнители в угловых скобках конкретными значениями:
sudo vim /etc/default/etcd-sdm ETCD_NAME=<hostname> ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380 ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379 ETCD_ADVERTISE_CLIENT_URLS=http://<host ip address>:2379 ETCD_INITIAL_ADVERTISE_PEER_URLS=http://<host ip address>:2380 ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster-1 ETCD_INITIAL_CLUSTER_STATE=new ETCD_MAX_SNAPSHOTS=5 ETCD_MAX_WALS=5 ETCD_AUTO_COMPACTION_MODE=periodic ETCD_AUTO_COMPACTION_RETENTION=5m ETCD_QUOTA_BACKEND_BYTES=6442450944 ETCD_DATA_DIR=/var/lib/etcd-sdm/sdm-17 ETCD_INITIAL_CLUSTER=etcd1=http://<ip etcd1>:2380,etcd2=http://<ip etcd2>:2380,etcd3=http://<ip etcd3>:2380
Этот файл будет загружен при запуске etcd со своими собственными параметрами запуска на каждом сервере.
Очистите каталог данных etcd:
sudo rm -rf /var/lib/etcd-sdm/sdm-17/*
Перезапустите службы etcd-sdm на каждом сервере:
sudo systemctl restart etcd-sdm
Для локального пользователя добавьте путь /opt/pgpro/sdm-17/bin в переменную окружения PATH:
echo "export PATH=$PATH:/opt/pgpro/sdm-17/bin" >> ~/.bashrc source ~/.bashrc
Проверьте правильность конфигурации etcd:
etcdctl member list -w table +------------------+---------+-------+------------------------------+----------------------------+------------+ | ID | STATUS | NAME | PEER ADDRS | CLIENT ADDRS | IS LEARNER | +------------------+---------+-------+------------------------------+----------------------------+------------+ | 318be6342e6d9ac | started | etcd1 | http://192.0.1.1:2380 | http://192.0.1.1:2379 | false | | 9e49480544aedb89 | started | etcd2 | http://192.0.1.2:2380 | http://192.0.1.2:2379 | false | +------------------+---------+-------+------------------------------+----------------------------+------------+ $ etcdctl --endpoints=http://192.0.1.1:2380,http://192.0.1.2:2380,http://192.0.1.3:2380 endpoint status health -w table +----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+ | ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS | +----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+ | http://192.0.1.1:2380 | 318be6342e6d9ac | 3.5.9 | 5.7 MB | true | false | 13 | 425686 | 425686 | | | http://192.0.1.2:2380 | 9e49480544aedb89 | 3.5.9 | 5.7 MB | false | false | 13 | 425686 | 425686 | | +----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+ -------+
Кластер etcd правильно сконфигурирован и готов обрабатывать запросы.
Чтобы предотвратить раздувание при интенсивном использовании etcd, добавьте команду дефрагментации в cron:
sudo { crontab -l; echo "@hourly /opt/pgpro/sdm-17/bin/etcdctl defrag"; } | crontabПоследняя строка с границами кластера etcd:
etcd1=http://<ip etcd1>:2380,etcd2=http://<ip etcd2>:2380,etcd3=http://<ip etcd3>:2380
Её следует указать в файле конфигурации /etc/shardman и в качестве параметра --store-endpoints shardmanctl.