記事ディレクトリ
1.LVS-DRパケットフロー分析
原理分析を容易にするために、クライアントとクラスターマシンを同じネットワーク上に配置します。データパケットフローのルートは1-2-3-4です。
- クライアントはターゲットVIPにリクエストを送信し、ディレクター(ロードバランサー)は受信します
- この場合、送信元MACアドレスはクライアントのMACアドレスです。
- ターゲットMACアドレスは、スケジューラディレクターのMACアドレスです。
- Directorは、負荷分散アルゴリズムに基づいてRealServerを選択します
- IPメッセージを変更またはカプセル化せずに、データフレームのMACアドレスをRealServerのMACアドレスに変更してから、LANで送信します。
- このとき、送信元MACアドレスはDirectorのMACアドレス、宛先MACアドレスはRealServerのMACアドレスです。
- RealServerはこのフレームを受信しました
- カプセル化解除後、ターゲットIPがローカルマシンと一致することが判明したため(RealServerは事前にVIPにバインドされています)、メッセージが処理されます。
- 次に、メッセージを再カプセル化し、loインターフェイスを介して物理ネットワークカードに応答メッセージを送信してから、送信します。
- この場合、送信元MACアドレスはRealServerのMACアドレスであり、宛先MACアドレスはクライアントのMACアドレスです。
- クライアントは返信メッセージを受け取ります
- クライアントは通常のサービスを受けていると思いますが、どのサーバーがそれを処理しているかわかりません
- 注:ネットワークセグメントを通過した場合、メッセージはルーターを介してインターネット経由でユーザーに返されます
2.LVS-DRでのARPの問題
LVS-DR負荷分散クラスターでは、負荷分散サーバーとノードサーバーを同じVIPアドレスで構成する必要があります
- ただし、ローカルエリアネットワークで同じIPアドレスを使用すると、必然的にサーバー間のARP通信が乱れます。
- ARPブロードキャストがLVS-DRクラスターに送信されると、ロードバランサーとノードサーバーが同じネットワークに接続されているため、両方がARPブロードキャストを受信します。
- フロントエンドロードバランサーのみが応答し、他のノードサーバーはARPブロードキャストに応答しないでください
- この時点で、VIPのARP要求に応答しないようにノードサーバーを処理できます。
- 仮想インターフェースlo:0を使用してVIPアドレスを伝送します
- カーネルパラメータarp_ignore = 1を設定します(システムは、宛先IPがローカルIPであるARP要求にのみ応答します)
- RealServerはパケットを返し(送信元IPはVIP)、ルーターによって転送されます。パケットを再カプセル化するときは、最初にルーターのMACアドレスを取得する必要があります。
- また、ARP要求を送信する場合、Linuxはデフォルトで、送信インターフェイスのIPアドレスではなく、IPパケット(つまりVIP)の送信元IPアドレスをARP要求パケットの送信元IPアドレスとして使用します。
- ルーターはARP要求を受信すると、ARPテーブルエントリを更新します。
- ディレクターのMACアドレスに対応する元のVIPは、RealServerのMACアドレスに対応するVIPに更新されます。ARP
テーブルエントリに従って、ルーターは新しい要求メッセージをRealServerに転送し、ディレクターのVIPが無効になります。上記の問題の解決策:
ノードサーバーを処理し、カーネルパラメーターarp_announce = 2を設定します(システムはIPパケットの送信元アドレスを使用してARP要求の送信元アドレスを設定しませんが、送信インターフェイスのIPアドレスを選択します)
- ARPの2つの問題の解決策
#修改 /etc/sysctl.conf 文件
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
3、LVS負荷分散クラスター-DRモード
1.データパケットフロー分析
- クライアントはDirectorServer(ロードバランサー)に要求を送信し、要求されたデータパケット(送信元IPはCIP、宛先IPはVIP)がカーネルスペースに到達します。
- DirectorServerとRealServerは同じネットワーク内にあり、データは2番目のデータリンクレイヤーを介して送信されます
- カーネルスペースは、データパケットのターゲットIPがローカルVIPであると判断します。このとき、IPVS(IP Virtual Server)は、データパケットから要求されたサービスがクラスターサービスかどうかを比較し、クラスターサービスの場合はデータパケットを再パッケージ化します。送信元MACアドレスをDirectorサーバーのMACアドレスに変更し、宛先MACアドレスを実サーバーのMACアドレスに変更します。送信元IPアドレスと宛先IPアドレスは変更されていないため、データパケットを実サーバーに送信します。
- 実サーバーに到着する要求メッセージのMACアドレスはそれ自体のMACアドレスであり、メッセージが受信されます。データパケットはメッセージを再カプセル化し(送信元IPアドレスはVIP、宛先IPはCIP)、応答メッセージはloインターフェイスに送信されます。次に、物理ネットワークカードが送信します
- Real Serverは、応答メッセージをクライアントに直接送信します
2.DRモードの特徴
- DirectorサーバーとRealサーバーは同じ物理ネットワークに存在する必要があります
- Real Serverは、プライベートアドレスまたはパブリックネットワークアドレスを使用できます。パブリックネットワークアドレスが使用されている場合、RIPはインターネット経由で直接アクセスできます。
- Director Serverは、クラスターのアクセスポータルとして機能しますが、ゲートウェイとしては機能しません。
- すべての要求メッセージはDirectorServerを通過しますが、応答応答メッセージはDirectorServerを通過できません
- 実サーバーのゲートウェイがDirectorサーバーIPを指すことは許可されていません。つまり、実サーバーによって送信されたデータパケットがDirectorサーバーを通過することは許可されていません。
- 実サーバーのloインターフェースでVIPIPアドレスを構成します
第4に、LVS-DR負荷分散クラスターを展開します
1。概要
- DRモードのクラスターでは、LVSロードスケジューラはクラスターのアクセスポータルとして機能しますが、ゲートウェイとしては機能しません。
- サーバープール内のすべてのノードはインターネットに接続されており、クライアントに送信されるWeb応答データパケットはLVSロードスケジューラを経由する必要はありません。
- このように、インバウンドとアウトバウンドのアクセスデータは別々に処理されるため、クラスター全体のアクセスに応答するには、LVSロードスケジューラとすべてのノードサーバーをVIPアドレスで構成する必要があります。
- データストレージのセキュリティを考慮して、共有ストレージデバイスは内部プライベートネットワークに配置されます
2.環境
- ホスト:Win10プロフェッショナルワークステーションバージョン
- VMware:16 Pro(16.1.0)
- CentOS 7
- ネットワークアダプタ:すべてNATモード
- ネットワークカードの構成:IPを静的に取得する
- YUMソース:ローカル
- Winクライアント:192.168.126.10
- DRサーバー(ロードスケジューラ)(CentOS 7-1):192.168.126.11
- Webサーバー1(CentOS 7-2):192.168.126.12
- Webサーバー2(CentOS 7-3):192.168.126.13
- NFSサーバー(CentOS 7-4):192.168.126.14
- VIP:192.168.126.166
3.ロードスケジューラを構成します
CentOS 7-1(192.168.126.11)
- 準備ができました
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
modprobe ip_vs
#加载ip_vs模块
cat /proc/net/ip_vs
#查看ip_vs版本信息
yum install -y ipvsadm
#安装软件包
- 仮想IPアドレスの構成)(VIP)
仮想インターフェースを使用してVIPアドレスをネットワークカードにバインドし、クラスターアクセスに応答します
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0
vim ifcfg-ens33:0
#清空原有配置,添加以下内容
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.126.88
NETMASK=255.255.255.255
ifup ens33:0
#开启虚拟 ip
ifconfig ens33:0
#查看虚拟 ip
- proc応答パラメータを調整します
DRクラスターの場合、LVSロードスケジューラと各ノードはVIPアドレスを共有する必要があるため、Linuxカーネルのリダイレクトパラメータ応答をオフにする必要があります。
vim /etc/sysctl.conf
#添加以下内容
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p
- 負荷分散戦略を構成する
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
ipvsadm -C
#清除原有策略
ipvsadm -A -t 192.168.126.166:80 -s rr
ipvsadm -a -t 192.168.126.166:80 -r 192.168.126.12:80 -g
ipvsadm -a -t 192.168.126.166:80 -r 192.168.126.13:80 -g
#若使用隧道模式,则结尾处 -g 替换为 -i
ipvsadm
ipvsadm -ln
#查看节点状态,Route代表 DR模式
4.NFS共有マウントを展開します
CentOS 7-4(192.168.126.14)
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
yum install -y nfs-utils rpcbind
systemctl start nfs.service
systemctl start rpcbind.service
systemctl enable nfs.service
systemctl enable rpcbind.service
mkdir /opt/xcf /opt/zxc
chmod 777 /opt/xcf/ /opt/zxc/
vim /etc/exports
/usr/share *(ro,sync)
/opt/xcf 192.168.126.0/24(rw,sync)
/opt/zxc 192.168.126.0/24(rw,sync)
exportfs -rv
showmount -e
5.ノードサーバーを構成します
CentOS 7-2(192.168.126.12)与CentOS 7-3(192.168.126.13)
- DRモードを使用する場合、ノードサーバーはVIPアドレスも構成し、カーネルのARP応答パラメーターを調整して、競合を回避するためにVIPMACアドレスの更新を整理する必要があります。
- また、Webサービスの構成はNATの構成と同様です。
- 準備ができました
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
#将两个节点服务器的网关和DNS注释掉后重启网卡
#如果有网关服务器则指向网关服务器
- 仮想IPアドレスを構成する
#此地址仅用做发送 Web 响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器监听并分发)
#因此使用虚接口 lo:0 来承载 VIP 地址,并为本机添加一条路有记录,将访问 VIP 的数据限制在本地,以避免通信紊乱
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.126.166
NETMASK=255.255.255.255
#注意,此处子网掩码必须全为1
#NETWORK=127.0.0.0
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
#BROADCAST=127.255.255.255
ONBOOT=yes
#NAME=loopback
ifup lo:0
ifconfig lo:0
route add -host 192.168.126.166 dev lo:0
#禁锢路由
route -n
#查看路由
vim /etc/rc.local
#添加VIP本地访问路由
/sbin/route add -host 192.168.126.166 dev lo:0
chmod +x /etc/rc.d/rc.local
- カーネルのARP応答パラメーターを調整して、VIPのMACアドレスが更新されないようにし、競合を回避します
/ proc応答パラメータを調整します
vim /etc/sysctl.conf
......
net.ipv4.conf.lo.arp_ignore = 1
#系统只响应目的IP为本地IP的ARP请求
net.ipv4.conf.lo.arp_announce = 2
#系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
sysctl -p
或
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
- 共有ディレクトリをマウントします
yum install -y nfs-utils rpcbind httpd
systemctl start rpcbind
systemctl start httpd
mount.nfs 192.168.126.14:/opt/xcf /var/www/html/
echo 'Hello xcf~' > /var/www/html/index.html
#设为自动挂载
vim /etc/fstab
192.168.126.14:/opt/xcf /var/www/html nfs defaults,_netdev 0 0
mount -a
- 他のWeb2ノードサーバーも同じように動作しますが、共有ディレクトリのパラメータを変更するだけです。
6.LVSクラスターをテストします
-
Win10をテストクライアントとして使用し(デフォルトのゲートウェイは192.168.126.166を指します)、インターネットからhttp://192.168.126.166に直接アクセスします。
-
実サーバーによって提供されるWebページのコンテンツを表示できます-各ノードのWebページが異なる場合、異なるクライアントによって表示されるWebページは異なります(数回更新し、しばらく待ちます)
-
LVSロードスケジューラでは、ノードのステータスを表示することで現在の負荷分散を確認できます。ポーリングアルゴリズムの場合、各ノードで取得される接続負荷はほぼ同等である必要があります。