рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд┐рдП рдмрд┐рдирд╛ рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП resolv.conf рд╕реЗ рдирдП DNS рд╕рд░реНрд╡рд░ рдкрддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдордЬрдмреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдХрд░реЗрдВ

рдореИрдВ рдпреВрдирд┐рдХреНрд╕ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рд╢рд╛рд╕рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВред рдПрдХ рдмрд╛рд░ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХрд╛ рдЯрд┐рдХрдЯ рд╣реЗрдбрд░ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд░реНрд╡рд░ рд▓реЙрдЧ рд╕реЗ рдПрдХ рдЕрдВрд╢ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рд░рдЦрд░рдЦрд╛рд╡ рд╡рд┐рднрд╛рдЧ рдореЗрдВ рдЧрд┐рд░ рдЧрдпрд╛: " pgbouncer рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ "ред Pgbouncers рдХреЗ рд▓реЙрдЧ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рд╣рдорд╛рд░реЗ DNS рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╕рдордп рд╕рдордп-рд╕рдордп рдкрд░ рд▓реБрдХрдЕрдк рд╡рд┐рдлрд▓рддрд╛рдПрдВ рдЖрддреА рд╣реИрдВред рдпрд╣ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ DNS рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рд╕реНрд╡рдпрдВ рдпреВрдбреАрдкреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреА рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП: рдХрднреА-рдХрднреА рдкреИрдХреЗрдЯ рд╣рд╛рдирд┐ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░рдгреЛрдВ рд╕реЗ рд╣реЛрддреА рд╣реИред
рдЫрд╡рд┐
рдирддреАрдЬрддрди, pgb рдмрд╛рдЙрдВрд╕рд░реЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рдХреИрд╢рд┐рдВрдЧ рдмрдВрдб рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред рдФрд░ рдпрд╣рд╛рдБ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рд╣реБрдИ: pgbouncer рдиреЗ HUP рд╕рд┐рдЧреНрдирд▓ рдкрд░ /etc/resolv.conf рдлрд╝рд╛рдЗрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рдкрдврд╝рд╛ рдФрд░ рдкреБрд░рд╛рдиреЗ DNS рд╕рд░реНрд╡рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрд╛рд░реА рд░рдЦрд╛ред рд▓реЗрдХрд┐рди рдЖрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрд╛рдЙрдВрд╕рд░реЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдРрд╕реА рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рд╣реИрдВ рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рд╕рддреНрд░ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реИрдВред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ pgbouncer рдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЬреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЙрд▓ getaddrinfo () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдХреЛ resolv.conf рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рдиреЗ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рджрд░реНрдж рд░рд╣рд┐рдд (рдмрд┐рдирд╛ рдбрд╛рдЙрдирдЯрд╛рдЗрдо) рдирдП DNS рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ


рдореБрдЭреЗ рддреБрд░рдВрдд рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ pgbouncers рдХреЗ рд╕рдВрд╕реНрдХрд░рдг 1.5.2 рдереЗ рдФрд░ FreeBSD рдХреЗ рддрд╣рдд libevent-1.4 рдХреЗ рд╕рд╛рде рдмрдирд╛рдП рдЧрдП рдереЗред

рдпрджрд┐ рдЖрдк pgbouncer рдХреЗ рд╕реНрд░реЛрдд рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдирд┐рдореНрди рдЯрд┐рдкреНрдкрдгреА рдХреЛ dnslookup.c рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
/* * Available backends: * * udns - libudns * getaddrinfo_a - glibc only * libevent1 - returns TTL, ignores hosts file. * libevent2 - does not return TTL, uses hosts file. */ 

рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЬрдм pgbouncer libevent1 рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдорд╛рдирдХ libc рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдлрд╝рдВрдХреНрд╢рди getaddrinfo_a () рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкрддрд╛ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЕрдиреБрднрд╡рдЬрдиреНрдп рд░реВрдк рд╕реЗ, рдпрд╣ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдХрд┐ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ getaddrinfo_a () libc рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдЧреЗрдЯрдбреНрд░реАрдиреЛрдлреЛ () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╣рдо рдЕрдВрддрд┐рдо рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдПрдХ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗрдЯ рдХрд░реЗрдВрдЧреЗред рдпрд╣ рддрдереНрдп рд╣рдореЗрдВ рдбрд┐рдмрдЧрд┐рдВрдЧ рдкреНрд░рддреАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ gdb getaddrinfo рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЬрд╛рдирддрд╛ рд╣реИ, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ libc рдмрд┐рдирд╛ рдбреАрдмрдЧрд┐рдВрдЧ рдкреНрд░рддреАрдХреЛрдВ рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдПрдХ рдЧреИрд░-рдореМрдЬреВрдж рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ pgbouncer рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХреЛ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рдПрдХ рдЧреИрд░-рдореМрдЬреВрдж рдбреЛрдореЗрди (рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА) рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ:
 test = host=test.xaxa.blabla12313212.su user=pgsql dbname=template1 pool_size=10 

рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдВрдбреЛ рдореЗрдВ, pgbouncer рдЪрд▓рд╛рдПрдВ:
 su -m pgbouncer -c '/usr/local/bin/pgbouncer /usr/local/etc/pgbouncer.ini' 

рдПрдХ рдЕрдиреНрдп рд╡рд┐рдВрдбреЛ рдореЗрдВ, gdb рдбреАрдмрдЧрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ:
 gdb /usr/local/bin/pgbouncer `cat /var/run/pgbouncer/pgbouncer.pid` 

рдПрдХ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗрдЯ рдХрд░реЗрдВ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдФрд░ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рджреЗрдВ:
 (gdb) b getaddrinfo Breakpoint 1 at 0x800f862a4 (gdb) c Continuing. 

рдПрдХ рдЕрдиреНрдп рд╡рд┐рдВрдбреЛ рдореЗрдВ, рд╣рдо рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдЧреИрд░-рдореМрдЬреВрдж рдбреЛрдореЗрди рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ:
 su -m pgbouncer -c 'export PGPASSWORD="123" && /usr/local/bin/psql -Utest test -h10.9.9.16 -p6000'; 

рдЬреАрдбреАрдмреА рдореЗрдВ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдордиреЗ рдмреИрд▓ рдХреА рдЖрдВрдЦ рдХреЛ рдорд╛рд░рд╛:
 Breakpoint 1, 0x0000000800f862a4 in getaddrinfo () from /lib/libc.so.7 (gdb) 


Getaddrinfo () рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

рдореИрдиреБрдЕрд▓ рдФрд░ рдПрдХ рдЦреЛрдЬ рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдкрд╣рд▓реА рдХреЙрд▓ рдкрд░ resolv.conf рдлрд╝рд╛рдЗрд▓ рдкрдврд╝рддрд╛ рд╣реИ, рд╕реНрдореГрддрд┐ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЖрд░рдореНрдн рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмреАрдЪ рдЖрдк DNS рд╕рд░реНрд╡рд░реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдЧрд▓рд╛, рдлрд╝рдВрдХреНрд╢рди рд╕реВрдЪреА рдореЗрдВ рдкрд╣рд▓реЗ рдкрддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрддреЗ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ DNS рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рд╕реВрдЪреА рд╕реЗ рдЕрдЧрд▓реЗ DNS рд╕рд░реНрд╡рд░ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЗрд╕рд▓рд┐рдП рдПрдХ рд╕рд░реНрдХрд▓ рдореЗрдВред рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ resolv.conf рдкрдврд╝рддрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ pgbouncer рдХреА рд╡рд░реНрдЪреБрдЕрд▓ рдореЗрдореЛрд░реА рдХреЛ рдиреЗрдЯрд╡рд░реНрдХ рдСрд░реНрдбрд░ рдпрд╛ рд╣реЛрд╕реНрдЯ рдСрд░реНрдбрд░ рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ DNS рд╕рд░реНрд╡рд░ рдПрдбреНрд░реЗрд╕ рдХреЗ 4 рдмрд╛рдЗрдЯреНрд╕ рдкрд╛рдХрд░ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдЗрд╕рдХреЗ рд▓рд┐рдП, рд╕реА рдореЗрдореЛрд░реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рднреА рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдореЛрд░реА рдХреЛ рдбрдВрдк рдХрд░рдирд╛ рдФрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмрд╛рдЗрдЯ рдСрд░реНрдбрд░ рдХреА рдЦреЛрдЬ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛ рджрд┐рдпрд╛ред рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рд╕реНрдореГрддрд┐ рдореЗрдВ рдЗрди рдкрддреЛрдВ рдХреЛ рдЗрд╕ рд░реВрдк рдореЗрдВ рдЦреЛрдЬрдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ ред Getaddinfo рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП () рдореЗрд░реА рд╢рдХреНрддрд┐ рд╕реЗ рдкрд░реЗ рдирд┐рдХрд▓рд╛: рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкрд╛рда рдФрд░ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЧреЛрдЯреЛ рдиреЗ рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдХреЛ рд▓рдЧрднрдЧ рддреЛрдбрд╝ рджрд┐рдпрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдирд╣реАрдВ рд╣реВрдВ, рдФрд░ рд╕реА рдиреЗ рдПрдХ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ рд╣реА рд╕реАрдЦрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред

рд╡реИрд╕реЗ, ptrace рдФрд░ procfs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдореЗрд░рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо libevent2 рд╕реЗ рдирд┐рд░реНрдорд┐рдд рдПрдХ pgbouncer рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реЛрдЧрд╛: рд╡рд╣рд╛рдБ DNS рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рдЖрдИрдкреА рдкрддреЗ рдареАрдХ рдЪрд╛рд░ рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЗрд╕ рдЕрдиреБрднрд╡ рдХрд╛ рд╡рд░реНрдгрди рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИред

рдХреНрдпрд╛ рдХрд░реЗрдВ?

рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдПрдХ рдЦреЛрдЬ рдЗрдВрдЬрди рдХреА рдорджрдж рд╕реЗ, рдореБрдЭреЗ res_init () рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдмрдЪрдд рдХрд╛рд░реНрдп рдорд┐рд▓рд╛:
Res_init () рдирд┐рдпрдорд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдкрдврд╝рддрд╛ рд╣реИ (рдпрджрд┐ рдХреЛрдИ рд╣реЛ; рджреЗрдЦреЗрдВ
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдбреЛрдореЗрди рдирд╛рдо, рдЦреЛрдЬ рд╕реВрдЪреА рдФрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдЬрд╝реЙрд▓реНрд╡рд░ (5)
рд╕реНрдерд╛рдиреАрдп рдирд╛рдо рд╕рд░реНрд╡рд░ рдХрд╛ рдкрддрд╛

рдпрд╣ рдРрд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕реЗ рдкрд╣рд▓реА рдмрд╛рд░ getaddrinfo () рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЖрд░рдВрдн рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЬрд╝рд░реВрд░рдд рд╣реИ!
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдмрд╛рд░-рдмрд╛рд░ рдХреЙрд▓ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рдВрдЧрдард┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ resolv.conf рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рдВрдЧрдард┐рдд рдХрд░рддрд╛ рд╣реИред

рдЪрд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░рддреЗ рд╣реИрдВ

рдЯреНрд░реИрд╕рд░ рдХреЛ рд╣рдорд╛рд░реЗ "рдЬрдореЗ рд╣реБрдП" pgbouncer рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ рдФрд░ рдЯреНрд░реЗрд╕ рдбрдВрдк рдлрд╝рд╛рдЗрд▓ рдХреЛ grep рд╢реБрд░реВ рдХрд░реЗрдВ:
 ktrace -f out.ktrace -p `cat /var/run/pgbouncer/pgbouncer.pid` kdump -l -f out.ktrace | grep resolv 

Gdb рдХреЗ рд╕рд╛рде рд╡рд┐рдВрдбреЛ рдореЗрдВ, рд╣рдо res_init () рдлрд╝рдВрдХреНрд╢рди рдХрд╣рддреЗ рд╣реИрдВ:
 (gdb) call res_init() Breakpoint 1, 0x0000000800f862a4 in getaddrinfo () from /lib/libc.so.7 

рдЯреНрд░реЗрд╕ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рд╛рде рд╡рд┐рдВрдбреЛ рдореЗрдВ, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ:
 37933 pgbouncer NAMI "/etc/resolv.conf" 


рд▓рдХреНрд╖реНрдп рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛

рд╣рдо рд╕рд░реНрд╡рд░ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдпрд╛ рд╕рдХреНрд░рд┐рдп tcp рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛, resolv.conf рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗред рдардВрдб рдХреЗ рд╕рдордп, рдЕрдиреБрд░реЛрдз рднреА рдЦреЛ рдирд╣реАрдВ рдЬрд╛рддреЗ рд╣реИрдВред

рдпрджрд┐ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╕реНрдерд╛рдиреАрдп рдХреИрд╢рд┐рдВрдЧ рдбреАрдПрдирдПрд╕ рдХрд╛ рддреБрд░рдВрдд рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдП, рддреЛ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрджрдо рдЙрдард╛рдиреЗ рд╣реЛрдВрдЧреЗ:

  1. BIND рдлрд╝реЙрд░реНрд╡рд░реНрдбрд░реНрд╕ рдореЗрдВ, рд╕рд░реНрд╡рд░реЛрдВ рдХреЛ рдирдП (рдЕрдиреНрдп) рд╡рд░реНрдХрд┐рдВрдЧ рдбреАрдПрдирдПрд╕ рд╕рд░реНрд╡рд░реЛрдВ рдореЗрдВ рдмрджрд▓реЗрдВ рдЬреЛ рдХрд┐ рдкрд╣рд▓реЗ resolv.conf рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рдереЗ рдФрд░ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдлрд┐рд░ рд░реЗрдВрдбрдХ рдкреБрдирдГ рд▓реЛрдб рдХрд░реЗрдВ
  2. рдкреБрд░рд╛рдиреЗ DNS рд╕рд░реНрд╡рд░ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рд╕реЗ рд╕реНрдерд╛рдиреАрдп рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░реЗрдВ (127.0.0.1 рдХреЛ рдЫреЛрдбрд╝рдХрд░)
  3. рдПрдХ рдЧреИрд░-рдореМрдЬреВрдж рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд░реНрд╡рд░ рдореЗрдВ рдПрдХ pgbouncer'a рдХреЙрд▓ рдЖрд░рдВрдн рдХрд░реЗрдВ:
     su -m pgbouncer -c 'export PGPASSWORD="123" && /usr/local/bin/psql -Utest test -h127.0.0.1 -p6000'; 

  4. Tcpdump рдХреЗ рд╕рд╛рде рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ pgbouncer рдкреЛрд░реНрдЯ 53 рдкрд░ 127.0.0.1 рддрдХ рдкрд╣реБрдБрдЪ рд░рд╣рд╛ рд╣реИ:
     tcpdump -n -i lo0 port 53 | grep xaxa "> 127.0.0.1.53" - 

    рдЬрд╣рд╛рдБ xaxa pgbouncer.conf рд╕реЗ рд╕рд░реНрд╡рд░ рдирд╛рдо рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ
  5. рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рдореЗрдВ рдкреБрд░рд╛рдиреЗ DNS рдХреЛ рдЕрдирдорд╛рд╕реНрдХ рдХрд░реЗрдВ
  6. рдЕрдкрдиреА рдореВрд▓ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдлрд╝реЙрд░рд╡рд░реНрдбрд░реНрд╕ рд╕реЗрдЯрд┐рдВрдЧ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░реЗрдВ

рдФрд░ рдЖрдЦрд┐рд░реА

рдпрджрд┐ рдЖрдк рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдХреЛ рджреЛрд╣рд░рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдмреЗрдВрдЪ рдкрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВред
рдпрджрд┐ рдЖрдк рдмреИрдЪ рдореЛрдб рдореЗрдВ рдЬреАрдбреАрдмреА рдореЗрдВ рдПрдХ рдХрдорд╛рдВрдб "рдмреБрд▓реЗрдЯ" рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдЬреАрдбреАрдмреА рдХреЛ рдкрд╣рд▓реЗ рдкрд╛рддреНрд░реЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдлрд┐рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: рдореИрдВрдиреЗ рдХрд┐рд╕реА рддрд░рд╣ 8-8 рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдорд╛рд░рдХрд░ рдЗрд╕реЗ рдЦрд░рд╛рдм рдХрд░ рджрд┐рдпрд╛ред рдореАрд▓ рдХрд╛рдо рдХрд░ рд░рд╣реЗ pgbouncersред
рдЬреАрдбреАрдмреА рдХреЗ рд▓рд┐рдП рдмреИрдЪ рдореЛрдб рдЕрдм рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЪрд▓рддрд╛ рд╣реИ:
 printf 'shell sleep 3\ncall res_init()\ndetach\nquit\n' > /tmp/pb.gdb && gdb -batch -x /tmp/pb.gdb /usr/local/bin/pgbouncer `cat /var/run/pgbouncer/test.pid` 


рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореЗрд░рд╛ рдЕрдиреБрднрд╡ рдХрд┐рд╕реА рдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ рдХрд┐ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИрдВред

Source: https://habr.com/ru/post/In209356/


All Articles