キープアライブとダブルメインLVS自動スイッチ、リアルタイムの監視とホストの状態

キープアライブとダブルメインLVS自動スイッチ、リアルタイムの監視とホストの状態

環境:

  • 202.106.0.17:asクライアント
  • 202.106.0.27:ルータとして
  • 192.168.205.37:lvs1として
  • 192.168.205.47:lvs2として
  • 192.168.205.57:としてwebsrv1
  • 192.168.205.67:としてwebsrv2
  • 192.168.205.77:としてwebsrv3
  • 192.168.205.87:websrv4のよう
    注:デフォルトでは無効になっfirewalldすべてのオペレーティングシステム、のiptable空、SELinuxを閉じました

バージョン:

  • OS:CentOSのミニと7 1810がインストール
  • keepalivedの
  • httpdの

目地:

4台のkeepalivedのモニタリングウェブサーバー、両者の組、仮想IPアドレスを使用してそれぞれを使用して、VIP2のLVS1スタンバイ互いにLVS2からメインVIP2、VIPlにフロントVIPlであり、負荷LVSとして使用しますバランスの取れた、と自動的にマシンダウンサービスを検出し、自動的にトラブルフリーなスケジューリングを可能にする、失敗したホストを削除することができます。

設定ルータ

  1. 転送をルーティング回し
    [root@router data]#ech 1 > /proc/sys/net/ipv4/ip_forward
  2. 私はlvs1とlvs2サーバはルートを持っていなければならないときに行くので、その下の1がどの段階で判断できないとき、それはそう、仮想IP 2つのホストがドリフトする可能性が高いですので、eth1のルータで10.1.1.1を追加します。ホスト上で、IPを直接使用せずにルートを確保するために直接接続します。
    [root@router data]#ip a a 10.1.1.1/24 dev eth0:1

    4台の実サーバを設定します

  3. 両方のサーバー上で次のスクリプトを実行し192.168.205.57/67ををapp1

    [root@websrv1 data]#cat lvs_dr_rs.sh 
    #!/bin/bash
    vip=10.1.1.100
    gateway=192.168.205.27
    mask='24'
    dev=lo:1
    rpm -q httpd &> /dev/null || yum -y install httpd &>/dev/null
    service httpd start &> /dev/null && echo "The httpd Server is Ready!"
    echo "this is `hostname`" > /var/www/html/index.html
    
    case $1 in
    start)
        echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
        echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
        echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
        ip a a $vip/$mask dev $dev #broadcast $vip up
        ip route add default via $gateway dev eth0
        #route add -host $vip dev $dev
        echo "The RS Server is Ready!"
        ;;
    stop)
        systemctl restart network
        echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
        echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
        echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
        echo "The RS Server is Canceled!"
        ;;
    *) 
        echo "Usage: $(basename $0) start|stop"
        exit 1
        ;;
    esac
  4. App2が両方のサーバー上で次のスクリプトを実行します192.168.205.77/87

    [root@websrv3 data]#cat lvs_dr_rs.sh 
    #!/bin/bash
    vip=10.1.1.200
    gateway=192.168.205.27
    mask='24'
    dev=lo:1
    rpm -q httpd &> /dev/null || yum -y install httpd &>/dev/null
    service httpd start &> /dev/null && echo "The httpd Server is Ready!"
    echo "this is `hostname`" > /var/www/html/index.html
    
    case $1 in
    start)
        echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
        echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
        echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
        ip address add $vip/$mask dev $dev #broadcast $vip up
        ip route add default via $gateway dev eth0
        #route add -host $vip dev $dev
        echo "The RS Server is Ready!"
        ;;
    stop)
        systemctl restart network
        echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
        echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
        echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
        echo "The RS Server is Canceled!"
        ;;
    *) 
        echo "Usage: $(basename $0) start|stop"
        exit 1
        ;;
    esac

    両可動LVSに同じ操作を行います(特に断りのない限り)

  5. httpdサービス、2のローカルホスト上のソーリーサーバをインストールします。
    yum install httpd
    echo server is under maitenance > /var/www/html/index.html
  6. 通常のソーリーサーバ正しく適用された場合に動作することができ、ルータにデフォルトルートを追加してくださいではなく、
    ip route add default via 192.168.205.27 dev eth0
  7. それに簡単にアクセスするために、2つのサーバー間のSSH鍵認証LVS行う47で再びそれをしないだろう、次の方法を使用して、実際に相互認証を実現することが好ましいです。
    ssh-keygen
    scp -r /root/.ssh 192.168.205.47:/root
  8. ベストは、2つのホストファイルホスト名の解決に参加します
    vi /etc/hosts
    192.168.205.37 websrv1
    192.168.205.47 websrv2
    scp /etc/hosts 192.168.205.47:/etc
  9. インストールのキープアライブは、LVS戦略を追加する方法を確認するために、我々はまた、iplvadmインストールされています
    yum install keepalived ipvsadm
  10. lvs1上の設定ファイルを変更します。
    [root@lsv1 ~]#vi /etc/keepalived/keepalived.conf 
    ! Configuration File for keepalived
    global_defs {
       notification_email {
         root@localhost
       }
       notification_email_from keepalive@localhost
       smtp_server 127.0.0.1
       smtp_connect_timeout 30
       router_id LVS1
       vrrp_mcast_group4 224.0.0.100                                                                          
    }
    vrrp_instance VI_1 {
        state MASTER
        interface eth0
        virtual_router_id 37
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass centos
        }
        virtual_ipaddress {
            10.1.1.100/24 dev eth0 label eth0:0
        }
    }
    vrrp_instance VI_2 {
        state BACKUP
        interface eth0
        virtual_router_id 47
        priority 80
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass centos
        }
        virtual_ipaddress {
            10.1.1.200/24 dev eth0 label eth0:1
        }
    }
    virtual_server 10.1.1.100 80 {
        delay_loop 6
        lb_algo rr 
        lb_kind DR
        protocol TCP
        sorry_server 127.0.0.1 80
        real_server 192.168.205.57 80 {
            weight 1
            HTTP_GET {
                url { 
                  path /
                  status_code 200
                }
                connect_timeout 1
                nb_get_retry 3
                delay_before_retry 1
            }
        }
        real_server 192.168.205.67 80 {
            weight 1
            HTTP_GET {
                url { 
                  path /
                  status_code 200
                }
                connect_timeout 1
                nb_get_retry 3
                delay_before_retry 1
            }
        }                            
    }
    virtual_server 10.1.1.200 80 {
        delay_loop 6
        lb_algo rr 
        lb_kind DR
        protocol TCP
        sorry_server 127.0.0.1 80
        real_server 192.168.205.77 80 {
            weight 1
            HTTP_GET {
                url { 
                  path /
                  status_code 200
                }
                connect_timeout 1
                nb_get_retry 3
                delay_before_retry 1
            }
        }
        real_server 192.168.205.87 80 {
            weight 1
            HTTP_GET {
                url { 
                  path /
                  status_code 200
                }
                connect_timeout 1
                nb_get_retry 3
                delay_before_retry 1
            }
        }
    }            
    11. 为了方便将lsv1的keepalive.conf复制到lvs2上,并进行修改
    [root@lvs2 ~]#vi /etc/keepalived/keepalived.conf 
    ! Configuration File for keepalived
    global_defs {
       notification_email {
         root@localhost
       }
       notification_email_from keepalive@localhost
       smtp_server 127.0.0.1
       smtp_connect_timeout 30
       router_id LVS2
             vrrp_mcast_group4 224.0.0.100
    }
    vrrp_instance VI_1 {
        state BACKUP
        interface eth0
        virtual_router_id 37
        priority 80
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass centos
        }
        virtual_ipaddress {
            10.1.1.100/24 dev eth0 label eth0:0
        }
    }
    vrrp_instance VI_2 {
        state MASTER
        interface eth0
        virtual_router_id 47
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass centos
        }
        virtual_ipaddress {
            10.1.1.200/24 dev eth0 label eth0:1
        }
    }
    virtual_server 10.1.1.100 80 {
        delay_loop 6
        lb_algo rr 
        lb_kind DR
        protocol TCP
        sorry_server 127.0.0.1 80
        real_server 192.168.205.57 80 {
            weight 1
            HTTP_GET {
                url { 
                  path /
                  status_code 200
                }
                connect_timeout 1
                nb_get_retry 3
                delay_before_retry 1
            }
        }
        real_server 192.168.205.67 80 {
            weight 1
            HTTP_GET {
                url { 
                  path /
                  status_code 200
                }
                connect_timeout 1
                nb_get_retry 3
                delay_before_retry 1
            }
        }
    }
    virtual_server 10.1.1.200 80 {
        delay_loop 6
        lb_algo rr 
        lb_kind DR
        protocol TCP
        sorry_server 127.0.0.1 80
        real_server 192.168.205.77 80 {
            weight 1
            HTTP_GET {
                url { 
                  path /
                  status_code 200
                }
                connect_timeout 1
                nb_get_retry 3
                delay_before_retry 1
            }
        }
        real_server 192.168.205.87 80 {
            weight 1
            HTTP_GET {
                url { 
                  path /
                  status_code 200
                }
                connect_timeout 1
                nb_get_retry 3
                delay_before_retry 1
            }
        }
    }
  11. keepalivedのサービスの開始
     systemctl start keepalived
  12. lvs1ではRRスケジューリングのステータスを確認
    [root@lsv1 ~]#ipvsadm -Ln
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    TCP  10.1.1.100:80 rr
      -> 192.168.205.57:80            Route   1      0          0         
      -> 192.168.205.67:80            Route   1      0          0         
    TCP  10.1.1.200:80 rr
      -> 192.168.205.77:80            Route   1      0          0         
      -> 192.168.205.87:80            Route   1      0          0 
  13. lvs1参照のみ10.1.1.100IPでは、Lvs2にのみ10.1.1.200IPが表示されます
    [root@lsv1 ~]#ip a
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:56:e1:ea brd ff:ff:ff:ff:ff:ff
        inet 192.168.205.37/24 brd 192.168.205.255 scope global noprefixroute eth0
           valid_lft forever preferred_lft forever
        inet 10.1.1.100/24 scope global eth0:0
           valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:fe56:e1ea/64 scope link noprefixroute 
           valid_lft forever preferred_lft forever
    [root@lvs2 ~]#ip a
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:37:f9:93 brd ff:ff:ff:ff:ff:ff
        inet 192.168.205.47/24 brd 192.168.205.255 scope global noprefixroute eth0
           valid_lft forever preferred_lft forever
        inet 10.1.1.200/24 scope global eth0:1
           valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:fe37:f993/64 scope link noprefixroute 
           valid_lft forever preferred_lft forever

    テスト

  14. クライアント上のサイクル試験を実行します
    [root@client ~]#while : ;do curl 10.1.1.100; sleep 0.5; done
    this is websrv1
    this is websrv2
    this is websrv1
    this is websrv2
    this is websrv1
    this is websrv2
    [root@client ~]#while : ;do curl 10.1.1.200; sleep 0.5; done 
    this is websrv4
    this is websrv3
    this is websrv4
    this is websrv3
    this is websrv4
  15. のみ発送WEB2にテストされた停止web1と、
    [root@websrv1 data]#systemctl stop httpd
    [root@client ~]#while : ;do curl 10.1.1.100; sleep 0.5; done
    this is websrv2
    this is websrv2
    this is websrv2
    this is websrv2
    this is websrv2
  16. WEB2を停止して、申し訳ありません、サーバーとの仕事のためにテストされ、lvs1 127.0.0.1負荷に見ることができます
    [root@websrv2 ~]#systemctl stop httpd
    [root@client ~]#while : ;do curl 10.1.1.100; sleep 0.5; done
    server is under maitenance
    server is under maitenance
    server is under maitenance
    server is under maitenance
    [root@lsv1 ~]#ipvsadm -Ln
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    TCP  10.1.1.100:80 rr
      -> 127.0.0.1:80                 Route   1      0          4         
    TCP  10.1.1.200:80 rr
      -> 192.168.205.77:80            Route   1      0          0         
      -> 192.168.205.87:80            Route   1      0          0       
  17. 2 websrv1とwebsrv2を復元し、そしてlvs2停止し、我々は何の効果も見られないが、あなたはすべてのバックlvs1上の2つのVIPを見ることができます
    [root@websrv1 ~]#systemctl start httpd
    [root@websrv2 ~]#systemctl start httpd
    [root@lvs2 ~]#systemctl stop keepalived
    [root@client ~]#while : ;do curl 10.1.1.100; sleep 0.5; done
    this is websrv2
    this is websrv1
    this is websrv2
    this is websrv1
    [root@client ~]#while : ;do curl 10.1.1.200; sleep 0.5; done
    this is websrv3
    this is websrv4
    this is websrv3
    this is websrv4
    [root@lsv1 ~]#ip a
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:56:e1:ea brd ff:ff:ff:ff:ff:ff
        inet 192.168.205.37/24 brd 192.168.205.255 scope global noprefixroute eth0
           valid_lft forever preferred_lft forever
        inet 10.1.1.100/24 scope global eth0:0
           valid_lft forever preferred_lft forever
        inet 10.1.1.200/24 scope global secondary eth0:1
           valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:fe56:e1ea/64 scope link noprefixroute 
           valid_lft forever preferred_lft forever
  18. プリエンプションは、元のプライマリおよびバックアップにありますのでlvs2は、状態を復元します
    [root@client ~]#while : ;do curl 10.1.1.100; sleep 0.5; done
    this is websrv2
    this is websrv1
    this is websrv2
    [root@client ~]#while : ;do curl 10.1.1.200; sleep 0.5; done
    this is websrv4
    this is websrv3
    this is websrv4
    [root@lsv1 ~]#ip a
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:56:e1:ea brd ff:ff:ff:ff:ff:ff
        inet 192.168.205.37/24 brd 192.168.205.255 scope global noprefixroute eth0
           valid_lft forever preferred_lft forever
        inet 10.1.1.100/24 scope global eth0:0
           valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:fe56:e1ea/64 scope link noprefixroute 
           valid_lft forever preferred_lft forever
    [root@lvs2 ~]#ip a
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:37:f9:93 brd ff:ff:ff:ff:ff:ff
        inet 192.168.205.47/24 brd 192.168.205.255 scope global noprefixroute eth0
           valid_lft forever preferred_lft forever
        inet 10.1.1.200/24 scope global eth0:1
           valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:fe37:f993/64 scope link noprefixroute 
           valid_lft forever preferred_lft forever

おすすめ

転載: blog.51cto.com/127601/2427468