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最適化ソリューション: スロークエリログを有効にする

推薦する

Vue ソング プログレス バーのサンプル コード

なお、これはvue-cliで作成したプロジェクトではありません。vue.jsを参照して記述したHTM...

mysql 計算関数の詳細

目次2. フィールドの連結2. MySQL関数の例をいくつか挙げてください。 2.1 シンボル処理2...

SELinux 入門

カーネル 2.6 の時代には、アクセス制御セキュリティ ポリシーのメカニズムを提供するために新しいセ...

Baidu Union 環境での広告スキル (グラフィック チュートリアル)

最近、製品部門のユーザーエクスペリエンスチームの学生は、アライアンス環境における広告に関する一連の研...

あなたのウェブサイトはIE8に適していますか?

オリンピック期間中にIE8ベータ2がリリースされ、英語版のリリースに合わせて中国語版も第一波でリリー...

VueのTodoListケースの詳しい説明

<テンプレート> <div id="ルート"> <...

dockerでビルドしたnacos1.3.0の実装

1. nacosデータベースを再開します。データベース名nacos_configユーザー名とパスワー...

Zabbix が MySQL のマスター/スレーブ状態を監視する方法の詳細な説明

MySQLマスタースレーブを設定した後、スレーブの状態が正常かどうかわからないことが多く、例外が発生...

CentOS7 は rpm を使用して MySQL 5.7 をインストールするチュートリアル図

1. 4つのrpmパッケージをダウンロードする mysql-コミュニティクライアント-5.7.26-...

Centos7 から Centos8 へのアップグレードに関するチュートリアル (画像とテキスト付き)

正式な環境でアップグレードする場合は、データと重要な設定をバックアップしてください。アップグレードに...

システム CD をマウントして yum ウェアハウスを構築する VMware 15.5 バージョンのグラフィック チュートリアル

1. CentOS 7 仮想マシンを開きます。 2. 仮想マシンにログインし、リストにないユーザー名...

JSはプログレスバーをドラッグして要素の透明度を変更することを実装しています

今日ご紹介したいのは、ネイティブ JS を使用してプログレス バーをドラッグし、要素の透明度を変更す...

VSCode 開発 UNI-APP 構成チュートリアルとプラグイン

目次前面に書かれた予防開発環境構築開発構成に関する注意事項前面に書かれたuni-app は、Vue....

nginx サーバーでの 502 不正なゲートウェイ エラーの原因のトラブルシューティング

パブリックアカウントのファンデータを同期してバッチプッシュするときに、サーバーがエラー502を報告し...

良いリファクタリングを行うには、コードをリファクタリングするだけでなく、人生をリファクタリングすることも重要です。

職業的な観点からも、人生の観点からも、良い再建をすることは本当に簡単ではありません。楽観的で熱心で前...