記事のディレクトリ
前書き
クラスター(またはクラスター)という名前は、英語の「Cluwster」という単語に由来します。これは、グループまたは束を意味し、サーバーフィールドで使用される場合、単一のサーバーと区別するために多数のサーバーの集合を意味します。企業の実際の環境によっては、クラスターが提供する機能も異なり、使用する技術的な詳細には独自のメリットがある場合があります。ここでは、クラスター構造、作業モード、LVS仮想アプリケーション、およびNFS共有ストレージについて簡単に紹介します。
1.負荷分散クラスターの原理
1.1エンタープライズクラスターアプリケーションの概要
クラスターの意味
- クラスター、クラスター、クラスター
- 複数のホストで構成されていますが、全体として外部にのみ表示されます
問題
- インターネットアプリケーションでは、サイトのハードウェアパフォーマンス、応答速度、サービスの安定性、データの信頼性などに対する要件がますます高まっているため、単一のサーバーではそうすることができません。
解決
- 高価なミニコンピューターとメインフレームを使用する
- 通常のサーバーを使用してサービスクラスターを構築する
補足紹介:
- Alibaba CloudのSLBは一般的な負荷分散スケジューラであり、ECSはクラウドホスト(仮想マシン)です。
- SLBはECSをスケジュールし、複数のECSがリソースプールを形成して、クラウドコンピューティングの基盤を形成します。
1.2エンタープライズクラスターの分類
-
クラスターの種類に関係なく、少なくとも2つのノードサーバーが含まれます
-
クラスターのターゲットの違いによる分類負荷分散クラスター
高可用性クラスター
高性能コンピューティングクラスター
1.2.1負荷分散クラスター
- アプリケーションシステムの応答性を改善し、できるだけ多くのアクセス要求を処理し、目標としての待ち時間を短縮し、高い同時実行性と高い負荷(LB)の全体的なパフォーマンスを実現します。たとえば、DNSポーリング、アプリケーション層の切り替え、リバースプロキシなどは、すべて負荷分散クラスターとして使用できます。
- LBの負荷分散は、マスターノードのオフロードアルゴリズムに依存して、クライアントから複数のサーバーノードへのアクセス要求を共有し、それによってシステム全体の負荷圧力を軽減します。
1.2.2高可用性クラスター
- 目標は、アプリケーションシステムの信頼性を向上させ、中断時間を可能な限り短縮し、サービスの継続性を確保し、高可用性(HA)のフォールトトレランス効果を実現することです。たとえば、フェイルオーバー、デュアルシステムホットバックアップ、マルチシステムホットバックアップはすべて高可用性クラスターテクノロジーです。
- HAの動作モードには、デュプレックスモードとマスタースレーブモードがあります。デュプレックスとは、同時に動作することを意味します。マスタースレーブとは、マスターノードのみがオンラインであることを意味しますが、障害が発生すると、スレーブノードは自動的にマスターノードに切り替えることができます。
1.2.3高性能コンピュータークラスター
-
目標は、アプリケーションシステムのCPUコンピューティング速度を向上させ、ハードウェアリソースと分析機能を拡張し、大規模なスーパーコンピューターと同等のハイパフォーマンスコンピューティング(HPC)機能を取得することです。たとえば、クラウドコンピューティングとグリッドコンピューティングは、一種のハイパフォーマンスコンピューティングと見なすこともできます。
-
高性能は「分散コンピューティング」と「並列コンピューティング」に依存し、複数のサーバーのCPU、メモリ、その他のリソースが専用のハードウェアとソフトウェアを介して統合され、大型スーパーコンピューターだけが持つコンピューティング機能を実現します。
1.3負荷分散の階層構造
1.3.1概要
- 一般的な負荷分散クラスターには、3つのレベルのコンポーネントがあります。フロントエンドには、クライアントからのアクセス要求のロードと分散に応答するためのロードスケジューラが少なくとも1つあります。バックエンドは、実際のアプリケーションサービスを提供するサーバープールを形成する多数の実サーバーで構成されています。全体のスケーラビリティクラスターは、サーバーノードを追加または削除することで実現されます。プロセスはクライアントに対して透過的です。サービスの一貫性を維持するために、すべてのノードが共有ストレージデバイスを使用します。
1.3.2負荷分散アーキテクチャ
- 最初のレイヤー、ロードスケジューラ(ロードバランサーまたはディレクター)
- 2番目の層であるサーバープール(サーバープール)
- 第3層、共有ストレージ(共有ストレージ)
1.3.3負荷分散アーキテクチャの詳細な紹介
- ロードスケジューラ:これは、クラスターシステム全体にアクセスするための唯一の入り口であり、すべてのサーバーに共通のVIP(仮想IP)アドレス(クラスターIPアドレスとも呼ばれます)を使用します。通常、メインスケジューラとバックアップスケジューラの2つのスケジューラは、ホットバックアップを実現するように構成されています。メインスケジューラに障害が発生すると、高可用性を確保するためにバックアップスケジューラにスムーズに置き換えられます。
- サーバープール:クラスターはアプリケーションサービスを提供し、サーバープールによって負担されます。クラスター内の各ノードには独立したRIP(実IP)アドレスがあり、スケジューラーによって分散されたクライアント要求のみを処理します。ノードに障害が発生すると、ロードスケジューラーフォールトトレラントメカニズムはそれらを分離し、エラーが解消されるのを待ってからサーバープールに再び入ります。
- 共有ストレージ:サーバープール内のすべてのノードに安定した一貫性のあるファイルアクセスサービスを提供して、クラスター全体の統合を確保します。
1.4負荷分散の作業モード
- クラスター負荷スケジューリング技術に関しては、IP、ポート、コンテンツなどに基づいて分散することができ、IPベースの負荷スケジューリングの効率が最も高くなります。IPベースの負荷分散モードには、アドレス変換、IPトンネル、および直接ルーティングの3つの一般的な動作モードがあります。
1.4.1ネットワークアドレス変換
- NATモードと呼ばれ、ファイアウォールのプライベートネットワーク構造に似ています。ロードスケジューラは、すべてのサーバーノードのゲートウェイとして機能します。つまり、クライアントのアクセス入口として機能し、各ノードのアクセス出口としても機能します。クライアントへの応答。
- サーバーノードはプライベートIPアドレスを使用し、ロードスケジューラと同じ物理ネットワーク上にあり、セキュリティは他の2つの方法よりも優れています。
1.4.2IPトンネル
- TUNモードと呼ばれ、オープンネットワーク構造を採用しています。ロードスケジューラはクライアントのアクセスポータルとしてのみ機能します。各ノードは、ロードスケジューラを経由せずに、独自のインターネット接続を介してクライアントに直接応答します。
- サーバーノードはインターネット上のさまざまな場所に分散しており、独立したパブリックIPアドレスを持ち、専用のIPトンネルを介してロードスケジューラと通信します。
1.4.3直接ルーティング
- DRモードと呼ばれる、TUNモードの構造に似たセミオープンネットワーク構造を採用していますが、ノードはどこにでも散在しているわけではなく、スケジューラと同じ物理ネットワーク上にあります。
- ロードスケジューラはローカルネットワークを介して各ノードサーバーに接続されており、専用のIPトンネルを確立する必要はありません。
DRモードとTUNモードの違い: - 同じ点:すべてのWebノードがクライアントに直接応答します。
- 異なる:TUNモードには独立したパブリックテストがありますが、DRにはありません。TUNWebノードはスケジューラIPトンネルと通信し、DR Webノードはローカルエリアネットワークと通信します。TUNモードWebノードは直接応答し、DRモードWebノードはルーターを介して応答します。
1.53つの動作モードの違い
作業モードの違い | NATモード | TUNモード | DRモード |
---|---|---|---|
実サーバー(ノードサーバー) | |||
サーバー番号(ノード数) | 低10-20 | 高100 | 高100 |
本当のゲートウェイ | ロードスケジューラ | 自分のルーター | 無料ルーター |
IPアドレス | パブリックネットワーク+プライベートネットワーク | パブリックネット | プライベートネットワーク |
利点 | 高いセキュリティ | WAN環境で暗号化されたデータ | 最高のパフォーマンス |
不利益 | 低効率と高圧 | トンネルサポートが必要 | LANにまたがることができません |
2.LVS仮想サーバー
2.1概要
- Linux Virtual Serverは、私の国のWensongZhang博士によって1998年5月に作成されたLinuxカーネルの負荷分散ソリューションです。LVSは、実際にはIPアドレスに基づく仮想化アプリケーションと同等であり、IPアドレスとコンテンツ要求の分散に基づく負荷分散のための効率的なソリューションを提案します。
- LVSはLinuxカーネルの一部になり、デフォルトでip_vsモジュールとしてコンパイルされ、必要に応じて自動的に呼び出すことができます。
[root@localhost~]# modprobe ip_vs '//加载ip_vs模块,确认内核对LVS的支持'
[root@localhost~]# cat /proc/net/ip_vs '//查看ip_vs版本信息'
2.2LVSロードスケジューリングアルゴリズム
2.2.1ラウンドロビン
- 受信したアクセス要求は、クラスター内の各ノード(実サーバー)に順番に割り当てられ、実際のサーバー接続数やシステム負荷に関係なく、各サーバーは同等に扱われます。
2.2.2加重ラウンドロビン
- 実サーバーの処理能力に応じて、受信したアクセス要求が順番に割り当てられます。スケジューラーは、各ノードの負荷状況を自動的に照会し、その重みを動的に調整して、強力な処理能力を備えたサーバーがより多くのアクセストラフィックを処理できるようにします。
2.2.3最小の接続
- 実サーバーで確立された接続数に応じて割り当てが行われ、受信したアクセス要求は接続数が最も少ないノードに優先的に割り当てられます。すべてのサーバーノードのパフォーマンスが類似している場合、この方法で負荷分散を改善できます。
2.2.4加重最小接続
- サーバーノードのパフォーマンスに大きな違いがある場合は、実際のサーバーに合わせて重みを自動的に調整できます。重みが大きいノードほど、アクティブな接続負荷の割合が大きくなります。
2.3ipvsadm管理ツールを使用する
LVSクラスターの作成と管理
- 仮想サーバーを作成する
- サーバーノードの追加、削除
- クラスターとノードのステータスを表示する
- 負荷分散戦略を保存する
3.LVS負荷分散クラスターを構築します
3.1ケース環境
- LVSスケジューラーは、Webサーバープールのゲートウェイとして、ラウンドロビン(rr)スケジューリングアルゴリズムを使用して、内部ネットワークと外部ネットワークにそれぞれ接続された2つのLVSネットワークカード(VM1とVM2)を備えています。
LVS負荷分散クラスターアドレス変換モード(LVS-NAT)環境
(1)1台のディスパッチサーバー
- IPアドレス:192.168.70.10(イントラネットVM1)
- IPアドレス:192.168.80.10(外部ネットワークVM2)
(2)2つのWebサーバー
- IPアドレス:192.168.70.11(サーバーAA)
- IPアドレス:192.168.70.12(サーバーAB)
注:Webサーバーのゲートウェイは、ディスパッチャーの内部ネットワークカードを指している必要があります。
(3)NFS共有サーバー
- IPアドレス:192.168.70.13
(4)テストと検証のためのwin7を例に取った1つのクライアント
- IPアドレス:192.168.70.14(イントラネット)
- IPアドレス:192.168.80.14(外部ネットワーク)
注:同じネットワークセグメントが相互に通信できることを確認する必要があります
3.2実験目的
- win10クライアントは、NATアドレス変換を介して192.168.70.10 Webサイトにアクセスし、Apache1およびApache2ホストへのアクセスをポーリングします。
- nfsネットワークファイルストレージサービスを構築します。
3.3展開手順
- ip_vsモジュールをロードし、ipvsadmツールをインストールします
- ルーティングと転送をオンにします。
- 新しいLVS仮想サーバーを作成し、ノードサーバーを追加します。
- ノードサーバーの構成:
テストWebサイトの確立、
NFS共有ストレージのマウント
、テストWebページの確立 - ルールを保存してテストする
3.4プロジェクトのステップ
3.4.1ファイアウォールをオフにします
iptables -F
setenforce 0
systemctl stop firewalld
3.4.2NFSストレージサーバーの構成
[root@nfs ~]# rpm -qa | grep rpcbind //默认虚拟机已安装rpcbind模块
rpcbind-0.2.0-42.el7.x86_64
[root@nfs ~]# yum -y install nfs-utils //确认是否安装nfs-utils软件包
已加载插件:fastestmirror, langpacks
base | 3.6 kB 00:00
Loading mirror speeds from cached hostfile
* base:
软件包 1:nfs-utils-1.3.0-0.48.el7.x86_64 已安装并且是最新版本
无须任何处理
[root@nfs ~]# mkdir /opt/web1
[root@nfs ~]# mkdir /opt/web2
[root@nfs ~]# echo "<h1>this is web1.</h1>" > /opt/web1/index.html
[root@nfs ~]# echo "<h1>this is web2.</h1>" > /opt/web2/index.html
[root@nfs ~]# vi /etc/exports
/opt/web1 192.168.70.11/32 (ro)
/opt/web2 192.168.70.12/32 (ro)
[root@nfs ~]# systemctl restart nfs
[root@nfs ~]# systemctl restart rpcbind
[root@nfs ~]# showmount -e
Export list for nfs:
opt/web2 (everyone)
/opt/web1 (everyone)
3.4.3Webサイトサーバーの構成
yum -y install httpd
[root@web1 ~]# showmount -e 192.168.70.13
Export list for 192.168.70.13:
opt/web2 (everyone)
/opt/web1 (everyone)
[root@web1 ~]# mount 192.168.70.13:/opt/web1 /var/www/html
[root@web1 ~]# systemctl restart httpd
[root@web1 ~]# netstat -anpt | grep httpd
tcp6 0 0 :::80 :::* LISTEN 55954/httpd
[root@web2 ~]# mount 192.168.70.13:/opt/web2 /var/www/html
[root@web2 ~]# systemctl restart httpd
[root@web2 ~]# netstat -anpt | grep httpd
tcp6 0 0 :::80 :::* LISTEN 54695/httpd
3.4.4LVSディスパッチサーバーで構成する
[root@lvs ~]# vi /etc/sysctl.conf
...
net.ipv4.ip_forward=1
[root@lvs ~]# sysctl -p '//开启路由地址转换'
net.ipv4.ip_forward=1
[root@lvs ~]# modprobe ip_vs '//加载ip_vs模块'
[root@lvs ~]# cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@lvs ~]# yum -y install ipvsadm
[root@lvs ~]# vi nat.sh
#!/bin/bash
ipvsadm -C
ipvsadm -A -t 192.168.80.10:80 -s rr
ipvsadm -a -t 192.168.80.10:80 -r 192.168.70.11:80 -m
ipvsadm -a -t 192.168.80.10:80 -r 192.168.70.12:80 -m
ipvsadm -Ln
//
-C:'表示清除缓存'
-A:'添加地址为192.168.80.10:80的虚拟地址,指定调度算法为轮询'
-a: '指定真实服务器,指定传输模式为NAT'
-t:'访问的入口地址,VIP'
rr:'表示轮询'
-m:'指的是NAT模式'
スクリプトを実行してサービスを開始します
[root@lvs ~]# sh nat.sh
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.80.10:80 rr
-> 192.168.70.11:80 Masq 1 0 0
-> 192.168.70.12:80 Masq 1 0 0
- スケジューラが2つのWebページにアクセスできるかどうかを確認します
3.4.5検証結果
- ブラウザでアクセス
- クラスタの実際のスケジューリングの詳細を表示する
[root@lvs ~]# ipvsadm -lnc '//查看真实调度明细'
IPVS connection entries
pro expire state source virtual destination
TCP 01:20 FIN_WAIT 192.168.80.1:51398 192.168.80.10:80 192.168.70.11:80
TCP 00:44 TIME_WAIT 192.168.80.1:51378 192.168.80.10:80 192.168.70.12:80
TCP 00:29 TIME_WAIT 192.168.80.1:51371 192.168.80.10:80 192.168.70.11:80
TCP 00:17 TIME_WAIT 192.168.80.1:51356 192.168.80.10:80 192.168.70.12:80
TCP 11:39 ESTABLISHED 192.168.80.1:51301 192.168.80.10:80 192.168.70.11:80