|
pgbouncer настройка
|
|||
---|---|---|---|
#18+
Добрый день. На старом железе тестовая система: centos8, nginx, php-fpm, postgresql-12, pgbouncer. Последний не получается настроить. Скрипт php такой: ... $dsn = "host=127.0.0.1 port=6432 dbname=postgres user=postgres password=***"; // 1. так работает $dsn = "host=/var/run/pgbouncer port=6432 dbname=postgres user=postgres password=***"; // 2. не работает $conn = pg_connect($dsn); //------------------------------------------------------------------------------------------------------------------------------------------- $t02 = (microtime(true) - $start_time)*1000; if ($d00 !== 'upd') { $in1 = pg_query($conn, "INSERT INTO public.v1_bouncer (metka) VALUES ('".$d00."') RETURNING idv1;"); $t03 = (microtime(true) - $start_time)*1000; $rid = pg_fetch_row($in1); $t22 = $t02-$t01; $in2 = pg_query($conn, "INSERT INTO public.v2_timing (fk_idv1, t01, t02, t03) VALUES ($rid[0],$t01,$t22,$t03-$t02);"); $t04 = (microtime(true) - $start_time)*1000; $tt = $t04-$t03; echo '{"0":"'.$d00.'", "1":"'.$tt.'", "2":"'.$rid[0].'", "3":"'.$t22.'"}'; //------------------------------------------------------------------------------------------------------------------------------------------- ... Первый вариант строки подключения - работает. В базу складывает тайминги: время на установление коннекта ~ 60ms. Второй вариант: через сокет - не работает. Менял конфиг баунсера, права .. походу накосячил больше. Текущий конфиг: - - - [databases] postgres=host=127.0.0.1 port=5432 dbname=postgres user=postgres password=*** - - - []# ls -la /var/run/postgresql/ итого 4 drwxr-xr-x 2 postgres postgres 80 мая 20 11:32 . drwxr-xr-x 48 root root 1380 мая 20 11:34 .. srwxrwxrwx 1 postgres postgres 0 мая 20 17:20 .s.PGSQL.5432 -rw------- 1 postgres postgres 64 мая 20 17:20 .s.PGSQL.5432.lock []# ---------------------------+--------------------------------------------------------+------------ job_name | pgbouncer | no conffile | /etc/pgbouncer/pgbouncer.ini | yes logfile | /var/log/pgbouncer/pgbouncer.log | yes pidfile | /var/run/pgbouncer/pgbouncer.pid | no listen_addr | 127.0.0.1 | no listen_port | 6432 | no so_reuseport | 0 | no listen_backlog | 128 | no unix_socket_dir | /var/run/pgbouncer | no unix_socket_mode | 511 | no unix_socket_group | | no auth_type | plain | yes auth_file | /etc/pgbouncer/userlist.txt | yes auth_hba_file | | yes auth_user | | yes auth_query | SELECT usename, passwd FROM pg_shadow WHERE usename=$1 | yes pool_mode | transaction | yes max_client_conn | 100 | yes default_pool_size | 20 | yes min_pool_size | 0 | yes reserve_pool_size | 0 | yes reserve_pool_timeout | 5 | yes max_db_connections | 0 | yes max_user_connections | 0 | yes syslog | 0 | yes syslog_facility | daemon | yes syslog_ident | pgbouncer | yes user | | no autodb_idle_timeout | 3600 | yes server_reset_query | DISCARD ALL | yes server_reset_query_always | 0 | yes server_check_query | select 1 | yes server_check_delay | 30 | yes server_fast_close | 0 | yes query_timeout | 0 | yes query_wait_timeout | 120 | yes client_idle_timeout | 0 | yes client_login_timeout | 60 | yes idle_transaction_timeout | 0 | yes server_lifetime | 3600 | yes server_idle_timeout | 600 | yes server_connect_timeout | 15 | yes server_login_retry | 15 | yes server_round_robin | 0 | yes suspend_timeout | 10 | yes ignore_startup_parameters | | yes disable_pqexec | 0 | no dns_max_ttl | 15 | yes dns_nxdomain_ttl | 15 | yes dns_zone_check_period | 0 | yes resolv_conf | | no max_packet_size | 2147483647 | yes pkt_buf | 4096 | no sbuf_loopcnt | 5 | yes tcp_defer_accept | 1 | yes tcp_socket_buffer | 0 | yes tcp_keepalive | 1 | yes tcp_keepcnt | 0 | yes tcp_keepidle | 0 | yes tcp_keepintvl | 0 | yes verbose | 0 | yes admin_users | postgres, eax | yes stats_users | postgres | yes stats_period | 60 | yes log_stats | 1 | yes log_connections | 1 | yes log_disconnections | 1 | yes log_pooler_errors | 1 | yes application_name_add_host | 0 | yes client_tls_sslmode | disable | no client_tls_ca_file | | no client_tls_cert_file | | no client_tls_key_file | | no client_tls_protocols | all | no client_tls_ciphers | fast | no client_tls_dheparams | auto | no client_tls_ecdhcurve | auto | no server_tls_sslmode | disable | no server_tls_ca_file | | no server_tls_cert_file | | no server_tls_key_file | | no server_tls_protocols | all | no server_tls_ciphers | fast | no - - - Будет ли выигрыш, если сделать и postgres и pgbouncer на сокетах? Подскажите как правильно, плиз. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 18:14 |
|
pgbouncer настройка
|
|||
---|---|---|---|
#18+
Alex_Wong Будет ли выигрыш, если сделать и postgres и pgbouncer на сокетах? Пара процентов на CPU если у вас тысяч 30 запросов в секунду. Конкретизируйте это своё "не работает". ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 19:38 |
|
pgbouncer настройка
|
|||
---|---|---|---|
#18+
Melkij, не работает - не пишет в базу, как при первой $dsn строке, log php: ... "PHP message: PHP Warning: pg_connect(): Unable to connect to PostgreSQL server: could not connect to server: Not a directory Is the server running locally and accepting - - - т.е. в принципе уйти от накладных в ~60ms на установку конекта не получится, - это норма? Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 20:56 |
|
pgbouncer настройка
|
|||
---|---|---|---|
#18+
Melkij, ещё такая строка в логе: connections on Unix domain socket "/var/run/pgbouncer/.s.PGSQL.6432/.s.PGSQL.6432"? in /web/sites/mysite.com ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 21:02 |
|
pgbouncer настройка
|
|||
---|---|---|---|
#18+
Alex_Wong "PHP message: PHP Warning: pg_connect(): Unable to connect to PostgreSQL server: could not connect to server: Not a directory Is the server running locally and accepting Ну? Вы проверили? Существует такая директория? Там файл сокета есть? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 21:15 |
|
pgbouncer настройка
|
|||
---|---|---|---|
#18+
Melkij, в папке var/run/pgbouncer два файла: pgbouncer.pid _ 6 байт .s.PGSQL.6432 _ 0 байт ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 21:23 |
|
pgbouncer настройка
|
|||
---|---|---|---|
#18+
Alex_Wong, "/var/run/pgbouncer/.s.PGSQL.6432/.s.PGSQL.6432" не пойму, два раза? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 21:26 |
|
pgbouncer настройка
|
|||
---|---|---|---|
#18+
Alex_Wong, изменил строку (убрал port): $dsn = "host=/var/run/pgbouncer port=6432 dbname=postgres user=postgres password=***"; сделал так: $dsn = "host=/var/run/pgbouncer dbname=postgres user=postgres password=***"; не работает, но уже ошибка в логе такая: connections on Unix domain socket "/var/run/pgbouncer/.s.PGSQL.5432"? т.е. .s.PGSQL.5432 вместо .s.PGSQL.6432 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 21:43 |
|
pgbouncer настройка
|
|||
---|---|---|---|
#18+
Alex_Wong, - - - поменял в /etc/pgbouncer/pgbouncer.ini на: unix_socket_dir = /tmp pidfile = /tmp/pgbouncer.pid - - - строку подключения в php коде сменил с $dsn = "host=/var/run/pgbouncer dbname=postgres user=postgres password=***"; на: $dsn = "host=/tmp port=6432 dbname=postgres user=postgres password=***"; - - - Теперь в php_логе пишет: Is the server running locally and accepting connections on Unix domain socket "/tmp/.s.PGSQL.6432"? Что и как можно ещё проверить? Thanks. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2020, 12:34 |
|
pgbouncer настройка
|
|||
---|---|---|---|
#18+
Alex_Wong, 1)файл /tmp/.s.PGSQL.6432 есть? 2)pgbouncer рестартовали после смены unix_socket_dir ? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2020, 14:53 |
|
pgbouncer настройка
|
|||
---|---|---|---|
#18+
Maxim Boguk, 1. Да, такой файл есть, собственно, как и для случая c /var/run/pgbouncer (там тоже был) здесь, с /tmp повторилась та-же ситуация ... 2. через stop / start : systemctl stop pgbouncer нашёл такое: reddit.com/r/PostgreSQL/comments/c1u690/trouble_connecting_to_pgbouncer_by_unix_sockets/ типа: A pgbouncer to postgresql group, ran "chmod g+7 /var/run/postgresql", changed pgbouncer.ini to use /var/run/postgresql не знаю мой ли это случай, но так понял, что надо вместо моих двух попыток с: /var/run/pgbouncer и /tmp - - - делать так: /var/run/postgresql ? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2020, 15:23 |
|
pgbouncer настройка
|
|||
---|---|---|---|
#18+
Alex_Wong, А вы через psql -h /tmp -p 6432 -U postgres при запуске от пользователя от которого php работает можете соединится с базой? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2020, 15:56 |
|
pgbouncer настройка
|
|||
---|---|---|---|
#18+
Maxim Boguk, начал делать через /var/run/postgresql сейчас верну на /tmp и по-пробую .. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2020, 16:03 |
|
pgbouncer настройка
|
|||
---|---|---|---|
#18+
Maxim Boguk, - - - так, откатил на: /tmp перезапустил, вижу, что создались два файла: /tmp/pgbouncer.pid (содержимое - номер, который совпадает с тем, что показывает systemctl status pgbouncer) /tmp/.s.PGSQL.6432 (пустой) - - - набрал в терминале: #psql -h /tmp -p 6432 -U postgres ввёл пароль пользователя postgres, получил postgres=# - - - при запуске от пользователя от которого php работает - не уверен, что в этом разобрался ... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2020, 16:23 |
|
pgbouncer настройка
|
|||
---|---|---|---|
#18+
Alex_Wong, - - - postgres=# \conninfo Вы подключены к базе данных "postgres" как пользователь "postgres" через сокет в "/tmp", порт "6432". postgres=# ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2020, 16:28 |
|
pgbouncer настройка
|
|||
---|---|---|---|
#18+
Alex_Wong Alex_Wong, - - - postgres=# \conninfo Вы подключены к базе данных "postgres" как пользователь "postgres" через сокет в "/tmp", порт "6432". postgres=# судя по Теперь в php_логе пишет: Is the server running locally and accepting connections on Unix domain socket "/tmp/.s.PGSQL.6432"? соединяется оно куда надо... а вот почему его туда не пускает... 1)от какого пользователя у вас php-fpm работает? 2)вы точно от этого пользователя psql успешно запустили а не от postgres или root или еще кого? 3)у вас SELinux не включен? (а то там через политики такого можно назапрещать что рад не будешь) в общем это не к базе вопрос вообще... а к настройкам вашей системы... позовите опытного сисадмина в помощь... который strace хотя бы умеет. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2020, 17:19 |
|
pgbouncer настройка
|
|||
---|---|---|---|
#18+
Maxim Boguk, - - - 3. SELinux не включен по первым двум вопросам, Вы правы, - нет уверенности .. да, я на базу не грешу, это понятно, странно, что с $dsn = "host=127.0.0.1 port 6432 ..." - работает, а вот так: $dsn = "host=/tmp port 6432 ..." - уже нет, - - - спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2020, 17:50 |
|
pgbouncer настройка
|
|||
---|---|---|---|
#18+
Maxim Boguk, - - - 1)от какого пользователя у вас php-fpm работает? - nginx ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2020, 18:26 |
|
pgbouncer настройка
|
|||
---|---|---|---|
#18+
Maxim Boguk, - - - [root@mgm toor]# ps -ef | fgrep php-fpm root 1225 1 0 16:45 ? 00:00:00 php-fpm: master process (/etc/opt/remi/php74/php-fpm.conf) nginx 1296 1225 0 16:45 ? 00:00:00 php-fpm: pool www nginx 1297 1225 0 16:45 ? 00:00:00 php-fpm: pool www nginx 1299 1225 0 16:45 ? 00:00:00 php-fpm: pool www root 14776 9957 0 18:39 pts/0 00:00:00 grep -F --color=auto php-fpm [root@mgm toor]# - - - ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2020, 18:42 |
|
pgbouncer настройка
|
|||
---|---|---|---|
#18+
Maxim Boguk, - - - 2)вы точно от этого пользователя psql успешно запустили а не от postgres или root или еще кого? - - - $ sudo -u nginx psql -h /tmp -p 6432 -U postgres пароль: ввёл пароль для postgres could not change directory to "/home/hook": Отказано в доступе Password for user postgres: psql (12.2) Type "help" for help. postgres=# - - - ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2020, 19:28 |
|
pgbouncer настройка
|
|||
---|---|---|---|
#18+
Maxim Boguk, - добрый день, создал группу и поместил туда пользователя, от которого работает php-fpm, т.е. nginx добавил в эту группу текущего пользователя папки и дал этой новой группе права на папку (home/hook) - так и не заработало, в логе: /var/log/pgbouncer.log когда запускаю: $ sudo -u nginx psql -h /tmp -p 6432 -U postgres пишет такое: 2020-05-24 18:05:50.405 EEST [1235] LOG C-0x557be8493e70: postgres/postgres@unix(10737):6432 login attempt: db=postgres user=postgres tls=no 2020-05-24 18:05:50.406 EEST [1235] LOG C-0x557be8493e70: postgres/postgres@unix(10737):6432 closing because: client unexpected eof (age=0s) 2020-05-24 18:05:56.238 EEST [1235] LOG C-0x557be8493e70: postgres/postgres@unix(10737):6432 login attempt: db=postgres user=postgres tls=no 2020-05-24 18:06:33.708 EEST [1235] LOG stats: 0 xacts/s, 0 queries/s, in 0 B/s, out 0 B/s, xact 0 us, query 0 us, wait 0 us 2020-05-24 18:07:00.545 EEST [1235] LOG C-0x557be8493e70: postgres/postgres@unix(10737):6432 closing because: client close request (age=64s) последняя строчка лога появляется, когда делаю выход: postgres=# \q ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2020, 18:29 |
|
|
start [/forum/topic.php?fid=53&msg=39960111&tid=1994675]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
38ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 281ms |
total: | 421ms |
0 / 0 |