Curl Failure al recibir datos de pares usando Percona XtraDB Cluster Check

Tengo un problema similar al que se menciona aquí: xinetd 'reset reset by peer'

He configurado percona-clustercheck (que viene con los packages de XtraDB Cluster de Percona) con xinetd y estoy recibiendo un error al intentar curvar clustercheck REMOTELY. (Nota que funciona muy bien localmente.)

Esto es lo que parece LOCALMENTE:

[root@db1 tmp]# for i in {1..1000}; do curl http://db1.ourdomain.local:9200; sleep 2; date; done Percona XtraDB Cluster Node is synced. Fri May 3 07:30:16 EDT 2013 Percona XtraDB Cluster Node is synced. Fri May 3 07:30:18 EDT 2013 Percona XtraDB Cluster Node is synced. Fri May 3 07:30:20 EDT 2013 Percona XtraDB Cluster Node is synced. Fri May 3 07:30:22 EDT 2013 Percona XtraDB Cluster Node is synced. Fri May 3 07:30:24 EDT 2013 Percona XtraDB Cluster Node is synced. Fri May 3 07:30:26 EDT 2013 Percona XtraDB Cluster Node is synced. Fri May 3 07:30:28 EDT 2013 Percona XtraDB Cluster Node is synced. Fri May 3 07:30:30 EDT 2013 Percona XtraDB Cluster Node is synced. Fri May 3 07:30:32 EDT 2013 Percona XtraDB Cluster Node is synced. Fri May 3 07:30:34 EDT 2013 Percona XtraDB Cluster Node is synced. 

y REMOTAMENTE:

 [root@db2 ~]# for i in {1..1000}; do curl http://db1.ourdomain.local:9200; sleep 2; date; done Percona XtraDB Cluster Node is synced. Fri May 3 07:32:23 EDT 2013 curl: (56) Failure when receiving data from the peer <----- error Fri May 3 07:32:25 EDT 2013 curl: (56) Failure when receiving data from the peer <----- error Fri May 3 07:32:27 EDT 2013 Percona XtraDB Cluster Node is synced. Fri May 3 07:32:29 EDT 2013 curl: (56) Failure when receiving data from the peer <----- error Fri May 3 07:32:31 EDT 2013 Percona XtraDB Cluster Node is synced. Fri May 3 07:32:33 EDT 2013 Percona XtraDB Cluster Node is synced. Fri May 3 07:32:35 EDT 2013 Percona XtraDB Cluster Node is synced. Fri May 3 07:32:37 EDT 2013 

La solución en el post anterior fue establecer el "Content-Length:" pero el script que estoy usando ya intenta establecer el contenido de la longitud:

 if [[ "${WSREP_STATUS}" == "4" ]] || [[ "${WSREP_STATUS}" == "2" && ${AVAILABLE_WHEN_DONOR} == 1 ]] then # Percona XtraDB Cluster node local state is 'Synced' => return HTTP 200 # Shell return-code is 0 echo -en "HTTP/1.1 200 OK\r\n" echo -en "Content-Type: text/plain\r\n" echo -en "Connection: close\r\n" echo -en "Content-Length: 40\r\n" echo -en "\r\n" echo -en "Percona XtraDB Cluster Node is synced.\r\n" exit 0 else # Percona XtraDB Cluster node local state is not 'Synced' => return HTTP 503 # Shell return-code is 1 echo -en "HTTP/1.1 503 Service Unavailable\r\n" echo -en "Content-Type: text/plain\r\n" echo -en "Connection: close\r\n" echo -en "Content-Length: 44\r\n" echo -en "\r\n" echo -en "Percona XtraDB Cluster Node is not synced.\r\n" exit 1 fi 

Intenté cambiar el contenido de la duración a cero como se recomendó. echo -en "Content-Length: 0 \ r \ n" en las sentencias if y else – pero que no parecía ayudar en mi caso.

Esto es lo que veo cuando ejecuto curl en modo detallado:

 Fri May 3 08:34:33 EDT 2013 * About to connect() to db1.ourdomain.local port 9200 (#0) * Trying 1.2.3.4... connected * Connected to db1..local (1.2.3.4) port 9200 (#0) > GET / HTTP/1.1 > User-Agent: curl/7.19.7 (x86_64-networkinghat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2 > Host: db1.ourdomain.local:9200 > Accept: */* > < HTTP/1.1 200 OK * Closing connection #0 * Failure when receiving data from the peer curl: (56) Failure when receiving data from the peer 

Si uso curl localmente o si uso telnet remotamente todo parece funcionar correctamente. Es sólo curl remotamente que es un problema. Desafortunadamente, el equilibrador de carga de hardware que usamos requiere que realice una comprobación http (sin opción telnet).

¿Cómo puedo solucionar esto más lejos?

¡Gracias! Puntilla

EDIT – Añadir contenido del script xinetd:

 cat /etc/xinetd.d/mysqlchk # default: on # description: mysqlchk service mysqlchk { # this is a config for xinetd, place it in /etc/xinetd.d/ disable = no flags = REUSE socket_type = stream port = 9200 wait = no user = nobody server = /usr/bin/clustercheck log_type = FILE /var/log/xinetdlog log_on_failure += USERID only_from = 0.0.0.0/0 # recommended to put the IPs that need # to connect exclusively (security purposes) per_source = UNLIMITED } 

El problema es que este script de comprobación responde a HAproxy como una sola secuencia sin respetar el protocolo HTTP. Introducir el sueño es algo que parece funcionar para mi configuration.

 then # Cluster node state is 'OK' => return HTTP 200 /bin/echo -en "HTTP/1.1 200 OK\r\n" sleep 0.1 /bin/echo -en "Content-Length: 26\r\n" sleep 0.1 /bin/echo -en "Content-Type: text/plain\r\n" sleep 0.1 /bin/echo -en "\r\n" sleep 0.1 /bin/echo -en "Cluster Node is GOOD.\r\n" sleep 0.1 /bin/echo -en "\r\n" exit 0 else # Cluster node local state is 'BAD' => return HTTP 503 /bin/echo -en "HTTP/1.1 503 Service Unavailable\r\n" sleep 0.1 /bin/echo -en "Content-Length: 0\r\n" sleep 0.1 /bin/echo -en "Content-Type: text/plain\r\n" sleep 0.1 /bin/echo -en "Connection: close\r\n" sleep 0.1 /bin/echo -en "\r\n" sleep 0.1 /bin/echo -en "Cluster Node state is BAD.\r\n" sleep 0.1 /bin/echo -en "\r\n" sleep 0.1 exit 1 

Lo que observo en tu session de debugging es que tu rizo cierra la connection justo después de recibir la primera línea de la respuesta. No recibe el encabezado "Content-Length", y por lo tanto no lo utiliza (es por eso que no importa si lo establece en 0). Conmigo, se ve así:

 * About to connect() to vm0010 port 9200 (#0) * Trying 1.2.3.4... connected * Connected to vm0010 (1.2.3.4) port 9200 (#0) > GET / HTTP/1.1 > User-Agent: curl/7.21.0 (x86_64-pc-linux-gnu) libcurl/7.21.0 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.15 libssh2/1.2.6 > Host: vm0010:9200 > Accept: */* > < HTTP/1.1 200 OK < Content-Type: text/plain < Connection: close < Content-Length: 40 < Percona XtraDB Cluster Node is synced. * Closing connection #0 

¿Cómo está configurado tu xinetd para esta secuencia de commands?

    Intereting Posts