xinetd 'conexão redefinida pelo peer'

3

Estou usando o percona-clustercheck (que vem com os pacotes XtraDB Cluster da Percona) com xinetd e estou recebendo um erro ao tentar encurtar o serviço clustercheck.

/usr/bin/clustercheck :

#!/bin/bash 
#
# Script to make a proxy (ie HAProxy) capable of monitoring Percona XtraDB Cluster nodes properly
#
# Author: Olaf van Zandwijk <[email protected]>
# Documentation and download: https://github.com/olafz/percona-clustercheck
#
# Based on the original script from Unai Rodriguez 
#

MYSQL_USERNAME="clustercheckuser" 
MYSQL_PASSWORD="clustercheckpassword!" 
ERR_FILE="/dev/null" 
AVAILABLE_WHEN_DONOR=0

#
# Perform the query to check the wsrep_local_state
#
WSREP_STATUS='mysql --user=${MYSQL_USERNAME} --password=${MYSQL_PASSWORD} -e "SHOW STATUS LIKE 'wsrep_local_state';" 2>${ERR_FILE} | awk '{if (NR!=1){print $2}}' 2>${ERR_FILE}' 

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

/etc/xinetd.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_on_failure += USERID
  only_from = 10.0.0.0/8 127.0.0.1
  # recommended to put the IPs that need
  # to connect exclusively (security purposes)
  per_source = UNLIMITED
}

Ao tentar encurvar o serviço, recebo uma resposta válida (HTTP 200, texto), mas um aviso de 'conexão redefinida por peer' no final:

HTTP/1.1 200 OK
Content-Type: text/plain

Percona XtraDB Cluster Node is synced.

curl: (56) Recv failure: Connection reset by peer

Infelizmente, o Amazon ELB parece ver isso como uma verificação com falha, e não com sucesso.

Como posso obter o clustercheck para sair normalmente de uma maneira que o curl não veja uma falha de conexão?

    
por ceejayoz 21.03.2013 / 18:38

4 respostas

5

A adição de Content-Length: 0 faz com que o cliente ignore o conteúdo, mesmo que haja conteúdo como neste caso. Então isso pode quebrar o outro software de verificação. No seu caso, o comprimento do conteúdo é de 42 bytes (portanto, adicione Content-Length: 42 ) no caso de um nó sincronizado e 46 bytes no caso de um nó não sincronizado.

# curl localhost:9200
Percona XtraDB Cluster Node is synced.

Eu vou empurrar o script atualizado para que ele seja corrigido na nova versão do pacote Percona XtraDB Cluster também.

    
por 21.03.2013 / 20:28
2

Adicionei um cabeçalho Content-Length: 0 à resposta clustercheck, que parece fazer o truque para a verificação de integridade da Amazon. Se alguém tiver uma prática melhor, por favor me avise

    
por 21.03.2013 / 19:01
1

Eu resolvi um problema semelhante usando

echo -en "HTTP/1.1 200 OK\r\n" | cat

em vez

echo -en "HTTP/1.1 200 OK\r\n"
    
por 18.08.2014 / 17:52
0

Eu também noto que você está usando o script em localhost. Você também pode executar o clustercheck na linha de comando e verificar o valor de retorno.

No caso de um nó sincronizado:

# /usr/bin/clustercheck > /dev/null
# echo $?
0

No caso de um nó não sincronizado:

# /usr/bin/clustercheck > /dev/null
# echo $?
1
    
por 21.03.2013 / 20:41