私はmysqlマスターマスターレプリケーションをセットアップしましたが、今ではmysqlサーバーをHaproxyで負荷分散しようとしています。
以下のhaproxy構成は正常に機能しており、ラウンドロビンのような回転ノードです。
# this config needs haproxy-1.1.28 or haproxy-1.2.1
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 4096
#chroot /usr/share/haproxy
chroot /etc/haproxy
user haproxy
group haproxy
pidfile /var/run/haproxy.pid
daemon
#debug
#quiet
defaults
log global
#mode http
mode tcp
#option httplog
option dontlognull
retries 3
option redispatch
maxconn 2000
#contimeout 5000
contimeout 3600000
#clitimeout 50000
clitimeout 3600000
#srvtimeout 50000
srvtimeout 3600000
listen mysql_cluster 0.0.0.0:3307
mode tcp
balance roundrobin
option mysql-check user root
#option httpchk GET /mysqlchk/?port=3306
option tcpka
server mysql1 192.168.1.107:3306
server mysql2 192.168.1.108:3306
これは私が欲しかったものではありません。
私が欲しいのはActive-Passive
の設定です。同様に、192.168.1.107
が存在しない場合は、デフォルトですべてのリクエストを192.168.1.108
に送信し、192.168.1.107
にフェイルオーバーするように構成します。 backupと記載してこれを行うリンクをいくつか見ましたが、それは私には何も機能しませんでした。
上記の構成の最後の2行を次のように置き換えてみたところ、
server mysql1 192.168.1.107:3306 check port 9200 inter 12000 rise 3 fall 3
server mysql2 192.168.1.108:3306 check port 9200 inter 12000 rise 3 fall 3 backup
Haproxyの再起動中にエラーメッセージが表示され、それ自体が停止します。
Jan 20 16:18:18 localhost haproxy[523]: proxy mysql_cluster has no server available!
Jan 20 16:18:18 localhost haproxy[523]: proxy mysql_cluster has no server available!
Mysqlの負荷分散でいくつかのhaproxy統計を使用して本番環境で使用するために、誰でもhaproxyの信頼できる動作設定があります。利用可能なノードがない場合にバックアップノードにリダイレクトするように上記で尋ねているアクティブ/パッシブ構成が必要です。これを新しいubuntu本番サーバーに実装します。
どんな助けも大歓迎です!ありがとう!
チェックポート9200を削除すると、バックアップオプションが機能します。あなたは異なる例を混ぜているようです、mysql-checkは標準ポートで動作しますが、別個のチェックスクリプトを実行するポート9200で応答するxinetdプロセスをセットアップするhttpチェックを使用する別の一般的な例があります。
マスターマスターレプリケーションは機能していますが、それでも、MySQL負荷分散にHAProxyを使用することは適切な選択ではないと思います。
HAProxyは素晴らしいですが、TCPレベルのロードバランサーとして動作しているときは、SQL状態の概念を持つことはできません。長時間実行されているSQLトランザクションの動作は不明確でエラーが発生しやすくなります。満足してはいけません。
マスター/マスターセットアップには、単一ノードの書き込み容量があります(すべての書き込みを複製する必要があるため)。したがって、セットアップで拡大しているのは、読み取りと接続です。より一般的で私見のはるかに優れた設定は次のとおりです。
MySQLプロキシ やその他の接続処理ミドルウェアのようなものも、あなたのケースではうまく機能するかもしれません。
"High Performance MySQL" は、MySQLをスケーリングする方法に関する実用的な提案が掲載された非常に優れた本です。この本を読めば、どのデザインが一般的で、特定の状況で証明されているかがもっとはっきりわかると思います。
この設定はまさにあなたが望むことをします:)
global
log 127.0.0.1 local0
maxconn 4096
user haproxy
group haproxy
daemon
defaults
log global
mode tcp
option tcplog
option dontlognull
retries 3
option redispatch
maxconn 2000
contimeout 4000
clitimeout 50000
srvtimeout 30000
stats enable
stats scope .
frontend mysql_cluster
bind 3.3.3.3:3307
#bind *:3307
default_backend mysql_cluster
backend mysql_cluster
mode tcp
option mysql-check
balance roundrobin
server db01_1.1.1.1 1.1.1.1:3306 weight 1 check port 3306
server db02_2.2.2.2 2.2.2.2:3306 weight 100 check port 3306 backup
listen stats 3.3.3.3:10000
mode http
option httpclose
balance roundrobin
stats uri /
stats realm Haproxy\ Statistics
#stats auth user:pass
Haproxyと組み合わせた真のマスターマスターMySQLクラスターの場合は、コーダーシップGaleraまたはpercona XtraDBクラスターを使用してみてください。