記事ディレクトリ
序文
1つ:LVS-DR動作原理
1.1:DRモードの概要
負荷分散クラスターの動作モード-直接ルーティングは
DRモードと呼ばれます。TUNモードの構造と同様のセミオープンネットワーク構造を採用していますが、ノードはどこにでも散在しているわけではなく、スケジューラーと同じ物理ネットワークに配置されています
ロードスケジューラは、ローカルネットワークを介して各ノードサーバーに接続され、専用のIPトンネルを確立する必要はありません。
1.2:LVS-DRパケットのフローを分析するには?
原理分析を容易にするために、クライアントとクラスターマシンは同じネットワーク上に配置され、データパケットのルートは1-2-3-4です
。1.クライアントがターゲットVIPにリクエストを送信し、ディレクター(ロードバランサー)がそれを受信します。このとき、IPヘッダーとデータフレームヘッダー情報は次のとおりです
。2。ロードバランシングアルゴリズムに従ってRealserver_1を選択し、IPメッセージを変更またはカプセル化せずに、データフレームのMACアドレスをRealServer_1のMACアドレスに変更して、LANに送信します。 。IPヘッダーとデータフレームヘッダー情報は次のとおりです
。3. RealServer_1はこのフレームを受信し、カプセル化解除後にターゲットIPがマシンと一致することを検出するため(RealServerは事前にVIPにバインドされています)、このメッセージを処理します。次に、メッセージを再カプセル化して、LANに送信します。この時点で、IPヘッダーとデータフレームヘッダー情報は
4 です。クライアントは応答メッセージを受信します。クライアントは通常のサービスを受けていると思っていますが、どのサーバーがそれを処理するのかわかりません
注:ネットワークセグメントを通過する場合、メッセージはルーター経由でユーザーに返されます。
1.3:LVS-DRのARP問題
LVS-DRロードバランシングクラスタでは、ロードバランサとノードサーバーを同じVIPアドレスで構成する必要があります
。ローカルエリアネットワークで同じIPアドレスを使用すると、各サーバーのARP通信で障害が発生します。
ARPブロードキャストがLVS-DRクラスターに送信されると、ロードバランサーとノードサーバーが同じネットワークに接続されているため、どちらもARPブロードキャストを受信します。
現時点では、フロントエンドロードバランサーのみが応答し、他のノードサーバーは応答しません。 ARPブロードキャストに応答する必要がある場合
は、ノードサーバーを処理して、VIPのARP要求に応答しないようにします。
仮想インターフェイスlo:0を使用してVIPアドレスを伝送します。
カーネルパラメータarp_ignore = 1を設定します。システムは、宛先IPがローカルIPであるARP要求にのみ応答します。RealServe
はパケット(ソースIPはVIP)を返し、ルーターによって転送されます。パケットを再カプセル化するときに、最初に取得する必要がありますルーターのMACアドレス
ARP要求を送信する場合、Linuxはデフォルトで、送信インターフェースのIPアドレス(ens33など)を使用する代わりに、IPパケット(VIP)の送信元IPアドレスをARP要求パケットの送信元IPアドレスとして使用します。
ルーターがARP要求を受信した後、ARPエントリを更新します
ディレクタのMACアドレスに対応する元のVIPは、RealServerに対応するⅥPのMACアドレスに更新されます。
このとき、ルータはARPテーブルエントリに従って新しいリクエストメッセージをRealServerに転送し、ディレクタのVIPを無効にします。
解決
ノードサーバーを処理し、カーネルパラメータarp_announce = 2を設定します。システムはIPパケットの送信元アドレスを使用してARP要求の送信元アドレスを設定しませんが、送信インターフェイスのIPアドレスを選択します
1.4:上記の2つのARP問題を解決する方法
修改/etc/sysctl.conf文件
对节点服务器进行处理,使其不响应针对VIP的ARP请求
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
2:LVS-DRの導入
2.1:ケース環境
会社のウェブサイトの負荷容量をさらに改善するために、会社は既存のウェブサイトプラットフォームを拡張し、LVSに基づく負荷分散クラスターを構築することを決定しました。クラスターのアクセス効率を考慮して、管理者はLVSクラスターのDRモードを採用し、共有ストレージデバイスは内部プライベートネットワークに格納されます
LVS1:192.168.100.20 PC-2
LVS2:192.168.100.3 PC-3
Web1:192.168.100.4 PC-4
Web2:192.168.100.5 PC-5
VIP=192.168.100.10
Win 10 :192.168.100.150
2.2最初に2つのLVSエージェントを構成する
2.2.1関連ソフトウェアkeepalived(デュアルマシンのホットバックアップ)をインストールしますipvsadm(LVS制御ソフトウェア)
root@pc-2 ~]# yum install keepalived ipvsadm -y
root@pc-3 ~]# yum install keepalived ipvsadm -y
構成ファイルの変更、ルーティングの有効化、リダイレクトの無効化
root@pc-2 ~] Vi /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
~
[root@pc-2 ~]# sysctl -p //使其生效
net.ipv4.ip_forward = 1 开启路由功能
PROC响应 关闭重定向功能
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
2.2.2物理ネットワークカードインターフェイス、仮想ネットワークカードインターフェイスの構成
[root @ pc-2 network-scripts]#cp ifcfg-ens33 ifcfg-ens33:0
[root @ pc-2 network-scripts]#vim ifcfg-ens33:0
2.2.3簡単な操作のためのdrスクリプトファイルの作成
cd /etc/init.d/
vim dr.sh
//スクリプトの内容:
#!/bin/bash
GW=192.168.100.1
VIP=192.168.100.10
RIP1=192.168.100.4
RIP2=192.168.100.5
case "$1" in
start)
/sbin/ipvsadm --save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
/sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up
/sbin/route add -host $VIP dev ens33:0
/sbin/ipvsadm -A -t $VIP:80 -s rr
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
echo "ipvsadm starting ---- ------[ok]"
;;
stop)
/sbin/ipvsadm -C
systemctl stop ipvsadm
ifconfig ens33:0 down
route del $VIP
echo "ipvsamd stoped--------------[ok]"
;;
status)
if [ ! -e /var/lock/subsys/ipvsadm ]; then
echo "ipvsadm stoped----------------------"
exit 1
else
echo "ipvsamd Runing------------[ok]"
fi
;;
*)
echo "Usage: $0 {start | stop | status }"
exit 1
esac
exit 0
権限を追加します。注:まだスクリプトを実行しないでください!
chmod + x dr.sh
PC-3仮想インターフェイスを構成する
ifup ens33:0 //仮想VIP
systemctlを有効にするstop firewalld setenforce 0
service dr.sh start // LVSサービスを有効にする
2.3 2つのWEBノードを構成する
配置 PC-4 ,PC-5
2.3.1 httpdソフトウェアのインストール
[root@pc-5 ~]# yum install -y httpd
[root@pc-4 ~]# yum install -y httpd
关闭防火墙
systemctl stop firewalld
setenforce 0
[root@pc-5 ]# vim /var/www/html/index.html
2.3.2ループバックアドレスループ0の構成
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
Vim ifcfg-lo:0
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
Vim ifcfg-lo:0
2.3.3 Webサービススクリプトの記述
root@pc-4 network-scripts]# cd /etc/init.d
[root@pc-4 init.d]# vim web.sh
#!/bin/bash
VIP=192.168.100.10
case "$1" in
start)
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP // 关闭ARP响应
/sbin/route add -host $VIP dev lo:0
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
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
route del $VIP /dev/null 2>&1
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore //启动ARP响应
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stopd"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
2.4 keepalived 2台のLVSアクティブサーバーとスタンバイサーバーで次の設定を行います。
2.4.1 keepalivedパラメータの設定
PC-2 和 PC-3 服务器上
编辑keepalived
cd /etc/keepalived/
Root@pc-2 keepalived]# vim keepalived.conf
#! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1 //第一处修改:改为127.0.0.1
smtp_connect_timeout 30
router_id LVS_01 //第二处修改:LVS2服务器修改为02
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER //第三处:备用服务器LVS2改为BACKUP
interface ens33 //第四处:改为ens33
virtual_router_id 10 //第五处:虚拟组,两个LVS服务器必须一样
priority 100 //第六处:备用LVS2优先级小于100,设为90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.100.10 //第七处:只要虚拟IP地址
}
}
virtual_server 192.168.100.10 80 {
//第八处:虚拟IP地址和端口
delay_loop 6
lb_algo rr
lb_kind DR //第九处:我们使用的是LVS的DR模式
persistence_timeout 50
protocol TCP
real_server 192.168.100.4 80 {
//10、web1服务器节点
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.100.5 80 {
//11、web2的服务器节点
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
### 2.4.2 将文件复制到另外一台LVS
[root@pc-2 keepalived]# scp keepalived.conf root@192.168.100.3:/etc/keepalived/
The authenticity of host '192.168.100.3 (192.168.100.3)' can't be established.
ECDSA key fingerprint is SHA256:90aPw0S3HsHIz87PlUJMnwuceFtLo+xqNo6qSzF4vME.
ECDSA key fingerprint is MD5:86:db:7f:af:8d:e0:7d:c0:a2:0c:b1:17:e9:9f:0b:5d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.100.3' (ECDSA) to the list of known hosts.
[email protected]'s password:
keepalived.conf
2.4.3関連するパラメーターを変更して、ROUTER-IDが異なり、vrrpグループが同じであり、優先順位が異なることを確認します。
2.5サービスを開き、すべての仮想マシンネットワークカードをホストオンリーモードにバインドし、テストします
systemctl restart keepalived
systemctl restart ipvsadm.service
service network restart
service dr.sh start
service web.sh start
2.6 LVS障害のテストkeepalivedツールの自動切り替え機能
keepalivedツールは、自動的にフェイルオーバーし、LVS1サーバーサービスをシャットダウンし、障害をシミュレートできます。クライアントが仮想IPアドレスと引き続き通信でき、Webサイトに正常にアクセスできる場合、LVS1ではなくLVS2が機能しており、単一障害点が発生していません。アップ。
2.6.1仮想インターフェイスを手動で停止して、障害テストをシミュレートする
root@pc-2 ~]# ifdown ens33:0
[root@pc-2 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.100.20 netmask 255.255.255.0 broadcast 192.168.100.255
inet6 fe80::20c:29ff:fe5c:722e prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:5c:72:2e txqueuelen 1000 (Ethernet)
RX packets 6353 bytes 497090 (485.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 12384 bytes 1197061 (1.1 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 53132 bytes 4193520 (3.9 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 53132 bytes 4193520 (3.9 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether 52:54:00:bc:78:98 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
2.7テストが成功したか、ノードのWEBサーバーが正常にアクセスされている