LVSロードバランシングの原則、NATモードでのLVSロードバランシングの実際の展開(詳細な図とテキスト!)
記事のディレクトリ
1つは、クラスターテクノロジーです。
1.クラスターの意味
いわゆるクラスターは、クラスター(クラスター)とも呼ばれます。複数のホストで構成されていますが、全体として外部にのみ表示され、1つのアクセスエントリ(ドメイン名またはIP)のみを提供します。これは、大規模なコンピューターに相当します。
実際のアプリケーションでは、Webサーバークラスターの前に常に負荷分散サーバーがあります。負荷分散デバイスのタスクは、Webサーバートラフィックへの入り口として機能し、最適なWebサーバーを選択し、クライアントの要求をに転送することです。クライアントから実サーバーへの透過的な転送。
LVS、Nginx、およびHAProxyは、現在最も広く使用されている3つのソフトウェア負荷分散ソフトウェアです。
2.該当するシナリオ
負荷分散の使用は、一般に、Webサイトの規模が大きくなるにつれて、さまざまな段階でさまざまなテクノロジーを使用することに基づいています。
たとえば、中小規模のWebアプリケーションの場合、1日あたりのPVは1,000万未満であり、Nginxを使用してもまったく問題ありません。
マシンが多い場合は、DNSポーリングを使用できます。LVSは多くのマシンを消費します。
大規模なWebサイトや重要なサービスで、サーバーの数が多い場合は、LVSの使用を検討できます。
現在、Webサイトアーキテクチャには一般的に合理的で人気のあるアーキテクチャスキームがあります。Nginx/ HAProxy + KeepalivedがWebのフロントエンドのロードバランサーとして使用され、バックエンドは1つのマスターと複数のスレーブを備えたMySQLデータベースと読み取り/書き込みを使用します。分離し、LVS + Keepalivedアーキテクチャが採用されています。
3.クラスターの存在の重要性
3.1問題の出現
インターネットアプリケーションでは、サイトのハードウェアパフォーマンス、応答速度、サービスの安定性、およびデータの信頼性に対する要件がますます高まっているため、単一のサーバーで負荷分散と高可用性の要件を満たすことができなくなりました。
3.2解決策
方法1:高価なミニコンピューターとメインフレームを使用します。(高コスト)
方法2:比較的安価な複数の通常のサーバーを使用してサービスクラスターを構築します。(低価格)
ほとんどの企業は、方法2を選択して複数のサーバーを統合し、LVSを使用して高いサーバー可用性と負荷分散を実現し、同じIPアドレスから外部に同じサービスを提供します。そして、これは企業で一般的に使用されているクラスターテクノロジーです-LVS(Linux Virtual Server、Linux VirtualServer)。
注:最初のタイプは垂直方向の拡張で、2番目のタイプは水平方向の拡張です。
2.クラスターの種類
1.クラスターのターゲットの違いに応じて、3つのタイプに分けることができます
負荷分散クラスター
高可用性クラスター
高性能コンピューティングクラスター
2.3つのクラスターの概要
負荷分散クラスター
- アプリケーションシステムの応答性を改善し、可能な限り多くのアクセス要求を処理し、待ち時間を短縮することを目的として、高い同時実行性と負荷(LB)の全体的なパフォーマンスが得られます。
- LBの負荷分散は、マスターノードのオフロードアルゴリズムに依存しています。マスターノードは、クライアントからのアクセス要求を複数のサーバーノードに分散するため、システム全体の負荷が軽減されます。
高可用性クラスター
- アプリケーションシステムの信頼性を向上させ、中断時間を可能な限り短縮し、サービスの継続性を確保し、高可用性(HA)のフォールトトレランス効果を実現します。
- HAの動作モードには、デュプレックスモードとマスタースレーブモードがあります。デュプレックスとは、すべてのノードが同時にオンラインであることを意味します。マスタースレーブとは、マスターノードのみがオンラインであることを意味しますが、障害が発生すると、スレーブノードは自動的にマスターノード。
例:「フェイルオーバー」、「デュアルシステムホットバックアップ」など。
高性能コンピュータークラスター
- アプリケーションシステムのCPUコンピューティング速度を向上させ、ハードウェアリソースと分析機能を拡張することを目的として、大規模なスーパーコンピューターのハイパフォーマンスコンピューティング(HPC)機能と同等の機能を取得します。
- ハイパフォーマンスコンピューティングクラスターのハイパフォーマンスは、「分散コンピューティング」と「並列コンピューティング」に依存しています。複数のサーバーのCPU、メモリ、その他のリソースが専用のハードウェアとソフトウェアによって統合され、大型のスーパーコンピューターだけが持つコンピューティング機能を実現します。 。
3、負荷分散クラスターアーキテクチャ
1.負荷分散構造
- 最初のレベルでは、ロードスケジューラ(ロードバランサーまたはディレクター)
がクラスターシステム全体の一意の入り口にアクセスし、外部のすべてのサーバーで共有されるVIPアドレス(クラスターIPアドレスとも呼ばれます)を使用します。通常、メインとバックアップの2つのスケジューラは、ホットバックアップを実現するように構成されています。メインスケジューラに障害が発生した場合、高可用性を確保するために、メインスケジューラをバックアップスケジューラにスムーズに置き換えることができます。 - 2番目の層で
あるサーバープール(サーバープール)クラスターによって提供されるアプリケーションサービスは、サーバープールによって支えられます。サーバープールでは、各ノードが独立したRIPアドレス(実際のIP)を持ち、スケジューラーによって分散されたクライアント要求のみを処理します。ノードに一時的な障害が発生すると、ロードスケジューラのフォールトトレラントメカニズムがノードを分離し、エラーが解消されるのを待ってから、ノードをサーバープールに再入力します。 - 第3層の共有ストレージ
は、サーバープール内のすべてのノードに安定した一貫性のあるファイルアクセスサービスを提供し、クラスター全体の統合を保証します。共有ストレージは、NASデバイスを使用することも、NFS共有サービス専用のサーバーを提供することもできます。
2.LVSロードバランシングメカニズム
- LVSは4層の負荷分散であり、OSIモデルの4番目の層であるトランスポート層に基づいて構築されています。トランスポート層には使い慣れたTCP / UDPがあり、LVSはTCP / UDP
負荷分散をサポートしています。 - LVSは4層の負荷分散であるため、DNSドメイン名のローテーション解決、アプリケーション層の負荷スケジューリング、クライアントスケジューリングなど、他の高レベルの負荷分散ソリューションと比較して、その効率は非常に高くなっています。
3.負荷分散クラスターの動作モードの分析
- 負荷分散クラスターは、現在、企業で最も一般的に使用されているクラスタータイプです。
- クラスター負荷スケジューリングテクノロジーには3つの動作モードがあり、モードは次のとおりです。
3.1 NATモード:アドレス変換
- NATモードと呼ばれるネットワークアドレス変換
- ファイアウォールのプライベートネットワーク構造と同様に、ロードスケジューラは、すべてのサーバーノードのゲートウェイとして機能します。つまり、クライアントのアクセス入口として機能し、クライアントに応答する各ノードのアクセス出口としても機能します。
- サーバーノードはプライベートIPアドレスを使用し、ロードスケジューラと同じ物理ネットワーク上にあります。セキュリティは他の2つの方法よりも優れています。
3.2 TUNモード:IPトンネル
- TUNモードと呼ばれるIPトンネル
- オープンネットワーク構造を採用しているため、ロードスケジューラはクライアントのアクセス入口としてのみ機能し、各ノードはロードスケジューラを通過するのではなく、独自のインターネット接続を介してクライアントに直接応答します。
- サーバーノードはインターネットのさまざまな場所に分散しており、独立したパブリックIPアドレスを持ち、専用のIPトンネルを介してロードスケジューラと通信します。
3.3DRモード:直接ルーティング
- DRモードと呼ばれる直接ルーティング
- TUNモデルの構造と同様のセミオープンネットワーク構造を採用していますが、ノードはどこにでも散在しているわけではなく、スケジューラと同じ物理ネットワーク上にあります。
- ロードスケジューラは、専用のIPトンネルを確立することなく、ローカルネットワークを介して各ノードサーバーに接続されます。
上記の3つの動作モードで
- NAT方式ではパブリックIPアドレスが1つだけ必要なため、セキュリティが強化された負荷分散モードを最も簡単に使用できます。多くのハードウェア負荷分散デバイスはこの方式を使用します。
- DRモードとTUNモードは、より強力な負荷容量とより広いアプリケーション範囲を備えていますが、ノードのセキュリティはわずかに劣っています。
4、LVS仮想サーバーについて
1.Linux仮想サーバー
●Linuxカーネル用に開発された負荷分散ソリューション
●1998年5月に中国のZhangWensong博士によって設立されました
●公式ウェブサイト:http://www.linuxvirtualserver.orgl●LVS
は、実際にはIPアドレスに基づく仮想化アプリケーションと同等です。 IPアドレスとコンテンツリクエストの配布は効率的なソリューションを提案します
2.LVSの重要性
LVSはLinuxカーネルの一部になり、デフォルトでip_ vsモジュールとしてコンパイルされ、必要に応じて自動的に呼び出すことができます。CentOS 7システムでは、次の操作でip_ vsモジュールを手動でロードし、現在のシステムのip_vsモジュールのバージョン情報を表示できます。
#加载ip_va模块
modprobe ip_vs
#确认内核对LVS的支持
cat /proc/net/ip_vs
3. LVS管理ツール:ipvsadm
ipvsadm関数とオプションの説明
オプション | 関数 |
---|---|
-A | 仮想サーバーを追加する |
-D | 仮想サーバー全体を削除します |
-s | ロードスケジューリングアルゴリズムを指定します(ポーリング:rr、加重ラウンドロビン:wrr、最小接続:lc、加重最小接続:wlc) |
-a | 実サーバー(ノードサーバー)を追加する手段 |
-d | ノードを削除します |
-t | VIPアドレスとTCPポートを指定します |
-r | RIPアドレスとTCPポートを指定します |
-m | NATクラスターモードの使用を示します |
-g | DRモードの使用を示します |
-私 | TUNモードを使用する手段 |
-w | 重みを設定します(重みが0の場合、ノードは一時停止されます) |
-p 60 | 60秒間長い接続を維持する手段 |
-l | リスト内のLVS仮想サーバーを表示します(デフォルトではすべてを表示します) |
-n | アドレス、ポート、その他の情報をデジタル形式で表示します。多くの場合、「-l」オプションと組み合わせて使用されます。ipvsadm -ln |
4.LVSロードスケジューリングアルゴリズム
1)ラウンドロビン
●受信したアクセス要求は、クラスター内の各ノード(実サーバー)に順番に割り当てられ、実際の接続数やサーバーのシステム負荷に関係なく、各サーバーは同等に扱われます。
2)加重ラウンドロビン
●スケジューラによって設定された重み値に従ってリクエストを分散します。重み値が高いノードが最初にタスクを取得し、より多くのリクエストが割り当てられます。
●パフォーマンスの高いサーバーがより多くのアクセストラフィックを処理できるようにします。
3)最小の接続
●実サーバーによって確立された接続数に応じて、受信したアクセス要求は、最初に接続数が最も少ないノードに割り当てられます。
4)加重最小接続(加重最小接続)
●サーバーノードのパフォーマンスの差が大きい場合、実サーバーの重みを自動的に調整できます
●パフォーマンスの高いノードは、アクティブな接続負荷の大部分を負担します
5、LVS負荷分散NATモードクラスター展開
LVSスケジューラーはWebサーバープールのゲートウェイとして使用されます。LVSには、ラウンドロビン(rr)スケジューリングアルゴリズムを使用して、それぞれ内部ネットワークと外部ネットワークに接続された2つのネットワークカードがあります。
環境の展開
ホスト | オペレーティング・システム | IPアドレス | 必要なツール/サービス |
---|---|---|---|
ロードスケジューラ | CentOS7 7-2 |
内部ゲートウェイ:192.168.2.4 外部ゲートウェイ:12.0.0.1 |
ipvsadm |
NFSサーバー | CentOS7 7-3 |
192.168.2.5 | rpcbind、nfs-utils |
Webノードサーバー1 | CentOS7 7-4 |
192.168.2.6 | rpcbind、nfs-utils、httpd |
Webノードサーバー2 | CentOS7 7-5 |
192.168.2.7 | rpcbind、nfs-utils、httpd |
クライアント | ウインドウズ10 | 12.0.0.10 |
注:ロードディスパッチャーのゲートウェイは、独自のIPに設定することも、設定しないこともできます。サーバーとクライアントのゲートウェイを設定する必要があります。アドレスは、ロードディスパッチャーの内部および外部ゲートウェイアドレスです。(クロスネットワークアクセスにはゲートウェイが必要です)
1.NFS共有ストレージを展開します
CentOS7-3 192.168.2.5
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
yum -y install nfs-utils rpcbind
systemctl start rpcbind.service
systemctl start nfs.service
systemctl enable nfs.service
systemctl enable rpcbind.service
mkdir /opt/test1
mkdir /opt/test2
chmod 777 /opt/test1
chmod 777 /opt/test2
vim /etc/exports
/opt/test1 192.168.2.0/24(rw,sync)
/opt/test2 192.168.2.0/24(rw,sync)
exportfs -rv
2.ノードサーバーを構成します
Web1サーバー:CentOS7-4 192.168.2.6
Web2サーバー:CentOS7-5 192.168.2.7
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
yum install httpd -y
systemctl start httpd.service
systemctl enable httpd.service
yum -y install nfs-utils rpcbind
systemctl start rpcbind
systemctl enable rpcbind
showmount -e 192.168.2.5
Web1サーバー:CentOS7-4 192.168.2.6
mount.nfs 192.168.2.5:/opt/test1 /var/www/html
df -h
echo 'this is test1 web!' > /var/www/html/index.html
Web2サーバー:CentOS7-5 192.168.2.7
mount.nfs 192.168.2.5:/opt/test2 /var/www/html
df -h
echo 'this is test2 web!' > /var/www/html/index.html
3.ロードスケジューラを構成します
ロードスケジューラ:内部ゲートウェイens33:192.168.2.4、外部ゲートウェイens36:12.0.0.1
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
1)SNAT転送ルールを構成する
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
或
echo '1' > /proc/sys/net/ipv4/ip_forward
sysctl -p
iptables -t nat -F
iptables -F
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o ens36 -j SNAT --to-source 12.0.0.1
2)LVSカーネルモジュールをロードします
#加载 ip_vs模块
modprobe ip_vs
#查看 ip_vs版本信息
cat /proc/net/ip_vs
3)ipvsadm管理ツールをインストールします
yum -y install ipvsadm
#启动服务前须保存负载分配策略
ipvsadm-save > /etc/sysconfig/ipvsadm
或
ipvsadm --save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm.service
4)負荷分散戦略を構成します(NATモードはサーバーでのみ構成する必要があり、ノードサーバーに特別な構成は必要ありません)
#清除原有策略
ipvsadm -C
ipvsadm -A -t 12.0.0.1:80 -s rr
ipvsadm -a -t 12.0.0.1:80 -r 192.168.2.6:80 -m
ipvsadm -a -t 12.0.0.1:80 -r 192.168.2.7:80 -m
#启用策略
ipvsadm
#查看节点状态,Masq代表 NAT模式
ipvsadm -ln
#保存策略
ipvsadm-save > /etc/sysconfig/ipvsadm
4.テスト結果
ブラウザを使用して、IPが12.0.0.10のクライアントでhttp://12.0.0.1/にアクセスし、定期的に負荷分散効果を更新してテストします。