OpenResty Edge の TCP ロードバランシング:Nginx 設定を編集せず TCP サービスをプロキシ
OpenResty Edge は、stream レイヤーの TCP サービスのロードバランシングを、すべて Admin コンソール上で行います——stream{} ブロックも、upstream や proxy_pass ディレクティブも、nginx 設定の編集やリロードも不要です。TCP(stream)アプリケーションを作成し、それをバックエンドサーバーのアップストリームに向けるだけで、OpenResty Edge がゲートウェイネットワーク全体でその接続をプロキシします。本チュートリアルでは、ポート 3307 の MySQL サーバーをプロキシし、Edge ノード経由で接続して動作を確認します。詳しい完全な手順については、YouTube の動画チュートリアルをご覧ください。
これは SNI Proxy アプリケーションタイプで使われているものと同じ stream レイヤーのプロキシ機構です。
OpenResty Edge で TCP(Stream)アプリケーションを作成する
OpenResty Edge の Admin Web コンソールに移動しましょう。これは私たちのコンソールのサンプルデプロイメントです。各ユーザーには独自のローカルデプロイメントがあります。
今回は Stream タイプのアプリケーションを作成します。Stream アプリケーションリストページに移動し、新しいアプリケーションを作成します。
Stream アプリケーションには 2 種類あることがわかります:SNI Proxy アプリケーションと TCP アプリケーションです。
今日のテーマは TCP アプリケーションです。
SNI Proxy アプリケーションは別のチュートリアルで取り上げます。
TCP タイプを選択します。
このアプリケーション用のポートを指定する必要があります。
まず、このポートを default パーティションに追加する必要があります。
default パーティションの編集をクリックし、新しいポートを追加して、ポート番号として 3307 を入力します。
ポートタイプを TCP に設定します。
保存すると、新しいポートが default パーティションに追加され、その変更はゲートウェイネットワーク全体に自動的に公開されます。
新しいアプリケーションのダイアログに戻り、先ほど追加したポートを入力して、このアプリケーションを作成します。
TCP ロードバランシングのためのアップストリームとページルールを追加する
Upstreams ページに移動します。
バックエンドサーバー用の新しいアップストリームを作成し、名前を付けます。例えば、tcp_backend とします。
ここにバックエンドサーバーの IP アドレスを入力する必要があります。
この IP アドレスに MySQL サーバーを準備しています。直接接続すると、アクセス可能であることが確認できます。
これでバックエンドサーバーのホストフィールドを入力できます。
ポート番号 3307 を入力します。
将来的には、このアップストリームにさらに多くのサーバーを追加する可能性があります。
このアップストリームを保存します。tcp_backend アップストリームがリストに表示されました。
次に、このアップストリームを使用する新しいページルールを作成します。
プロキシターゲットを追加します。
先ほど作成したアップストリームを選択します。
複数のバランシング戦略から選択できます。アップストリームにサーバーが 1 つしかないため、バランシング戦略はそれほど重要ではありません——デフォルトの round-robin 戦略のままで構いません。
このページルールを作成します。
ページルールリストに新しく作成されたプロキシページルールが表示されます。
最後のステップは、新しい設定の公開です。先ほどの変更をすべてのゲートウェイサーバーにプッシュします。
リリースします!
変更がすべてのゲートウェイサーバーに同期されました。このサンプルデプロイメントでは、ゲートウェイネットワークに 14 台のサーバーがあることがわかります。
ネットワーク全体で増分の設定同期を行い、リクエストの粒度でリアルタイムに設定を更新しています。アプリケーションレベルの設定変更はすべて、サーバーのリロード、再起動、またはバイナリアップグレードを必要としません。そのため、多くの異なるユーザーが頻繁に公開を行っても、非常にスケーラブルです。
TCP プロキシのテスト:Edge ノード経由で MySQL に接続する
クラスターごとにグループ化されたすべてのゲートウェイサーバーを見てみると、アメリカにあるノードがあり、その IP アドレスは 226 で終わっています。このノードを使用して、先ほど追加したプロキシをテストします。
では、MySQL クライアントをその Edge ノードのポート 3307 に——ノードの IP をホストとして使って——接続し、select クエリを実行します。
予想通り、プロキシは正常に機能しています!select クエリが Edge ノード経由で結果を返しており、バックエンドに直接アクセスしているかのように MySQL バックエンドにアクセスできます。
よくある質問
nginx 設定を編集せずに TCP をロードバランシングするには?
OpenResty Edge では、Admin コンソールで TCP(stream)アプリケーションを作成し、バックエンドサーバーのアップストリームを追加し、それにプロキシするページルールを紐付けます——stream{} ブロック、upstream 定義、proxy_pass ディレクティブを手で書くことはありません。変更をリリースすると、リロード・再起動・バイナリアップグレードなしで、すべてのゲートウェイサーバーにプッシュされます。
OpenResty Edge を通して MySQL データベースをプロキシできますか?
はい。本チュートリアルではバックエンドはポート 3307 で待ち受ける MySQL サーバーで、OpenResty Edge がそこへ TCP 接続をプロキシします。リリース後、MySQL クライアントを Edge ノードのポート 3307 に接続すると、バックエンドに直接接続したのとまったく同じようにデータベースに到達できます。
TCP アプリケーションと SNI Proxy アプリケーションの違いは何ですか?
どちらも OpenResty Edge の stream アプリケーションです。TCP アプリケーションは、本文で示したように、指定したポートで生の TCP 接続をプロキシします。SNI Proxy アプリケーションは、ハンドシェイク内の SNI ホスト名によって TLS トラフィックをルーティングします。これは SNI Proxy アプリケーションのチュートリアルで取り上げています。
TCP アップストリームは複数のバックエンドサーバーを持てますか?
はい。本チュートリアルのアップストリームはサーバーが 1 つなのでバランシング戦略は問題になりませんが、さらにサーバーを追加し、round-robin などのバランシング戦略を選択できます。
OpenResty Edge について
OpenResty Edge は、マイクロサービスと分散トラフィックアーキテクチャ向けに設計された多機能ゲートウェイソフトウェアで、当社が独自に開発しました。トラフィック管理、プライベート CDN 構築、API ゲートウェイ、セキュリティ保護などの機能を統合し、現代のアプリケーションの構築、管理、保護を容易にします。OpenResty Edge は業界をリードする性能と拡張性を持ち、高同時接続・高負荷シナリオの厳しい要求を満たすことができます。K8s などのコンテナアプリケーショントラフィックのスケジューリングをサポートし、大量のドメイン名を管理できるため、大規模ウェブサイトや複雑なアプリケーションのニーズを容易に満たすことができます。
著者について
章亦春(Zhang Yichun)は、オープンソースの OpenResty® プロジェクトの創始者であり、OpenResty Inc. の CEO および創業者です。
章亦春(GitHub ID: agentzh)は中国江蘇省生まれで、現在は米国ベイエリアに在住しております。彼は中国における初期のオープンソース技術と文化の提唱者およびリーダーの一人であり、Cloudflare、Yahoo!、Alibaba など、国際的に有名なハイテク企業に勤務した経験があります。「エッジコンピューティング」、「動的トレーシング」、「機械プログラミング」 の先駆者であり、22 年以上のプログラミング経験と 16 年以上のオープンソース経験を持っております。世界中で 4000 万以上のドメイン名を持つユーザーを抱えるオープンソースプロジェクトのリーダーとして、彼は OpenResty® オープンソースプロジェクトをベースに、米国シリコンバレーの中心部にハイテク企業 OpenResty Inc. を設立いたしました。同社の主力製品である OpenResty XRay(動的トレーシング技術を利用した非侵襲的な障害分析および排除ツール)と OpenResty Edge(マイクロサービスおよび分散トラフィックに最適化された多機能ゲートウェイソフトウェア)は、世界中の多くの上場企業および大企業から高い評価を得ております。OpenResty 以外にも、章亦春は Linux カーネル、Nginx、LuaJIT、GDB、SystemTap、LLVM、Perl など、複数のオープンソースプロジェクトに累計 100 万行以上のコードを寄与し、60 以上のオープンソースソフトウェアライブラリを執筆しております。
翻訳
英文版の原文と日本語訳版(本文)をご用意しております。読者の皆様による他の言語への翻訳版も歓迎いたします。全文翻訳で省略がなければ、採用を検討させていただきます。心より感謝申し上げます!





















































