Диагностика проблемы
This commit is contained in:
@@ -126,6 +126,8 @@
|
|||||||
- `pxf-env.sh` по‑прежнему копируется в `PXF_BASE`, чтобы `/start_gpdb.sh` не пытался выполнять
|
- `pxf-env.sh` по‑прежнему копируется в `PXF_BASE`, чтобы `/start_gpdb.sh` не пытался выполнять
|
||||||
`pxf cluster prepare` на непустом `PXF_BASE`;
|
`pxf cluster prepare` на непустом `PXF_BASE`;
|
||||||
- healthcheck `greenplum` ждёт не только PXF, но и наличие `extension pxf`.
|
- healthcheck `greenplum` ждёт не только PXF, но и наличие `extension pxf`.
|
||||||
|
- добавлен экспорт `PGPASSWORD` для `pxf cluster start`, чтобы `docker compose stop/start`
|
||||||
|
не ломал запуск из‑за `password authentication failed` для `gpadmin`.
|
||||||
|
|
||||||
### Если ошибка всё ещё возникает
|
### Если ошибка всё ещё возникает
|
||||||
|
|
||||||
@@ -142,3 +144,52 @@
|
|||||||
- `pxf/init/10_pxf_bookings.sh` (ensure‑логика)
|
- `pxf/init/10_pxf_bookings.sh` (ensure‑логика)
|
||||||
- `pxf/init/start_greenplum_with_pxf.sh` (старт контейнера)
|
- `pxf/init/start_greenplum_with_pxf.sh` (старт контейнера)
|
||||||
- `README.md` (раздел «Greenplum + PXF: свой образ»)
|
- `README.md` (раздел «Greenplum + PXF: свой образ»)
|
||||||
|
|
||||||
|
## 10. Известная проблема: после `docker compose stop/start` Greenplum может упасть (auth для PXF)
|
||||||
|
|
||||||
|
### Симптом
|
||||||
|
|
||||||
|
После `docker compose stop`, затем `docker compose start` контейнер `greenplum` иногда уходит в `Exited (1)`.
|
||||||
|
В логах видно, что GPDB поднялся, но упал на старте PXF:
|
||||||
|
|
||||||
|
- `INFO - pxf cluster start`
|
||||||
|
- `ERROR: Could not connect to GPDB`
|
||||||
|
- `FATAL: password authentication failed for user "gpadmin"`
|
||||||
|
|
||||||
|
### Текущее понимание причины (почему это “иногда”)
|
||||||
|
|
||||||
|
1) При старте GPDB образ `woblerr/greenplum` генерирует/дописывает `pg_hba.conf` на persistent volume.
|
||||||
|
2) В `pg_hba.conf` присутствует trust‑правило для **конкретного IP** контейнера в docker‑сети
|
||||||
|
(пример из диагностики: `host all gpadmin 172.21.0.2/32 trust`).
|
||||||
|
3) После `docker compose stop/start` Docker может выдать контейнеру **другой IP** (например, `172.21.0.3`).
|
||||||
|
Тогда trust‑правило больше не подходит, и подключение начинает идти по `md5`.
|
||||||
|
4) `pxf cluster start` подключается к GPDB по TCP на `host=gpdbsne` (hostname контейнера),
|
||||||
|
то есть попадает именно в `pg_hba.conf` (а не в local‑auth).
|
||||||
|
5) В результате при “не совпавшем IP” получаем `md5` + пароль (возможно пустой/не тот) → падение на `28P01`.
|
||||||
|
|
||||||
|
Эта проблема выглядит флапающей, потому что IP после `stop/start` иногда совпадает с захардкоженным trust‑/32,
|
||||||
|
а иногда нет.
|
||||||
|
|
||||||
|
### Как подтвердить при следующем воспроизведении
|
||||||
|
|
||||||
|
1) Посмотреть логи `greenplum`:
|
||||||
|
`docker compose logs --tail=200 greenplum`
|
||||||
|
|
||||||
|
2) Найти реальный IP клиента в master‑логах GPDB (на томе):
|
||||||
|
`Password does not match ...` обычно содержит адрес вида `172.21.0.X`.
|
||||||
|
|
||||||
|
3) Сравнить его с trust‑строкой в `pg_hba.conf` на томе:
|
||||||
|
`/data/master/gpseg-1/pg_hba.conf`
|
||||||
|
|
||||||
|
Если IP в ошибке (например, `172.21.0.3`) **не** совпадает с trust‑/32 (например, `172.21.0.2/32`) —
|
||||||
|
это почти наверняка корень падения.
|
||||||
|
|
||||||
|
### Что с этим делать дальше (варианты решения, без реализации здесь)
|
||||||
|
|
||||||
|
Основная цель — убрать зависимость от “случайного IP после stop/start”:
|
||||||
|
|
||||||
|
- заставить `pxf cluster start` подключаться к GPDB через `127.0.0.1` (тогда работает существующий trust на localhost);
|
||||||
|
- или перестать добавлять в `pg_hba.conf` trust на конкретный `172.21.0.2/32` и заменить на более стабильное правило
|
||||||
|
(например, на подсеть docker‑сети или на `samehost`);
|
||||||
|
- или закрепить IP контейнера в compose (static IP), чтобы он не “плавал”;
|
||||||
|
- или отказаться от `stop/start` в пользу сценария, который не меняет сетевое окружение (но это хуже для UX студентов).
|
||||||
|
|||||||
@@ -3,6 +3,11 @@ set -euo pipefail
|
|||||||
|
|
||||||
ensure_script="/opt/pxf-scripts/ensure_pxf_bookings.sh"
|
ensure_script="/opt/pxf-scripts/ensure_pxf_bookings.sh"
|
||||||
|
|
||||||
|
# PXF CLI использует libpq, без PGPASSWORD после stop/start возможна ошибка auth.
|
||||||
|
if [ -z "${PGPASSWORD:-}" ]; then
|
||||||
|
export PGPASSWORD="${GREENPLUM_PASSWORD:-gpadmin}"
|
||||||
|
fi
|
||||||
|
|
||||||
ensure_pxf_extension() {
|
ensure_pxf_extension() {
|
||||||
local gp_user="${GREENPLUM_USER:-gpadmin}"
|
local gp_user="${GREENPLUM_USER:-gpadmin}"
|
||||||
local gp_db="${GREENPLUM_DATABASE_NAME:-gp_dwh}"
|
local gp_db="${GREENPLUM_DATABASE_NAME:-gp_dwh}"
|
||||||
|
|||||||
Reference in New Issue
Block a user