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

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/weixin_50345511/article/details/110850567