LVS-DR + keepalived高可用性クラスターの導入(理論と事例)

記事ディレクトリ

序文

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サーバーが正常にアクセスされている

ここに画像の説明を挿入
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/BIGmustang/article/details/108351361