AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 490163
Accepted
ceejayoz
ceejayoz
Asked: 2013-03-22 09:38:42 +0800 CST2013-03-22 09:38:42 +0800 CST 2013-03-22 09:38:42 +0800 CST

xinetd '连接被对等方重置'

  • 772

我在 xinetd 中使用percona-clustercheck(Percona 的 XtraDB Cluster 软件包附带),在尝试卷曲 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
}

当尝试 curl 服务时,我得到了一个有效的响应(HTTP 200,文本),但最后有一个“连接被对等重置”的通知:

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

Percona XtraDB Cluster Node is synced.

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

不幸的是,Amazon ELB 似乎将此视为失败的检查,而不是成功的检查。

如何让 clustercheck 以 curl 看不到连接失败的方式正常退出?

xinetd
  • 4 4 个回答
  • 3185 Views

4 个回答

  • Voted
  1. Best Answer
    Olaf van Zandwijk
    2013-03-22T11:28:02+08:002013-03-22T11:28:02+08:00

    添加Content-Length: 0会使客户端忽略内容,即使在这种情况下也有内容。所以这可能会破坏其他检查软件。在您的情况下,同步节点的内容长度为 42 字节(因此添加Content-Length: 42),未同步节点的内容长度为 46 字节。

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

    我将推送更新的脚本,以便它也将在新版本的 Percona XtraDB Cluster 包中得到修复。

    • 6
  2. ceejayoz
    2013-03-22T10:01:30+08:002013-03-22T10:01:30+08:00

    我Content-Length: 0在 clustercheck 响应中添加了一个标头,这似乎可以解决 Amazon 的健康检查问题。如果有人有更好的做法,请告诉我

    • 2
  3. Nerijus Bendžiūnas
    2014-08-19T07:52:21+08:002014-08-19T07:52:21+08:00

    我使用解决了类似的问题

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

    反而

    echo -en "HTTP/1.1 200 OK\r\n"
    
    • 1
  4. Olaf van Zandwijk
    2013-03-22T11:41:58+08:002013-03-22T11:41:58+08:00

    我还注意到您在本地主机上使用脚本。您还可以在命令行上执行 clustercheck 并检查返回值。

    如果是同步节点:

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

    如果是未同步的节点:

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

相关问题

  • svnserve 与 xinetd + svnserve

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve