Диагностика проблемы
This commit is contained in:
@@ -126,6 +126,8 @@
|
||||
- `pxf-env.sh` по‑прежнему копируется в `PXF_BASE`, чтобы `/start_gpdb.sh` не пытался выполнять
|
||||
`pxf cluster prepare` на непустом `PXF_BASE`;
|
||||
- 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/start_greenplum_with_pxf.sh` (старт контейнера)
|
||||
- `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 студентов).
|
||||
|
||||
Reference in New Issue
Block a user