Как настроить pgpool?

Привет. Возникла необходимость отправлять запросы SELECT на реплику. В качестве балансировщика настраиваю PG-POOL, поднял тестовый стенд в докере, текст docker-compose ниже.
Возникают два вопроса:
1) При тестировании подаю SELECT, запрос уходит на реплику, всё ок. Выключаю (stop) контейнер postgres с репликой. Соединение psql разрывается и восстанавливается, подаю SELECT - запрос уходит на master. Стартую реплику. подаю SELECT, все последующие запросы уходят на master. Вроде бы должно помочь statement_level_load_balance, но ничего не меняется. Хочется чтобы при поднятии репилики запросы уходили на репилику. Может кто-то сталкивался?

2) Не пойму как устроена аутентификация и авторизация обычных пользователей (которые уже возможно созданы в БД). В pgpool есть встроенные механизм аутентификации - файл pool_passwd, в него записываются пользователи и пароли пользователей которые могут подключаться к pgpool(?). Далее если в пользователь есть в БД именно с этим-же паролем он может работать с бд в рамках своих привилегий. Такой результат я получил, тестами. Верно? А нет возможности когда какой-то служебный пользователь ходит в БД и делает проверку пользователь/пароль который он получил от pgpool когда пользователь начал подключаться? Чтобы не создавать разные сущности с одними и теми же данными.
В существующей схеме мне надо создавать одного и того-же пользователя в двух разным местах .Если я всё правильно понимаю.

version: '2'

services:
  postgresql-master:
    image: 'docker.io/bitnami/postgresql:14'
    ports:
      - '6432:5432'
    volumes:
      - 'postgresql_master_data:/bitnami/postgresql'
    environment:
      - POSTGRESQL_PGAUDIT_LOG=READ,WRITE
      - POSTGRESQL_LOG_HOSTNAME=true
      - POSTGRESQL_REPLICATION_MODE=master
      - POSTGRESQL_REPLICATION_USER=repl_user
      - POSTGRESQL_REPLICATION_PASSWORD=repl_password
      - POSTGRESQL_USERNAME=postgres
      - POSTGRESQL_DATABASE=postgres
      - POSTGRESQL_PASSWORD=mypassword
  postgresql-slave:
    image: 'docker.io/bitnami/postgresql:14'
    ports:
      - '7432:5432'
    depends_on:
      - postgresql-master
    environment:
      - POSTGRESQL_USERNAME=postgres
      - POSTGRESQL_PASSWORD=mypassword
      - POSTGRESQL_MASTER_HOST=postgresql-master
      - POSTGRESQL_PGAUDIT_LOG=READ,WRITE
      - POSTGRESQL_LOG_HOSTNAME=true
      - POSTGRESQL_REPLICATION_MODE=slave
      - POSTGRESQL_REPLICATION_USER=repl_user
      - POSTGRESQL_REPLICATION_PASSWORD=repl_password
      - POSTGRESQL_MASTER_PORT_NUMBER=5432
  pgpool:
    image: docker.io/bitnami/pgpool:4
    ports:
      - 5432:5432
    depends_on:
      - postgresql-slave
    volumes:
     - ./conf/extra.conf:/config/extra.conf
     - ./ssl:/opt/bitnami/pgpool/certs
    environment:
     - PGPOOL_BACKEND_NODES=0:postgresql-master:5432,1:postgresql-slave:5432
     - PGPOOL_USER_CONF_FILE=/config/extra.conf
     - PGPOOL_ENABLE_TLS=yes
     - PGPOOL_TLS_CERT_FILE=/opt/bitnami/pgpool/certs/server.crt
     - PGPOOL_TLS_KEY_FILE=/opt/bitnami/pgpool/certs/server.key
#PGPOOL_POSTGRES_USERNAME: Postgres administrator user name, this will be use to allow postgres admin authentication through Pgpool.
#PGPOOL_POSTGRES_PASSWORD: Password for the user set in PGPOOL_POSTGRES_USERNAME environment variable. No defaults.
# Имя пользователя поторым подключается PGPOOL к postgres
     - PGPOOL_POSTGRES_USERNAME=postgres
     - PGPOOL_POSTGRES_PASSWORD=mypassword
#PGPOOL_ADMIN_USERNAME: Username for the pgpool administrator. No defaults.
#PGPOOL_ADMIN_PASSWORD: Password for the user set in PGPOOL_ADMIN_USERNAME environment variable. No defaults.
#Имя пользователя для администрирования PGPOOL
     - PGPOOL_ADMIN_USERNAME=PGPOOL_ADMIN_USERNAME
     - PGPOOL_ADMIN_PASSWORD=PGPOOL_ADMIN_PASSWORD
#PGPOOL_HEALTH_CHECK_USER: Specifies the PostgreSQL user name to perform health check. Defaults to value set in PGPOOL_SR_CHECK_USER.
#PGPOOL_HEALTH_CHECK_PASSWORD: Specifies the PostgreSQL user password to perform health check. Defaults to value set in PGPOOL_SR_CHECK_PASSWORD.
#любой пользователь read-olny
     - PGPOOL_SR_CHECK_USER=postgres
     - PGPOOL_SR_CHECK_PASSWORD=mypassword
#    - PGPOOL_AUTHENTICATION_METHOD=md5
    healthcheck:
      test: ["CMD", "/opt/bitnami/scripts/pgpool/healthcheck.sh"]
      interval: 10s
      timeout: 5s
      retries: 5
volumes:
  postgresql_master_data:
    driver: local


extra.conf
log_destination = 'syslog,stderr'
log_statement = on
log_per_node_statement=on
statement_level_load_balance=1
backend_weight0 = 0
backend_weight1 = 1
  • Вопрос задан
  • 462 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы