Перейти к основному содержимому

Часто встречающиеся проблемы и пути их устранения

Ошибки в процессе установки СУБД Pangolin

В разделе описаны часто встречающиесяс проблемы при установке СУБД Pangolin.

Не читается файл лицензий

Возникающая ошибка:

Check license file "/opt/pangolin_license/license.json" : file is not found

Решение:

Проверьте доступность под пользователем postgres файла лицензии:

  1. Указание в переменной PG_LICENSE_PATH=/opt/pangolin_license/:

    [postgres@srv ~]$ echo $PG_LICENSE_PATH
    /opt/pangolin_license/

    При необходимости исправьте:

    export PG_LICENSE_PATH=/opt/pangolin_license/
  2. Доступность файла лицензии:

    [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:

  1. Перечитать конфигурационный файл компонента:

    /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml reload clustername
  2. Перезапустить узлы кластера:

    /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml restart clustername
  3. Если статус остался прежним (к примеру, на реплике), рекомендуется ее проинициализировать:

    /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

Решение:

  1. Выполните команду:

    etcdctl rm /service/clustername/initialize
  2. Перезапустите Pangolin Manager:

    sudo systemctl restart pangolin-manager

Cбой etcd. Узлы кластера сменили роли

Сообщения в логе имеют вид:

INFO: following a different leader because i am not the healthiest node

Решение:

  1. При одном запущенном Pangolin Manager, выполните команду:

    etcdctl rm /service/clustername/optime/leader
  2. Перезапустите 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

Сценарии, при которых возникает ошибка:

  1. При использовании аргументов --generate-config --dsn, например:

    patroni --generate-config --dsn "postgresql://[fd12:3456:789a::1],[fd42:1c2b:3e4d:5f6a::1234]/somedb"

    В этом случае будет выведена ошибка исключения:

    UNEXPECTED EXCEPTION: ValueError('Invalid IPv6 URL')

  2. Если в параметре 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 ...'