LVS-DRクラスター
LVS-DRデータフロー分析
Webノードとスケジューラーは同じネットワークセグメント上にあり、スケジューラーからの着信と発信、およびWebノードからの発信です。
クライアント:クライアントディレクター:スケジューラサーバー:サーバー
スケジューラのens33:0(ens33仮想IP)は、サーバーのlo:0(ループバック仮想IP)と同じである必要があります。
1.クライアントがターゲットVIPにリクエストを送信し、ディレクター(ロードバランサー)がそれを受信します
IPヘッダーとデータフレームヘッダー情報
ソースMAC | dest MAC | … | ソースIP | dest IP | 宛先ポート | … |
---|---|---|---|---|---|---|
クライアントMAC | スケジューラMAC | … | クライアントIP | スケジューラVIP | 80 | … |
2. Directorは、負荷分散アルゴリズムに従ってサーバーを選択し、IPメッセージを変更またはカプセル化せずに、データフレームのMACアドレスをサーバーのMACアドレスに変更して、LANに送信します。
IPヘッダーとデータフレームヘッダー情報
ソースMAC | dest MAC | … | ソースIP | dest IP | 宛先ポート | … |
---|---|---|---|---|---|---|
スケジューラMAC | サーバーMAC | … | クライアントIP | スケジューラVIP | 80 | … |
3.サーバーはこのフレームを受信し、カプセル化解除後にターゲットIPがマシンと一致することを検出するため(サーバーはVIPにバインドする必要があります)、メッセージを処理します。次に、メッセージを再カプセル化してLANに送信します
IPヘッダーとデータフレームヘッダー情報
ソースMAC | dest MAC | … | ソースIP | dest IP | 宛先ポート | … |
---|---|---|---|---|---|---|
サーバーMAC | クライアントMAC | … | サーバーIP | クライアントIP | 80 | … |
4.クライアントは応答メッセージを受信します。クライアントタスクは、どのサーバーがそれらを処理するかを知らなくても通常どおり提供されます
LVS-DRARPの問題
質問1
LVS-DR負荷分散クラスターでは、ロードバランサーとノードサーバーを同じVIPアドレスで構成する必要があります
。ローカルエリアネットワークで同じIPアドレスを使用すると、各サーバーのARP通信が中断されます。APRブロードキャストの場合ロードバランサーとノードサーバーは両方とも同じネットワークに接続されており、両方ともARPブロードキャストを受信するため、はLVS-DRクラスターに送信されます。
解決
ノードサーバーがVIPのARP要求に応答しないように処理します。
仮想インターフェイスlo:0を使用してVIPアドレスを伝送します。
カーネルパラメータarp_ignore = 1を設定します。arp_ignore= 1の
場合、ネットワークカードはarpを受信します。宛先IPがループバックIPである要求。要求されたIPが自身のネットワークカード上のIPではなく、arpに応答しないことがわかりました。
質問2
ARPテーブルのエントリによると、ルーターは新しい要求メッセージをサーバーに転送し、ディレクターのVIPが無効になるようにします。
解決
ノードサーバーを処理し、カーネルパラメータarp_ignore = 2を設定します。システムは、IPパケットの送信元アドレスを使用してARP要求の送信元アドレスを設定せず、送信インターフェイスのIPアドレスを選択します。
添付ファイル:ARPの動作原理。
ARPは、ターゲットIPアドレスがわかっていて、ターゲットMACアドレスが不明な
場合の例を示します。PC1がPC2にメッセージを送信したいが、PC2のIPしか知らない場合、PC2のMACアドレスが不明な場合は送信します。 ARPを介してスイッチにブロードキャストフレームを送信すると、スイッチがそれを受信します。ブロードキャストフレームが到着すると、ブロードキャストは無条件に処理されます。このとき、スイッチに接続されているすべてのホストがブロードキャストフレームを受信し、IPかどうかを比較します。アドレスはターゲットIPアドレスと一致しています。一貫性がない場合は処理を破棄し、一貫性がある場合はメッセージに返信します。返信の過程で相手に自分のIPアドレスとMACアドレスを追加します。送信室がこのデータを受信したら、受信者のMACアドレスとIPアドレスを確認し、それらを一緒にARPキャッシュに入れます。
LVS-DRクラスターのデプロイメント
クラスタートポロジー図
展開環境
IP設定
仮想IP:192.168.2.100
装置 | IPアドレス | サブネットマスク | ゲートウェイ | ネットワークカード |
---|---|---|---|---|
LVS | 192.168.2.15 | 255.255.255.0 | ens33 | |
web1 | 192.168.2.16 | 255.255.255.0 | 192.168.2.15 | ens33 |
web2 | 192.168.2.17 | 255.255.255.0 | 192.168.2.15 | ens33 |
nfs | 192.168.2.18 | 255.255.255.0 | ens33 |
NFS共有ストレージ
1. nfs-utils、rpcbindソフトウェアパッケージをインストールする必要があります
yum -y install nfs-utils rpcbind
2.共有ディレクトリを設定します
(テストの便宜上、区別するために2つの異なるディレクトリを設定します)
mkdir /opt/web1
mkdir /opt/web2
echo "<html><title>web1</title><body><h1>This is web1</h1></body></html>" >> /opt/web1/index.html
echo "<html><title>web2</title><body><h1>This is web2</h1></body></html>" >> /opt/web2/index.html
vi /etc/exports
/opt/web1 192.168.2.16(ro)
/opt/web2 192.168.2.17(ro)
リブート
systemctl restart nfs
マシンによって公開されたNFS共有ディレクトリを表示する
showmount -e
web1ノード
テスト用にhttpdをインストールします
yum -y install httpd
NFSサーバーの共有ディレクトリを表示する
showmount -e 192.168.2.18
ディレクトリをWebサイトのルートディレクトリにマウントします
mount 192.168.2.18:/opt/web1 /var/www/html/
マウントが成功したかどうかを確認します
httpdを開く
systemctl start httpd
ファイアウォールをオフにします
systemctl stop firewalld
setenforce 0
vi /etc/selinux/config
テスト
curl http://localhost
スクリプトの編集
vim web1.sh
#!/bin/bash
#Lvs-Dr模式 web1
ifconfig lo:0 192.168.2.100 broadcast 192.168.2.100 netmask 255.255.255.255 up
route add -host 192.168.2.100 dev lo:0
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p &> /dev/null
スクリプトを実行する
web2ノード
web2ノードとweb1ノードは、いくつかのパラメータを変更することを除いて同じです。
テスト用にhttpdをインストールします
yum -y install httpd
NFSサーバーの共有ディレクトリを表示する
showmount -e 192.168.2.18
ディレクトリをWebサイトのルートディレクトリにマウントします
mount 192.168.2.18:/opt/web2 /var/www/html/
マウントが成功したかどうかを確認します
cat /var/www/html/index.html
httpdを開く
systemctl start httpd
ファイアウォールをオフにします
systemctl stop firewalld
setenforce 0
vi /etc/selinux/config
テスト
curl http://localhost
スクリプトの編集
vim web2.sh
#!/bin/bash
#Lvs-Dr模式 web2
ifconfig lo:0 192.168.2.100 broadcast 192.168.2.100 netmask 255.255.255.255 up
route add -host 192.168.2.100 dev lo:0
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p &> /dev/null
スクリプトを実行する
LVSスケジューラーのデプロイメント
1.ip_vsモジュールを手動でロードします
modprobe ip_vs
見る
cat /proc/net/ip_vs
ipvsadmをインストールします
yum -y install ipvsadm
2.スクリプトを書く
vim dr.sh
#!/bin/bash
#Lvs-dr
ifconfig ens33:0 192.168.2.100 broadcast 192.168.2.100 netmask 255.255.255.255 up
route add -host 192.168.2.100 dev ens33:0
ipvsadm -C
ipvsadm -A -t 192.168.2.100:80 -s rr
ipvsadm -a -t 192.168.2.100:80 -r 192.168.2.16:80 -g
ipvsadm -a -t 192.168.2.100:80 -r 192.168.2.17:80 -g
ipvsadm -Ln
ipvsadmオプション
オプション | 説明 |
---|---|
-C | カーネル仮想サーバーテーブルのすべてのレコードをクリアします |
-A | 仮想サーバーを追加する |
-a | 実サーバーを追加する |
-t | VIPアドレスとTCPポートを指定するために使用されます |
-r | RIPアドレスとTCPポートを指定するために使用されます |
-s | ロードスケジューリングアルゴリズムを指定するために使用されます |
-m | NATクラスターモードの使用を示します |
-g | DRクラスターモードの使用を示します |
私 | TUNクラスターモードの使用を示します |
スクリプトを実行する
3アクセステスト
詳細情報を確認してください
ipvsadm -Lnc