Часто встречающиеся проблемы и пути их устранения
Ошибки в процессе установки СУБД 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/07/data/pg_hba.conf"
2024-04-12 12:25:50.689 MSK [60403] СООБЩЕНИЕ: неверный метод проверки подлинности " "
Решение:
Вероятно, были скопированы лишние символы при вставке строк из инструкции. Нужно исправить или удалить проблемные строки и заново ввести их вручную, например, используя текстовый редактор.
Ошибка инициализации СУБД
Возникающая ошибка:
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.3
Список переменных использующий 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.
Предупреждение при вызове команд etcd и ошибка выполнения alias
При использовании etcd версии 3.6.x и выше переменная окружения ETCDCTL_API=3 не применяется. Если данная переменная осталась в файле .bash_profile или используется в alias members, health, elist, при вызове соответствующих команд может выводиться предупреждение:
"msg":"unrecognized environment variable","environment-variable":"ETCDCTL_API=3"
Также при использовании alias elist команда проверки состояния etcd может завершаться ошибкой аутентификации. Это связано с изменением требований безопасности для операций gRPC maintenance при включенном RBAC.
Пример запроса вызывающего ошибку:
ETCDCTL_API=3 etcdctl --endpoints={master_host}:2379,{replica_host}:2379,{arbiter_host}:2379 --cert="/pg_ssl/etcd.crt" --key="/pg_ssl/etcd.key" --cacert="/pg_ssl/root.crt" endpoint status -w table --cluster
Пример корректного запроса:
etcdctl --endpoints={master_host}:2379,{replica_host}:2379,{arbiter_host}:2379 --cert="/pg_ssl/etcd.crt" --key="/pg_ssl/etcd.key" --user=root endpoint status -w table --cluster
Решение:
-
Удалите использование переменной
ETCDCTL_API=3из файла.bash_profile, в том числе из aliasmembersиhealth, если она там присутствует. -
Удалите alias
elistиз.bash_profile. -
Перечитайте файл
.bash_profile:source ~/.bash_profile -
При выполнении запросов к
RPC maintenanceпри включенном RBAC необходимо указывать пользователя, обладающего правами для выполнения данного запроса, с помощью параметра--user=.
Начиная с установок, в которых используется etcd версии 3.6.x и выше, скрипты автоматизации Pangolin не добавляют переменную ETCDCTL_API=3 и alias elist в .bash_profile.
Несоответствие идентификатора кластера
После запуска кластера возможно появление ошибки в логах sudo journalctl -xe:
sudo journalctl -xe:
etcd[1667]: request cluster ID mismatch (got {hash} want {hash})
Решение:
Остановите кластер и пересоздайте директорию /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
Сбой 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 ...'
-