Проследите, что приложение проходит через HAproxy
У меня есть эта установка, где несколько приложений проходят через балансировщик нагрузки (HAproxy) и получают доступ к базе данных MySQL.
Several applications -> HAproxy -> MySQL database
Я хотел бы знать, какое конкретное приложение обращается к базе данных. Когда я сделал список процессов show в базе данных, он показывает IP HAproxy (конечно). Затем я попытался выполнить lsof для базы данных haproxy и mysql, но это не помогло мне (или я просто не знаю, как правильно интерпретировать результаты). И, наконец, я проверил логи haproxy, но они ничего не показали.
Благодарю.
1 ответ
Я также искал способ отследить соединения haproxy с конкретными процессами на разных машинах. Эта изящная маленькая хакерская программа ищет на haproxy-машине хост, который вы ей предоставите. Затем он переходит к исходному компьютеру и ищет соединения с внутренними базами данных.
Самая основная часть работает echo 'show sess' | socat stdio unix-connect:/tmp/haproxy
на самом сервере haproxy
#!/bin/bash
# comments here:
haproxy='<your haproxy target>'
if [ $# -ne 1 ]
then
echo ""
echo "usage: db_trace_haproxy_sessions.sh <hostname>"
echo "looks at connections from <hostname> to load balanced database and traces them back to processes"
echo ""
exit
fi
ip=`host $1 | awk '{print $4}' 2>/dev/null`
if [ "$ip" == "found:" ]
then
echo ""
echo "couldn't resolve $1"
echo ""
exit
fi
IFS="
"
for i in `ssh $haproxy "echo 'show sess' | socat stdio unix-connect:/tmp/haproxy | grep $ip"`
do
# output example:
#0x2cd2780: proto=tcpv4 src=10.210.50.104:50791 fe=mysql be=mysql srv=db302 ts=04 age=1d11m calls=5 rq[f=909202h,l=0,an=00h,rx=7h59m,wx=,ax=] rp[f=109202h,l=0,an=00h,rx=7h59m,wx=,ax=] s0=[7,18h,fd=32,ex=] s1=[7,18h,fd=52,ex=] exp=7h47m
echo ""
db=`echo $i | awk '{print \$6}' | cut -d "=" -f2`
src=`echo $i | awk '{print \$3}' | cut -d "=" -f2`
echo "Source Connection: $src ... connected to $db"
ssh $1 "ps=\`netstat -naltp | grep $src | awk '{print \$7}' | cut -d "/" -f1\`; ps aux | grep \" \$ps \" | grep -v grep"
done;
echo ""
Вывод выглядит так:
db_trace_haproxy_sessions.sh appserver
Source Connection: 10.210.50.103:37114 ... connected to database319
root 19300 1.0 0.0 53944 16180 pts/0 S+ Feb19 16:02 /usr/bin/perl somePerlScript.pl
Source Connection: 10.210.50.103:37115 ... connected to database142
root 19301 5.4 0.0 53940 16160 pts/1 D+ Feb19 81:41 someapachethread