LVSロードバランシングクラスターダイレクトルーティングモード(LVS-DR)を構築する


1.LVS-DRパケットフロー分析

原理分析を容易にするために、クライアントとクラスターマシンを同じネットワーク上に配置します。データパケットフローのルートは1-2-3-4です。
マーク

  1. クライアントはターゲットVIPにリクエストを送信し、ディレクター(ロードバランサー)は受信します
    • この場合、送信元MACアドレスはクライアントのMACアドレスです。
    • ターゲットMACアドレスは、スケジューラディレクターのMACアドレスです。
  1. Directorは、負荷分散アルゴリズムに基づいてRealServerを選択します
    • IPメッセージを変更またはカプセル化せずに、データフレームのMACアドレスをRealServerのMACアドレスに変更してから、LANで送信します。
    • このとき、送信元MACアドレスはDirectorのMACアドレス、宛先MACアドレスはRealServerのMACアドレスです。
  1. RealServerはこのフレームを受信しました
    • カプセル化解除後、ターゲットIPがローカルマシンと一致することが判明したため(RealServerは事前にVIPにバインドされています)、メッセージが処理されます。
    • 次に、メッセージを再カプセル化し、loインターフェイスを介して物理ネットワークカードに応答メッセージを送信してから、送信します。
    • この場合、送信元MACアドレスはRealServerのMACアドレスであり、宛先MACアドレスはクライアントのMACアドレスです。
  1. クライアントは返信メッセージを受け取ります
    • クライアントは通常のサービスを受けていると思いますが、どのサーバーがそれを処理しているかわかりません
    • 注:ネットワークセグメントを通過した場合、メッセージはルーターを介してインターネット経由でユーザーに返されます

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.データパケットフロー分析

  1. クライアントはDirectorServer(ロードバランサー)に要求を送信し、要求されたデータパケット(送信元IPはCIP、宛先IPはVIP)がカーネルスペースに到達します。
  2. DirectorServerとRealServerは同じネットワーク内にあり、データは2番目のデータリンクレイヤーを介して送信されます
  3. カーネルスペースは、データパケットのターゲットIPがローカルVIPであると判断します。このとき、IPVS(IP Virtual Server)は、データパケットから要求されたサービスがクラスターサービスかどうかを比較し、クラスターサービスの場合はデータパケットを再パッケージ化します。送信元MACアドレスをDirectorサーバーのMACアドレスに変更し、宛先MACアドレスを実サーバーのMACアドレスに変更します。送信元IPアドレスと宛先IPアドレスは変更されていないため、データパケットを実サーバーに送信します。
  4. 実サーバーに到着する要求メッセージのMACアドレスはそれ自体のMACアドレスであり、メッセージが受信されます。データパケットはメッセージを再カプセル化し(送信元IPアドレスはVIP、宛先IPはCIP)、応答メッセージはloインターフェイスに送信されます。次に、物理ネットワークカードが送信します
  5. 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)

  1. 準備ができました
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
#安装软件包

マーク

  1. 仮想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

マーク

  1. 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

マーク

  1. 負荷分散戦略を構成する
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の構成と同様です。
  1. 準備ができました
systemctl stop firewalld.service 
systemctl disable firewalld.service 
setenforce 0

#将两个节点服务器的网关和DNS注释掉后重启网卡
#如果有网关服务器则指向网关服务器
  1. 仮想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

マーク
マーク
マーク
マーク

  1. カーネルの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

マーク
マーク

  1. 共有ディレクトリをマウントします
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

マーク
マーク
マーク

  1. 他のWeb2ノードサーバーも同じように動作しますが、共有ディレクトリのパラメータを変更するだけです。

6.LVSクラスターをテストします

  • Win10をテストクライアントとして使用し(デフォルトのゲートウェイは192.168.126.166を指します)、インターネットからhttp://192.168.126.166に直接アクセスします。

  • 実サーバーによって提供されるWebページのコンテンツを表示できます-各ノードのWebページが異なる場合、異なるクライアントによって表示されるWebページは異なります(数回更新し、しばらく待ちます)
    マーク
    マーク

  • LVSロードスケジューラでは、ノードのステータスを表示することで現在の負荷分散を確認できます。ポーリングアルゴリズムの場合、各ノードで取得される接続負荷はほぼ同等である必要があります。
    マーク

おすすめ

転載: blog.csdn.net/weixin_51486343/article/details/112914769