2017-10-25 11 views
2

異なるアベイラビリティゾーンのAWS EC2インスタンスに複数のpostgresデータベース(同期が保証されている)がインストールされているアプリケーションがあります。私は、EC2インスタンスの1つがクラッシュした場合、クライアントが引き続きdbにアクセスできるように、単一のDNSの背後にそれらを抽象化したいと思います。 AWSネットワークロードバランサを使用してデータベースの負荷を分散できるかどうか疑問に思っていますか?なぜ、なぜそうではないのですか?そうでない場合は、私が使用できる他の標準の簡単に実装できるソリューションがありますか? (私は例えばhttp://www.pgpool.net/mediawiki/index.php/Main_Pageを知っていますが、自分自身で設定しなければならないものを使用していることを憂慮しています)。awsネットワークバランサ経由でpostgresインスタンスの負荷分散が可能ですか?

+1

データベースは読み取り専用か、読み取り/書き込み可能ですか?前者は容易でなければならず、後者はかなりの問題を引き起こす可能性がある。生のTCPをサポートしているので、ELBをクラシックモードまたはネットワークモード(アプリケーションではない)で使用できるはずです。認証やその他のセキュリティ上の問題に注意して、誰にでもデータベースへのアクセスを開放したいとは思わない。 – jcaron

+0

@jcaron dbsは読み取り/書き込み(アクセス権に関して)ですが、アクセスするアプリケーションサーバー(マルチインスタンスアプリケーション)は読み取りのみを実行します。あなたが参照しているセキュリティ上の問題は何ですか(私はアプリケーションサーバーのセキュリティグループのみをデータベースに入れることを前提としています)。 – istrau2

+0

Webサーバーのヘルスチェックを構成してデータベースにアクセスできることを確認するにはどうすればよいですか?サーバにDBアクセスがない場合、ヘルスチェックに失敗し、Webサーバのロードバランサはサービスの場合にそれを取り出します。 –

答えて

2

自分自身で試しただけで、データベースの負荷分散を行うネットワーク負荷分散装置を設定できるようです。私のプロダクションセットアップではpatroniを使用してフェイルオーバーを管理し、patroniはヘルスチェック用のHTTP APIを提供しています。レプリカが503を返している間、マスターは200応答を返します。これは、レプリカがフェイルオーバーのためだけに存在し、複製された読み取りのためではない、私のユースケースでうまく機能します。私はあなたのニーズに基づいて健康診断のための成功した応答を返すいくつかのコードを考え出すことができると仮定しています。

ロードバランサがポート5432をリッスンし、ヘルスチェックがポート8008に接続するように設定しました。NLBにセキュリティがないため、私のVPCのIP範囲からの接続を許可するようにpostgresインスタンスのセキュリティグループを変更しましたグループ。 psqlを介してNLBのDNS名に接続すると、期待どおりに動作しました。

私は、各アプリケーションインスタンスで実行されているPgBouncerを持つ私の現在の設定に固執すると思います。(バウンサーインスタンスのプールの管理を心配する必要はありません)consul-template pgbouncer.iniを更新しています。コンサルトでリーダーキーが変わるとPgBouncerをリロードします。

+0

お返事ありがとうございます。確かに非常に便利です。フォローアップの質問のカップル。 1)NLBを使用する場合、クライアントは各トランザクションで接続を確立しますか? 2)それはクライアントに依存しますか(私はhttp://docs.sequelizejs.com/を使用しています)? 3)アプリケーションインスタンスでpgbouncerをどのように設定しますか? 4)ドッカーのコンテナとして動かすか、アプリケーションを起動させますか? 5)node.jsを使用していますが、pgBouncerを実行する簡単な方法がわかりますか? 6)複数のdbsの.INIファイルへのリンクがありますか?前もって感謝します。 – istrau2

+0

1.私は分かりません。私はそれを答えるのに十分長く試しませんでした。 2.私はpsqlを試してみたとは言えません。 3-4。私はsystemd経由でpgbouncerを実行し、アプリケーションのサービスファイルはpgbouncerに依存します。 5. systemd/upstart/initで実行するのが私のやり方です。 :) 6.私はしませんが、iniファイルに複数のホスト行を定義するだけです。 –

0

あなたの質問に対する短い答えはNOです。

1)自分のサービスを管理したい場合は、Pgpoolを使用できます。これはあなたの目的を達成するのに役立ちます。別のオプションはHAProxyです。

2)AWSは、データベースサーバ用のロードバランサを提供しません。レイヤ7 SQL対応ロードバランサまたはレイヤ4対応ロードバランサを、MySQLコネクタなどのスマートなdbコネクタクライアント(MySQLの場合)と併用する必要があります。

3)Amazonマーケットプレイスは、調査できる商用およびオープンソースのソリューションを提供しています。

+1

ネットワークロードバランサが動作しない理由は何ですか? AWSマーケットプレイスとpgpoolを使用することから得られるものは何ですか(私はまだ複数のバランシングインスタンスをセットアップし、稼働時間を保証するためにそれらを調整する必要があります)。あなたは良い選択肢と考えているアマゾン市場のソリューションを指摘できますか? – istrau2

+0

Amazonのロードバランサは(Amazonのように)データベースでは動作しません。他のタイプはデータベースで動作します。私はAWS Marketplaceを特定の推奨事項ではなく、より多くの情報のための場所として推奨しました。私が低コストのソリューションを設計していた場合は、フォールトトレランスのためにRDS MySQLまたはAurora multi-AZに切り替え、MySQLコネクタを使用し、負荷分散のためにRDS読み取り複製を使用します。 –

関連する問題