1

Amazon EC2 インスタンスにセットアップするアプリケーションでは、2 つの EC2 インスタンスにインストールされた MySQL データベースをマスター/マスター レプリケーション モードで使用しています。これらの DB サーバーの負荷を分散するために、構成のある別の EC2 インスタンスにデプロイされた HAProxy を使用しています

listen  mysql <public dns of haproxy>:<port>
mode tcp
balance roundrobin
server mysql-db-s1 <elastic ip of db server1>:<port> maxconn 2000
server mysql-db-s2 <elastic ip of db server2>:<port> maxconn 2000

3 つのインスタンスすべてにエラスティック IP が割り当てられ、haproxy のパブリック DNS を使用してアプリケーションから接続します。しかし、時々エラーが発生します

 `com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: C
  ommunications link failure The last packet successfully received from the server was  58,085 milliseconds ago.  
  The last packet sent successfully to the server was 0 milliseconds ago.`

これは、ここで指定した構成と関係がありますか? パブリック DNS の代わりにエラスティック IP を使用する方が良いですか?

4

2 に答える 2

1

多数の Web サイトに対する要求のため、Web サーバーとデータベースの負荷分散の概念。そのため、負荷分散を通じてこの大量のリクエストを処理する方法を知る必要があります。

この記事では、HAProxy を使用したこの MySQL 負荷分散の概念について説明します。MySQL ノード 1 の IP アドレスが 192.168.1.172 で、MySQL ノード 2 の IP アドレスが 192.168.2.82 であるとします。

ステップ 1: MySQL ユーザーを作成し、MySQL クライアントをインストールする ロード バランシングにはすべてのバックエンドへの読み取りと書き込みの両方が含まれるため、MySQL サーバーがマスター マスター レプリケーションを実行するように構成する必要があることを確認する必要があります。HAPorxy の MySQL ユーザーを作成するために必要な最初のこと。最初のユーザーは、サーバーのステータスを確認するために HAProxy によって使用されます

$ mysql -u root -p -e "INSERT INTO mysql.user (Host,User) values ('192.168.1.172','haproxy_check'); FLUSH PRIVILEGES;"
$ mysql -u root -p -e "GRANT ALL PRIVILEGES ON *.* TO 'haproxy_root'@'192.168.1.172' IDENTIFIED BY 'password' WITH GRANT OPTION; FLUSH PRIVILEGES"

$ sudo apt-get install mysql-client

$ sudo apt-get install haproxy
$ sed -i "s/ENABLED=0/ENABLED=1/" /etc/default/haproxy

$ sudo nano /etc/haproxy/haproxy.cfg 

このコンテンツをその新しい構成ファイルに追加します

global
log 127.0.0.1 local0 notice
user haproxy
group haproxy
defaults
log global
retries 2
timeout connect 3000
timeout server 5000
timeout client 5000

listen mysql-cluster
bind 127.0.0.1:3306
mode tcp
option mysql-check user haproxy_check
balance roundrobin
server mysql-1 192.168.1.172:3306 check
server mysql-2 192.168.2.82:3306 check

ステップ 3: 負荷分散をテストする

$ mysql -u haproxy_root -p -e "show variables like 'server_id'"
于 2016-12-29T12:47:02.200 に答える
1

データベースの 1 つに直接接続した後に同じエラーが発生したため、これは本質的に HAProxy の問題ではありませんでした。データベースを少し調整し、アプリケーションのコードを修正しましたが、少なくとも過去 12 時間は取得できません。提案をありがとう。DB の 1 つを別のアベイラビリティ ゾーンに移動します。

于 2013-01-31T04:40:13.950 に答える