私は stackoverflow についてこの質問をしましたが、このコミュニティにはもっと適しているかもしれませんが。
MySQLクラスター(Galeraクラスター)に接続するWebサーバーがあります...クラスターは正常に動作します(MySQLの最初のインスタンスでレコードを更新すると、2番目のインスタンスで自動的に更新されます)。問題は、WebサーバーとMySQLインスタンスの間にロードバランサーが必要なことです...
だから私はAWSネットワークロードバランサーをセットアップすることです(私の場合、NLBはネットワークレイヤー、TCPで動作します)... MySQLの2つのインスタンスをNLBのターゲットグループ(プライベートIP)に追加しました。
次に、NLBに接続するためにWebサーバーの接続文字列を更新します。
<add name="MyDB" connectionString="Server=my-nlb-ap-southeast-2.amazonaws.com; Port=3306; Database=mydb; Uid=user1; Pwd=mypassword; Protocol=TCP" providerName="MySql.Data.MySqlClient"/>
しかし、私は次のエラーを受け取ります:
[MySqlException(0x80004005):指定されたMySQLホストのいずれにも接続できません。] MySql.Data.MySqlClient.NativeDriver.Open()+1734 MySql.Data.MySqlClient.Driver.Open()+60 MySql.Data.MySqlClient。 Driver.Create(MySqlConnectionStringBuilder設定)+309 MySql.Data.MySqlClient.MySqlPool.CreateNewPooledConnection()+18 MySql.Data.MySqlClient.MySqlPool.GetPooledConnection()+290 MySql.Data.MySqlClient.MySqlPl.l.qlPr.l.r.qlPr.llr Data.MySqlClient.MySqlPool.GetConnection()+60 MySql.Data.MySqlClient.MySqlConnection.Open()+1588 MySql.Data.MySqlClient.MySqlProviderServices.GetDbProviderManifestToken(DbConnection connection)+182 System.Data.EmonsityProvider.Core .GetProviderManifestToken(DbConnection接続)
WebサーバーからMySQLに接続しようとすると、次のようになります。
これは、WebサーバーがNLBを介してMySQLインスタンスに到達できることを意味すると思いますが、接続文字列が機能していない理由がわかりません。
すべてのIPに対してポート3306を開いたので、VPCにないローカルコンピューターからNLBに接続できます。
しかし、ウェブサーバーはまだ同じエラーを受けています...
HAProxyの代わりにAWS NLBを使用することを決めた理由は、NLBの可用性が高いためです... HAProxyを使用する場合、HAProxyとしてVPCに2台のサーバーを追加する必要があります(高可用性のため) ... NLBの場合、1つの高可用性ロードバランサーだけを使用できますが、この目的でAWS NLBを使用できるかどうかはわかりません。
接続文字列が機能しないのは興味深いことです。 mysqlクライアントをウェブサーバーから実行して、接続して認証できることを確認できますか?
C:\> mysql -hmy-nlb-ap-southeast-2.amazonaws.com -uuser1 -pmypassword
また、NLBが本当に必要ですか?負荷分散にDNSを使用するのはどうですか? mydb.example.com
のようなレコードを作成し、dbクラスターノードごとに1つずつ、2つのアドレスを指定します。
mydb.example.com. IN A 10.20.30.40 ; db node 1
IN A 10.20.40.50 ; db node 2
複数の値を持つDNSレコードはround-robinの順序で返されます。つまり、一部のクライアントはnode 1 IPを最初に取得し、他のクライアントはnode 2を取得します=最初。また、プライマリノードに障害が発生した場合でも、フェイルオーバー先のIPが残っています。
NLBに時間と費用をかける前に、まずこのDNSアプローチを試してみます。
それが役に立てば幸い:)