記事ディレクトリ
LVS-DR
負荷分散クラスターの動作モード-直接ルーティングは
DRモードと呼ばれます。TUNモードの構造と同様のセミオープンネットワーク構造を採用していますが、ノードはどこにでも散在しているわけではなく、スケジューラーと同じ物理ネットワークに配置されています
ロードスケジューラは、ローカルネットワークを介して各ノードサーバーに接続され、専用のIPトンネルを確立する必要はありません。
LVS-DRデータフロー図
が盗まれる...私は認めます
1.クライアントがリクエストをターゲットVIPに送信し、ディレクター(ロードバランサー)がそれを受信します。このとき、IPヘッダーとデータフレームヘッダー情報は次のとおりです
。2。ロードバランシングアルゴリズムに従ってRealserver_1を選択し、IPメッセージを変更またはカプセル化せずに、データフレームのMACアドレスをRealServer_1のMACアドレスに変更して、LANに送信します。 。IPヘッダーとデータフレームヘッダー情報は次のとおりです
。3. RealServer_1はこのフレームを受信し、カプセル化解除後にターゲットIPがマシンと一致することを検出するため(RealServerは事前にVIPにバインドされています)、このメッセージを処理します。次に、メッセージを再カプセル化して、LANに送信します。現時点では、IPヘッダーとデータフレームヘッダー情報は次のとおりです。
4.クライアントは返信メッセージを受け取ります。クライアントは通常のサービスを受けていると思っていますが、どのサーバーがそれを処理するのかわかりません
注:ネットワークセグメントを通過する場合、メッセージはルーター経由でユーザーに返されます。
考えられる問題
LVS-DR負荷分散クラスターでは、ロードバランサーとノードサーバーを同じVIPアドレスで構成する必要があります
。ローカルエリアネットワークで同じIPアドレスを使用すると、各サーバーのARP通信に障害が発生します
。ARPブロードキャストがLVS-DRクラスターに送信されると、ロードバランサとノードサーバーは同じネットワークに接続されているため、どちらもARPブロードキャストを受信します。
現時点では、フロントエンドロードバランサのみが応答し、他のノードサーバーはARPブロードキャスト
に応答してノードサーバーを処理することはできません。 VIPのARPリクエストには応答しません
。VIPアドレスを伝送するには、仮想インターフェイスlo:0を使用します。
カーネルパラメータarp_ignore = 1を設定します。システムは、宛先IPがローカルIPであるARPリクエストにのみ応答します。RealServe
はパケットを返し(ソースIPはVIP)、ルーターによって転送されます。メッセージを再カプセル化するときに、ルーターのMACアドレスを最初に取得する必要があります
上記の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
キープアライブ
keepalivedツールの概要
LVSおよびHAの
サポートのために特別に設計されたヘルスチェックツールサポート自動フェイルオーバー(フェイルオーバー)
サポートノードヘルスチェック(ヘルスチェック)
公式ウェブサイトhttp://www.keepalived.org
原理分析
Keepalivedは、VRRPホットバックアッププロトコルを採用して、Linuxサーバーのマルチマシンホットバックアップ機能を実現しています
。VRRP(仮想ルーティング冗長プロトコル)は、ルーターのバックアップソリューションです。
複数のルーターがホットバックアップグループを形成し、共有仮想IPアドレスを通じて提供されます。サービス
各ホットスタンバイグループの1つのメインルーターのみが同時にサービスを提供し、他のルーターは冗長状態にあります。
現在オンラインのルーターに障害が発生した場合、他のルーターは設定された優先順位に従って仮想IPアドレスを自動的に引き継ぎ、サービスを提供し続けます
Keepalievdデプロイメントの説明
Keepalivedはマルチマシンホットバックアップを実現できます。各ホットスタンバイグループは複数のサーバーを持つことができます。最も一般的に使用されるのはデュアル
マシンホットスタンバイです。デュアルマシンホットスタンバイのフェイルオーバーは、さまざまなアプリケーションサーバーに適した仮想IPアドレスのドリフトによって実現されます。
Keepalievdインストールの説明
LVSクラスター環境で適用する場合は、lipvsadm管理ツール
YUMを使用してKeepalived をインストールし、Keepalived
サービスを有効にする必要もあります。
一般的な構成
Keepalievd構成ディレクトリは/ etc / keepalievd /にあります
。keepalievd.confはメイン構成ファイルです
。global_defs{...}セクションはグローバルパラメータ
vrrp_instanceインスタンス名を指定します{...}セクションはVRRPホットスタンバイパラメータを指定します。
コメントテキストは「!」記号で始まります。
ディレクトリサンプル/、参照用に多くの構成例が提供されています
一般的な構成オプション
router_id HA_TEST_R1:ルーター(サーバー)の
名前vrrp_instance VI_1:VRRPホットスタンバイインスタンス
状態を定義しますMASTER:ホットスタンバイ状態、MASTERはマスターサーバー
インターフェイスを表しますens33:VIPアドレスを持つ物理インターフェイス
virtual_router_id 1:仮想ルーターのID番号、各ホットバックアップグループを同じ
優先度100に保ちます:優先度、値が大きいほど、優先度が高くなります
。advert_int 1:通知間の秒数(ハートビート頻度)
auth_type PASS:認証タイプ
auth_pass 123456:パスワード文字列
virtual_ipaddress {vip}:ドリフトアドレス(VIP)を指定します、複数ある場合があります。複数のドリフトアドレスはカンマで区切られます
スレーブサーバー構成
Keepalived バックアップサーバーの構成は、3つのオプションでマスター構成とは異なりますrouter_id:フリー名の
状態に設定:バックアップの
優先順位に設定:マスターサーバーの値よりも低い値
他のオプションはマスターと同じです
LCS-DR!さあ!!ショー!!!
実験の説明
または、Apacheを使用して習慣的に表示します。
LVS01:192.168.10.20
LVS02:192.168.10.21
WebServer01:192.168.10.30
WebServer02:192.168.10.31
仮想IP(Vip):192.168.10.10
目的
クライアントは、LVSスケジューラーのドリフトIPアドレスにアクセスすることにより、Webページに正常にアクセスできます
上映開始!
LVSを設定する
両方のLVSをipvsadmでインストールする必要があります(デュアルシステムホットバックアップを行うためにここにkeepalivedをインストールしました)
[root@lvs01 ~]# yum -y install ipvsadm keepalived
[root@lvs02 ~]# yum -y install ipvsadm keepalived
2つのLVS変更構成ファイル、ルーティングの転送とリダイレクトをオフにする
[root@lvs01 ~]# vim /etc/sysctl.conf
##末行插入如下配置
##开启ipv4地址转发
net.ipv4.ip_forward = 1
##关闭ipv4全部重定向
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
##重载配置,使配置生效
[root@lvs01 ~]# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
両方のLVSがサービススクリプトを作成し、サービスの使用を容易にするためにそれをinit.dに配置します
[root@lvs01 /]# vim /etc/init.d/DR.sh
#!/bin/bash
GW=192.168.10.1
VIP=192.168.10.10 ##虚拟ip
RIP1=192.168.10.30 ##真实web服务器ip
RIP2=192.168.10.31
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
##设置ens33:0地址,广播地址,子网掩码,并开启
/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 ##指定真实服务器,dr模式
/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
[root@lvs01 /]# chmod +x /etc/init.d/DR.sh
仮想マシンの設定。両方のLVSをLANセグメント1
に配置します。シェルのコマンドは一時IPアドレスを構成するため、構成ファイルで再度変更します
[root@lvs01 /]# cd /etc/sysconfig/network-scripts/
[root@lvs01 network-scripts]# cp -p ifcfg-ens33 ifcfg-ens33:0
[root@lvs01 network-scripts]# vim ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.10.10
NETMASK=255.255.255.0
[root@lvs01 network-scripts]# vim ifcfg-ens33
BOOTPROTO=static
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.10.20 ##LVS02改成192.168.10.21
PREFIX=24
GATEWAY=192.168.10.1
サービスを再起動し、仮想ネットワークカードとシェルスクリプトを開始します。
[root@lvs01 network-scripts]# systemctl restart network
[root@lvs01 network-scripts]# ifup ens33:0
[root@lvs01 network-scripts]# service DR.sh start
ipvsadm starting --------------------[ok]
[root@lvs01 network-scripts]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.10.20 netmask 255.255.255.0 broadcast 192.168.10.255
ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.100.10 netmask 255.255.255.255 broadcast 192.168.100.10
ether 00:0c:29:43:a9:53 txqueuelen 1000 (Ethernet)
[root@lvs01 network-scripts]# systemctl stop firewalld
[root@lvs01 network-scripts]# setenforce 0
WEBサーバーの構成
2つにHTTPDをインストールする
[root@web01 /]# yum -y install httpd
web01と02のネットワークモードをLANセクション1に
変更します。IPを変更してlo:0を構成します。
[root@web01 network-scripts]# cp -p ifcfg-lo ifcfg-lo:0
[root@web01 network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.10.10
NETMASK=255.255.255.0
ONBOOT=yes
[root@web01 network-scripts]# vim ifcfg-ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.10.30 ##web02配置成 192.168.10.31
PREFIX=24
GATEWAY=192.168.10.1
[root@web01 network-scripts]# systemctl restart network
[root@web01 network-scripts]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.10.30 netmask 255.255.255.0 broadcast 192.168.10.255
lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 192.168.10.10 netmask 255.255.255.0
loop txqueuelen 1000 (Local Loopback)
ARP抑制スクリプトを構成する
[root@web01 network-scripts]# vim /etc/init.d/apa.sh
VIP=192.168.10.10
case "$1" in
start)
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
/sbin/route add -host $VIP dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore '//arp忽略'
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
[root@web01 network-scripts]# chmod +x /etc/init.d/apa.sh
2つのWebサービスのメインページを構成する
[root@web01 html]# echo "<h1>This is Web01 Server.</h1>" > index.html
[root@web01 html]# ls
index.html
[root@web02 html]# echo "<h1>This is Web02 Server.</h1>" > index.html
[root@web02 html]# ls
index.html
各サービスを開いて再起動します
[root@web01 html]# ifup lo:0
[root@web01 html]# service apa.sh start
RealServer Start OK
[root@web01 html]# systemctl stop firewalld
[root@web01 html]# setenforce 0
検証実験
フローティングIPにアクセスし、ウェブページにアクセスして、ポーリングモードがオンになっていることを確認します
Keepalievd!さあ!!もう一度見せて!!!
実験環境は、上記のDR展開に基づいています
上映開始!
2つのLVSを構成する
[root@lvs01 network-scripts]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1 ##指向自身环回口IP
smtp_connect_timeout 30
router_id LVS01 ##两台LVS的id 不能相同,另一台配 LVS02
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER
interface ens33 ##根据自己的网卡设置
virtual_router_id 10 ##两个虚拟号需要相同
priority 100 ##优先级,越大越优先,所以 02 的优先级可以配90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111 ##上面一行和这一行最好不要改,如果改了也要相同
}
virtual_ipaddress {
192.168.10.10
}
}
virtual_server 192.168.10.10 80 {
##改成浮动VIP 端口80 指向http服务
delay_loop 6
lb_algo rr ##轮询
lb_kind DR ##DR模式
persistence_timeout 50
protocol TCP
real_server 192.168.10.30 80 {
##指向 web01 端口80
weight 1 ##向下删除原来大概9行
TCP_CHECK{
添加如下
connect_port 80 ##添加连接端口
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
##删了下面的全部,然后复制上面的 real_server 段
real_server 192.168.10.31 80 {
weight 1
TCP_CHECK{
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
コピーの便宜上、web02の設定ファイルを下に置いておきます
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS02
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 10
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.10
}
}
virtual_server 192.168.10.10 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 192.168.10.30 80 {
weight 1
TCP_CHECK{
添加如下
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.10.31 80 {
weight 1
TCP_CHECK{
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
オープンサービス
[root@lvs01 network-scripts]# systemctl start keepalived
[root@lvs01 network-scripts]# systemctl restart keepalived
[root@lvs01 network-scripts]# systemctl restart network
検証実験
LVS01 を閉じるにはWebページにアクセスしてください
[root@lvs01 network-scripts]# systemctl stop network
再度アクセスしてください。
サーバーのスケジュールが成功し、実験が完了しました