web-dev-qa-db-ja.com

HAProxy + PerconaXtraDBクラスター

一連の3つのEC2インスタンスでPerconaXtraDBクラスターと組み合わせてHAproxyをセットアップしようとしています。この特定の問題を扱っているチュートリアルをオンラインでいくつか見つけましたが、少し行き詰まっています。

PerconaサーバーとHAproxyサーバーの両方がubuntu12.04を実行しています。 HAProxyのバージョンは1.4.18で、

HAProxyを起動すると、次のエラーが発生します。サーバーpxc-back/db01がダウンしています。理由:ソケットエラー、チェック期間:2ms。

問題が何であるかはよくわかりません。私は以下を確認しました:

  1. EC2セキュリティグループのポートが開いています
  2. 問題を探して私の設定ファイルに注いだ。現在、何も表示されていません。
  3. Xinetdがインストールされていることを確認しました
  4. Mysqlサーバーの正しいIPアドレスを使用していることを確認しました。

これに関するどんな助けも大いに感謝されます。

これが私の現在の設定です

ロードバランサー

/ 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
1
rottmanj

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

1
Eero Niemi

次の手順を確認し、結果をここに投稿してください。

  1. xinetdが実行されています。
  2. あなたが言ったようにmysqlテストユーザーtestuserを作成します
  3. netstat -nltによってリスニングtcpポート(9200)を確認します
  4. Iptablesを有効にしている場合は、ポート9200を許可してください
  5. ポートが開いていてリッスン状態の場合は、perconaノードにtelnetクライアントをインストールし、telnet 127.0.0.1 9200でtelnetを試行します。
  6. Xinetdが機能している場合は、http応答が表示されます。
  7. そうでない場合は、/usr/bin/clustercheckを実行します

これがすべて完了したら、ここに結果を投稿してください。

1
adinindu