一連の3つのEC2インスタンスでPerconaXtraDBクラスターと組み合わせてHAproxyをセットアップしようとしています。この特定の問題を扱っているチュートリアルをオンラインでいくつか見つけましたが、少し行き詰まっています。
PerconaサーバーとHAproxyサーバーの両方がubuntu12.04を実行しています。 HAProxyのバージョンは1.4.18で、
HAProxyを起動すると、次のエラーが発生します。サーバーpxc-back/db01がダウンしています。理由:ソケットエラー、チェック期間:2ms。
問題が何であるかはよくわかりません。私は以下を確認しました:
これに関するどんな助けも大いに感謝されます。
これが私の現在の設定です
ロードバランサー
/ etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
maxconn 4096
user haproxy
group haproxy
debug
#quiet
daemon
defaults
log global
mode http
option tcplog
option dontlognull
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
frontend pxc-front
bind 0.0.0.0:3307
mode tcp
default_backend pxc-back
frontend stats-front
bind 0.0.0.0:22002
mode http
default_backend stats-back
backend pxc-back
mode tcp
balance leastconn
option httpchk
server db01 10.86.154.105:3306 check port 9200 inter 12000 rise 3 fall 3
backend stats-back
mode http
balance roundrobin
stats uri /haproxy/stats
MySqlサーバー
/ 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_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
}
MySqlサーバー
/ etc/services
Mysqlchk 9200/tcp#mysqlchkという行を追加しました
MySqlサーバー
/ usr/bin/clustercheck
# GNU nano 2.2.6 File: /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="testuser"
MYSQL_PASSWORD=""
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"
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"
fi
telnet 127.0.0.1 9200
が503Serverに使用できない応答を返すという問題がありましたが、ルートとして/usr/bin/clustercheck
を実行すると、すべてが正常であることが示されました。
このコマンドを使用すると、ユーザーnobody
としてclustercheckを実行でき、/tmp/cluster.log
に実際のMySQLエラーが発生しました。
Sudo -H -u nobody bash -c "/usr/bin/clustercheck clustercheckuser clustercheckpassword! 0 /tmp/cluster.log"
そして/tmp/cluster.log
が含まれています:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysql/mysql.sock' (13)
問題は、mysql.sock
が配置されているディレクトリに実行(+ x)フラグがないため、ユーザーnobody
が読み取れず、修正されたものでした。
chmod o+x /var/run/mysql
次の手順を確認し、結果をここに投稿してください。
testuser
を作成しますnetstat -nlt
によってリスニングtcpポート(9200)を確認しますtelnet 127.0.0.1 9200
でtelnetを試行します。/usr/bin/clustercheck
を実行しますこれがすべて完了したら、ここに結果を投稿してください。