当我尝试使用自定义端口(端口 = 2211)在 xinetd 中运行 ssh 服务时,它向我显示此错误:
xinetd[16783]:服务 ssh 需要端口 22,而不是 2211
如果我在 xinetd 中将端口更改为 22,它可以正常工作,但是如何自定义在 xinetd 中使用我的端口?
我正在研究一种设置,该设置需要将来自服务器端口之一的请求重定向到 NATed 环境中的其他服务器端口(例如:来自 192.168.1.100:843 的所有请求都应重定向到 192.168.1.200:8443 - 两台服务器位于专用防火墙后面并在所有端口之间相互通信。)
服务正在服务器 192.168.1.200 的 8443 端口上运行。我通过 xinetd 在服务器 192.168.1.100 上配置了端口转发,如下所示。
service serv1
{
bind = 192.168.1.100
protocol = tcp
flags = REUSE
socket_type = stream
port = 843
wait = no
user = root
redirect = 192.168.1.200 8443
}
现在,当我在 LAN 内远程登录到 192.168.1.100 843 时,我可以在 192.168.1.200:8443 上连接服务
-> telnet 192.168.1.100 843
Trying 192.168.1.100...
Connected to 192.168.1.100.
Escape character is '^]'.
但是当我试图通过 192.168.1.100 的公共 IP 连接时,我得到“连接关闭”
-> telnet 1.2.3.4 843
Trying 1.2.3.4...
Connected to 1.2.3.4.
Escape character is '^]'.
Connection closed by foreign host.
在执行 tcpdump 时,我发现在后面的情况下请求不会到达服务器 192.168.1.200 本身。
我在我们的一个 DC 中进行了类似的设置,并且工作正常。任何想法,如果这里有什么问题。
谢谢,梅加南德
我最近将系统升级到 openSUSE 13.1。我们正在通过 xinetd 在系统上运行定制服务,并且在旧的 xinetd 初始化脚本中,ulimit -c unlimited
在启动 xinetd 之前有一行代码来启用核心转储。由于 openSUSE 13.1 使用 systemd,这不再起作用。
systemd-coredumpctl
即使有确认崩溃的内核日志消息,也找不到任何核心转储。从 bash 手动启动服务,然后发送 SIGSEGV 确实会在我们配置的目录中创建核心转储。如何恢复我的核心转储?
我遇到了与此处提到的问题类似的问题: xinetd 'connection reset by peer'
我已经使用 xinetd 设置了 percona-clustercheck(Percona 的 XtraDB Cluster 软件包附带),并且在尝试远程 curl clustercheck 时出现错误。(注意它在本地工作得很好。)
这是它在本地的样子:
[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.
和远程:
[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
上一篇文章中的解决方案是设置“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
我尝试按照建议将内容长度更改为零。echo -en "Content-Length: 0\r\n" 在 if 和 else 语句中 - 但这似乎对我的情况没有帮助。
这是我在详细模式下运行 curl 时看到的内容:
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
如果我在本地使用 curl 或远程使用 telnet,一切似乎都能正常工作。它只是远程卷曲,这是一个问题。不幸的是,我们使用的硬件负载平衡器要求我执行 http 检查(没有 telnet 选项)。
我该如何进一步解决这个问题?
谢谢!布拉德
编辑 - 添加 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
}
我在 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 看不到连接失败的方式正常退出?