Часто встречающиеся проблемы и пути их устранения
Ошибки в процессе установки СУБД Pangolin
В разделе описаны часто встречающиесяс проблемы при установке СУБД Pangolin.
Не читается файл лицензий
Возникающая ошибка:
Check license file "/opt/pangolin_license/license.json" : file is not found
Решение:
Проверьте доступность под пользователем postgres
файла лицензии:
-
Указание в переменной
PG_LICENSE_PATH=/opt/pangolin_license/
:[postgres@srv ~]$ echo $PG_LICENSE_PATH
/opt/pangolin_license/При необходимости исправьте:
export PG_LICENSE_PATH=/opt/pangolin_license/
-
Доступность файла лицензии:
[postgres@srv ~]$ ls -la $PG_LICENSE_PATH
total 12
drwxr-xr-x 2 postgres postgres 4096 Apr 12 12:17 .
drwxr-xr-x. 5 root root 4096 Apr 12 12:14 ..
-rw-r--r-- 1 postgres postgres 500 Apr 12 12:17 license_trial_202407.json
Скопированы некорректные символы в конфигурационный файл
После запуска в логе появляется запись об ошибках чтения конфигурационного файла в $PGDATA/log/*
. Например:
2024-04-12 12:25:50.689 MSK [60403] КОНТЕКСТ: строка 100 файла конфигурации "/pgdata/0{base_version}/data/pg_hba.conf"
2024-04-12 12:25:50.689 MSK [60403] СООБЩЕНИЕ: неверный метод проверки подлинности " "
Решение:
Скорее всего привнесены лишние символы при копировании строк из инструкции. Необходимо либо скорректировать, либо удалить проблемные строки и ввести их с клавиатуры например через vi.
Ошибка инициализации СУБД
Возникающая ошибка:
initdb: error while loading shared libraries: libjsoncpp.so.1: cannot open shared object file: No such file or directory
Необходимо установить пакет:
sudo apt install libjsoncpp1
Ошибка работы с unzip утилитой
Если возникла ошибка -bash: unzip: command not found
– необходимо установить утилиту unzip
и вернуться к шагу с распаковкой. Пример команды установки unzip
:
sudo apt-get install unzip
Конфликт идентификаторов создаваемых пользователей/групп
При возникновении конфликтов идентификаторов создаваемых пользователей/групп во время установки пакета серверной или клиентской части СУБД (пример ошибки: error: group with gid=26 already exists
), переопределите переменные через изменение значений. Пример изменения uid
/gid
для пользователя postgres:
sudo POSTGRES_USER_GUID=111 POSTGRES_GROUP_GUID=111 dnf install pangolin-dbms-7.1
Список переменных использующий uid
/gid
и их значения по умолчанию указаны в блоке «Подготовка к ручной установке» раздела «Установка».
Статус состояния узла «Pending restart»
Если по окончанию установки компонента, при просмотре членов кластера и их состояния, появилось значение «Pending restart» необходимо выполнить следующие команды под пользователем postgres:
-
Перечитать конфигурационный файл компонента:
/opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml reload clustername
-
Перезапустить узлы кластера:
/opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml restart clustername
-
Если статус остался прежним (к примеру, на реплике), рекомендуется ее проинициализировать:
/opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml reinit clustername
Ошибки etcd
В разделе рассматриваются проблемы возникающие при работе компонента etcd.
Несоответствие идентификатора кластера
После запуска кластера возможно появление ошибки в логах sudo journalctl -xe
:
sudo journalctl -xe:
etcd[1667]: request cluster ID mismatch (got {хеш} want {хеш})
Решение:
Остановите кластер и пересоздайте директорию /var/lib/etcd
:
sudo systemctl stop etcd.service
sudo rm -rf /var/lib/etcd/
sudo mkdir /var/lib/etcd
sudo chown -R etcd:etcd /var/lib/etcd/
sudo systemctl start etcd.service
Несоответствие идентификатора узлов системы
Пример лога:
CRITICAL: system ID mismatch, node pg02 belongs to a different cluster: 6792170493505963560 != 6792187323051185862
Решение:
-
Выполните команду:
etcdctl rm /service/clustername/initialize
-
Перезапустите Pangolin Manager:
sudo systemctl restart pangolin-manager
Cбой etcd. Узлы кластера сменили роли
Сообщения в логе имеют вид:
INFO: following a different leader because i am not the healthiest node
Решение:
-
При одном запущенном Pangolin Manager, выполните команду:
etcdctl rm /service/clustername/optime/leader
-
Перезапустите Pangolin Manager:
sudo systemctl restart pangolin-manager
Ошибки Pangolin Manager
Ошибка разбора IPv6-адреса в DSN-строке
Описание проблемы:
При использовании компонента Pangolin Manager версии ниже 2.2.1 на ОС SberLinux 9.6 и других ОС с установленной версией пакета urllib
3.9.21 (зависимость python3
), возможно возникновение ошибки:
UNEXPECTED EXCEPTION: ValueError('Invalid IPv6 URL')
Проблема вызвана изменениями в модуле urllib.parse.urlparse
в новых версиях Python, которые повлияли на обработку IPv6/IPvFuture-адресов в соответствии со стандартом RFC 3986. В результате квадратные скобки []
в имени хоста допускаются только для корректных IPv6/IPvFuture-адресов.
В Patroni (ядро Pangolin Manager) urllib.parse.urlparse
используется для разбора DSN-строк PostgreSQL, начинающихся с postgres://
или postgresql://
. Ядро PostgreSQL позволяет указывать несколько хостов через запятую, например:
postgresql://[fd12:3456:789a::1],[fd42:1c2b:3e4d:5f6a::1234]/db
Сценарии, при которых возникает ошибка:
-
При использовании аргументов
--generate-config --dsn
, например:patroni --generate-config --dsn "postgresql://[fd12:3456:789a::1],[fd42:1c2b:3e4d:5f6a::1234]/somedb"
В этом случае будет выведена ошибка исключения:
UNEXPECTED EXCEPTION: ValueError('Invalid IPv6 URL')
-
Если в параметре
primary_conninfo
конфигурации СУБД указана DSN-строка с несколькими IPv6-адресами в формате, не соответствующем новым правилам. Этот сценарий маловероятен, так как Patroni по умолчанию формируетprimary_conninfo
в форматеключ=значение
. Для воспроизведения потребуется ручное изменение конфигурации СУБД.
Решение:
-
Обновить Pangolin Manager до версии 2.2.1.
-
Для конфигураций, где обновление невозможно:
-
избегать использования DSN-строк с несколькими IPv6-адресами, разделенными запятыми, в параметрах запуска и конфигурации;
-
использовать формат подключения СУБД в формате
ключ=значение
, например:primary_conninfo = 'user=patroni host=localhost port=5433 sslmode=verify-ca ...'
-