Lvs+Nginx クラスターを使用して高並列アーキテクチャを構築する例

Lvs+Nginx クラスターを使用して高並列アーキテクチャを構築する例

同時実行性の高いサイトでは、Web サイトのバックエンド サービスの安定性だけでなく、次の図に示すように、サービスが大量のトラフィックにアクセスしてそれに耐えられるかどうかも考慮する必要があります。

画像-20211220234912904

1: トラフィックアクセス、Lvs+Nginxクラスタを使用できます。この方法では、数百万までのQPSにアクセスできます。

2: Lvsを介してNginxクラスタを実装し、Nginx + Tomcatでバックエンドサービスクラスタを実装し、アクセス層トラフィック処理からバックエンドサービスクラスタの高並列処理までのプロセスを完了します。

1. Lvsの紹介

LVS (Linux Virtual Server) は Linux 仮想サーバーです。複数のサーバーの負荷分散に使用され、ネットワークの第 4 層で動作します。高性能で高可用性のサーバー クラスター テクノロジーを実現できます。安定性と信頼性に優れています。クラスター内のサーバーが正常に動作しなくなった場合でも、全体の効果には影響しません。 TCP/IP ルーティングと転送に基づいており、非常に高い安定性と効率性を備えています。

画像-20211220235003406

LVS クラスターには、多くの場合、次のロールが含まれます。

1:DS:ディレクターサーバー。スケジュール管理を担当する仮想サービス

2: RS: リアルサーバー。バックエンドで実際に動作するサーバー。

3:VIP: ユーザのリクエストを外部に直接向け、ユーザのリクエストの対象となるIPアドレスです

4:DIP: ディレクター サーバー IP、DS IP

5: RIP: 実サーバーIP、バックエンドサーバーのIPアドレス

6: CIP: クライアントIP、アクセスクライアントのIPアドレス

2. Lvs負荷分散モード

LVS は 3 つの負荷分散モードを提供します。各負荷分散モードは、異なるシナリオに適用できます。これら 3 つの負荷分散モードについて説明します。

2.1 NAT

ユーザーの要求がディストリビューターに到達すると、要求されたデータ パケットは、事前に設定された iptables ルールを通じてバックエンド RS に転送されます。 RS はゲートウェイをディストリビューターの内部 IP に設定する必要があります。ユーザーが要求したデータ パケットとユーザーに返されるデータ パケットはすべてディストリビューターを通過するため、ディストリビューターはボトルネックと呼ばれます。 NAT モードでは、ディストリビューターのみがパブリック IP を持つ必要があるため、パブリック IP リソースが節約されます。

画像-20211220235042901

2.2 ターン

このモードでは、ディストリビューターとすべての RS にパブリック IP (VIP と呼びます) を設定する必要があります。クライアントが要求するターゲット IP は VIP です。ディストリビュータは要求データ パケットを受信すると、データ パケットを処理してターゲット IP を RS の IP に変更し、データ パケットが RS に到達するようにします。データ パケットを受信した後、RS は元のデータ パケットを復元し、ターゲット IP が VIP になるようにします。この VIP はすべての RS に設定されているため、RS はそれが自分自身であると認識します。

画像-20211220235059900

2.3 DRモード

これは IP トンネルに似ていますが、データ パケットの MAC アドレスを RS の MAC アドレスに変更するという点が異なります。実際のサーバーは応答をクライアントに直接返します。

この方法では IP トンネルのオーバーヘッドがなく、クラスター内の実サーバーが IP トンネル プロトコルをサポートする必要はありませんが、スケジューラと実サーバーに同じ物理ネットワーク セグメントに接続されたネットワーク カードが必要です。

画像-20211220235116751

3. Lvs DRモードの設定

上記の分析に基づいて、DR モードはパフォーマンス効率が比較的高く、セキュリティも高いため、ほとんどの企業が DR モードの使用を推奨していると結論付けることができます。ここで DR モードも構成して、Lvs+Nginx クラスターを実装します。

3 台のマシンを用意しました。まず、3 台のマシンすべてに Nginx がインストールされていることを確認します。

1:192.168.183.133 (DS) 192.168.183.150 外部サービスを提供 2:192.168.183.134 (RS) 192.168.183.150 実際のサービス処理ビジネスプロセス 3:192.168.183.135 (RS) 192.168.183.150 実際のサービス処理ビジネスプロセス

電話番号: 192.168.183.150

3.1 VIP 構成

ネットワーク構成マネージャーを閉じます(各マシンでこれを実行してください)

systemctl 停止 NetworkManager
systemctl 無効化 NetworkManager

仮想 IP を構成する (VIP 192.168.183.133 で構成)

/etc/sysconfig/network-scriptsに次の内容のファイルifcfg-ens33:1を作成します。

BOOTPROTO=静的
デバイス=ens33:1
ONBOOT=はい
IPアドレス=192.168.183.150
ネットマスク=255.255.255.0

ネットワーク サービスを再起動します。

サービスネットワークの再起動

元のネットワーク カードに仮想 IP 150 が追加されていることがわかります。

画像-20211220235428594

同時に、 192.168.183.134192.168.183.135の仮想マシン IP を構築する必要がありますが、これらはデータを返すためだけに使用され、ユーザーがアクセスすることはできません。このとき、 ifcfg-loを操作する必要があります。

IPADDR=127.0.0.1、ここで 127.0.0.1 はローカル ループバック アドレスであり、どのクラスフル アドレス クラスにも属しません。これはデバイスのローカル仮想インターフェースを表すため、デフォルトではダウンしないインターフェースであると見なされます。

ネットマスク=255.255.255.255

192.168.183.134 :
ifcfg-loifcfg-lo:1にコピーし、 ifcfg-lo:1構成を次の内容に変更します。

画像-20211220235808269

更新する場所:

イフアップロー

IP を確認すると、lo の下にさらに 150 個の IP があることがわかります。

画像-20211220235845587

192.168.100.133上記と同じ操作を実行します。

3.2 LVSクラスタ管理ツールのインストール

ipvsadm は lvs クラスターを管理するために使用され、手動でインストールする必要があります。 DSをインストールできます。

インストールコマンド:

yum インストール ipvsadm

バージョン表示:

ipvsadm -Ln

効果は以下のとおりです。

画像-20211221000148927

3.3 アドレス解決プロトコル

192.168.183.134および192.168.183.135で動作します。

arp_ignore および arp_announce パラメータはどちらも ARP プロトコルに関連しており、主にシステムが arp 応答を返したり arp 要求を送信したりする際の動作を制御するために使用されます。これら 2 つのパラメータは、特に LVS の DR シナリオでは非常に重要です。これらの設定は、DR 転送が正常かどうかに直接影響します。

arp-ignore: arp_ignore パラメータは、外部 ARP 要求を受信したときにシステムが ARP 応答を返すかどうかを制御するために使用されます (0~8、2-8 はほとんど使用されません)

設定ファイル: /etc/sysctl.conf 、次のファイルをそこにコピーします。

ネット.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.default.arp_ignore = 1
ネット.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2

構成を更新します:

sysctl -p

ルートを追加します。この時点でルートを認識できない場合は、関連yum install net-tools tools をインストールする必要があります。

ルート追加 -host 192.168.183.150 dev lo:1

データ パケットを受信するためにホスト アドレスが追加されます。データ パケットを受信すると、lo:1 に渡されて処理されます。 (シャットダウンの失敗を防ぐには、上記のコマンドを/etc/rc.localに追加する必要があります)

ホストを追加した後、 route -nをチェックすると、その効果を明確に確認できます。

192.168.183.135でも上記の設定を行う必要があります。

3.4 クラスタ構成

ipvsadm コマンドの説明:

ipvsadm -A: クラスターの作成に使用
ipvsadm -E: クラスタを変更するために使用
ipvsadm -D: クラスターを削除するために使用
ipvsadm -C: クラスタデータをクリアするために使用
ipvsadm -R: クラスタ構成ルールをリセットするために使用されます
ipvsadm -S: 変更されたクラスタルールを保存するために使用されます
ipvsadm -a: rsノードを追加するために使用されます
ipvsadm -e: rsノードを変更するために使用します
ipvsadm -d: rsノードを削除するために使用します

クラスター TCP サービス アドレスを追加します: (外部要求は、この構成で指定された VIP によって処理されます)

ipvsadm -A -t 192.168.183.150:80 -s rr

パラメータの説明:

  • -A: クラスタ構成を追加する
  • -t: TCP 要求アドレス (VIP)
  • -s: 負荷分散アルゴリズム

負荷分散アルゴリズム:

アルゴリズム例示する
rrポーリング アルゴリズムは、要求を異なる RS ノードに順番に分散します。つまり、要求を RS ノード間で均等に分散します。このアルゴリズムは単純ですが、RS ノードの処理パフォーマンスが同等である状況にのみ適しています。
うわー異なる RS の重みに応じてタスクを割り当てる、重み付けラウンドロビン スケジューリング。重みが高い RS はタスクの取得において優先され、重みが低い RS よりも多くの接続が割り当てられます。同じ重みを持つ RS は同じ数の接続を取得します。
ウェル重み付け最小接続数スケジューリング。各RSのフルタイムをWi、現在のTCP接続数をTiと仮定し、Ti/Wiが最小のRSが次に割り当てられるRSとして選択される。
ダッ宛先ハッシュは、宛先アドレスをキーワードとして静的ハッシュテーブルを検索し、必要なRSを取得します。
SH送信元アドレスハッシュは、送信元アドレスをキーワードとして静的ハッシュテーブルを検索し、必要なRSを取得します。
液晶最小接続スケジューリングでは、IPVS テーブルにすべてのアクティブな接続が格納されます。 LB は、現在の接続数が最も少ない RS と比較して、接続要求を送信します。
LBLC局所性に基づく最小接続スケジューリング: サーバーがまだ完全にロードされていない場合、同じ宛先アドレスからの要求を同じ RS に割り当てます。それ以外の場合、リクエストは接続数が最も少ない RS に割り当てられ、次の割り当てでは最初に考慮されます。

DSでrs(2)ノードを構成する:

ipvsadm -a -t 192.168.183.150:80 -r 192.168.183.134:80 -g
ipvsadm -a -t 192.168.183.150:80 -r 192.168.183.135:80 -g

パラメータの説明:

  • -a: クラスターにノードを追加する
  • -t: VIPアドレスを指定する
  • -r: 実サーバアドレスを指定する
  • -g: LVSモードがdrモードであることを示します

ノードを追加した後、ipvsadm -Ln で確認すると、さらに 2 つのノードがあることがわかります。

このとき、クラスター リスト内のクライアント要求データと TCP 通信データは永続的に保存されます。効果をよりよく確認するには、次のように保存時間を 2 秒に設定できます。

ipvsadm --set 2 2 2

今回はhttp://192.168.183.150/リクエストします

リクエストが 2 つの Nginx ポーリング間で切り替えられることがわかります。

Lvs+Nginx クラスターを使用して高並列アーキテクチャを構築する実装例に関するこの記事はこれで終わりです。Lvs Nginx クラスターを使用して高並列アーキテクチャを構築する関連コンテンツの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援してください。

以下もご興味があるかもしれません:
  • 高い同時実行性の下でNginxのパフォーマンスを最適化する方法をまとめます
  • Nginx10m+の高並列カーネル最適化に関する簡単な説明
  • 高同時実行シナリオにおける nginx 最適化の詳細な説明
  • Nginx+Lua+Redis は高並列 Web アプリケーションを構築します

<<:  純粋なCSSを使用してスクロールシャドウ効果を実現します

>>:  MySQL最適化ソリューション: スロークエリログを有効にする

推薦する

ウェブページの背景色を制御する CSS コード

誰もが自分の Web ページの背景にふさわしい画像を見つけることに悩むことが多いと思います。これは事...

LeetCode の SQL 実装 (197. 気温上昇)

[LeetCode] 197.気温上昇Weather テーブルが指定されている場合、前の日付 (昨...

Web面接でよくある質問:リフローとリペイントの原理と違い

目次ブラウザのレンダリングメカニズムリフローと再塗装リフロー逆流を引き起こす行為:再描画再描画を引き...

Vue3サンドボックスの仕組みの詳しい説明

目次序文ブラウザコンパイル版ローカルプリコンパイルバージョン要約する参照する序文vue3サンドボック...

ウェブページをデザインする際に注意すべきいくつかの問題

Web デザインは、個人の好みや Web ページの内容に応じて、デザインのレイアウトが常に変化します...

MySQL で SQL 文の実行時間を表示する方法

目次1. 初期SQLの準備2.MysqlはSQL文の実行時間をチェックします3. さまざまなクエリの...

位置のいくつかの巧妙な応用の詳細な説明:sticky スティッキーポジショニング

背景: position:sticky はスティッキー配置とも呼ばれます。スティッキー配置の要素は、...

MySQL 5.5.27 インストール グラフィック チュートリアル

1. MYSQLのインストール1. ダウンロードしたMySQLインストールファイルmysql-5.5...

VMware15.5 インストール Ubuntu20.04 グラフィック チュートリアル

1. インストール前の準備1. 公式ウェブサイトからUbuntu 20.04のイメージファイルを直接...

Vueはツリー構造の追加、削除、変更、チェックのサンプルコードを実装します

実は多くの会社がユーザー権限ツリーに似た機能を持っています。最近、追加、削除、修正のツリー構造を書き...

Postman に基づく HTTP インターフェース テスト プロセスの分析

偶然、素晴らしい人工知能のチュートリアルを発見したので、みんなと共有せずにはいられませんでした。この...

CSS3実践手法のまとめ(推奨)

1. 丸い境界線: CSSコードコンテンツをクリップボードにコピー境界線の半径: 4px ; 2....

クールなIoT大画面機能を実現するHTML+VUEページング

効果デモ.html <html> <ヘッド> <メタ文字セット=&qu...

Vue3 Reactivityの実装方法を教えます

目次序文始めるちょっとした考えコードの実装真似する実装トラックトリガーの実装観察の実装計算の実装序文...

固定テーブル幅テーブルレイアウト: 固定

テーブルを画面全体(残りの空白領域)に表示するために、幅属性は 100% と定義されることが多く、セ...