I'm having a similar issue to the one mentioned here: xinetd 'connection reset by peer'
I've setup percona-clustercheck (which comes with Percona's XtraDB Cluster packages) with xinetd and I'm getting an error when trying to curl clustercheck REMOTELY. (Note it works just fine locally.)
Here's what it looks like LOCALLY:
[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.
and REMOTELY:
[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
The solution in the prior post was to set the "Content-Length:" but the script I'm using already attempts to set the content-length:
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
I tried changing the content-length to zero as was recommended. echo -en "Content-Length: 0\r\n" in both the if and else statements - but that didn't seem to help in my case.
Here's what I see when I run curl in verbose mode:
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-redhat-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
If I use curl locally or if I use telnet remotely it all seems to work properly. Its just curl remotely that's an issue. Unfortunately the hardware load balancer we use requires that I perform an http check (no telnet option).
How can I troubleshoot this further?
Thanks! Brad
EDIT - Adding contents of the xinetd script:
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
}