1. 程式人生 > >KeepAlived的實現示例

KeepAlived的實現示例

數值 hosts scrip ade node service ret cal linux

KeepAlived的實現示例

KeepAlived的實現

    HA Cluster配置準備:
        各節點時間必須同步
            ntp(6), chrony(7)
            1》在centos6上
                ntpdate  172.18.0.1
                vim /etc/ntp.conf
                    server  ip地址 iburst   #與誰的服務址進行同步
                service ntpd start
                chkconfig ntpd on
            2》在centos7上
                ntpdate 172.18.0.1
                vim /etc/chrony.conf
                    server  ip地址 iburst
                systemctl start chronyd
                systemctl enable chronyd
            3》為什麽要先同步時間再去修改配置文件?
                因為如果時間相差的太多是不會同步的,所以必須用ntpdate命令將時間先同步後再去修改配置文件。
                ntpdate命令是暴力同步命令,而服務ntpd和chronyd是弱同步,會進行不斷的更新。
        確保iptables 及selinux 不會成為阻礙
        各節點之間可通過主機名互相通信(對KeepAlived 並非必須)建議使用/etc/hosts 文件實現
            1》在centos6上
                vim /etc/sysconfig/network
                    HOSTNAME=
                vim  /etc/hosts
                    ip地址  HOSTNAME
                退出重新登錄
            2》在centos7上
                hostnamectl set-hostname  HOSTNAME
                vim /etc/hosts
                    ip地址  HOSTNAME
                退出重新登錄
            3》測試,ping HOSTNAME
        各節點之間的root 用戶可以基於密鑰認證的ssh服務完成互相通信(對KA並非必須)
            1》在centos6和centos7上
                生成密鑰對
                    ssh-keygen 
                將公鑰拷貝給對方
                    ssh-copy-id -i id_rsa.pub HOSTNAME(ip地址)
            2》測試,直接使用ssh 登錄
        
    keepalived 安裝配置:
        CentOS 6.4+ Base源
        程序環境:
            主配置文件:/etc/keepalived/keepalived.conf
            主程序文件:/usr/sbin/keepalived
            Unit File :/usr/lib/systemd/system/keepalived.service
            Unit File 的環境配置文件:/etc/sysconfig/keepalived

高可用的ipvs 集群示例

    ! Configuration File for keepalived
    global_defs {
        notification_email {
            root@localhost
        }
        notification_email_from keepalived@localhost
        smtp_server 127.0.0.1
        smtp_connect_timeout 30
        router_id node1
        vrrp_mcast_group4 224.0.100.10
    }
    vrrp_instance VI_1 {
        state MASTER
        interface eth0
        virtual_router_id 6
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 571f97b2
        }
        virtual_ipaddress {
            172.16.0.10/16 dev eth0
        }
        notify_master "/etc/keepalived/notify.sh master"
        notify_backup "/etc/keepalived/notify.sh backup"
        notify_fault "/etc/keepalived/notify.sh fault"
    }
    virtual_server 172.16.0.10 80 {
        delay_loop 3
        lb_algo rr
        lb_kind DR
        protocol TCP
        sorry_server 127.0.0.1 80
        real_server 172.16.0.11 80 {
            weight 1
            HTTP_GET {
                url {
                    path /
                    status_code 200
                }
            connect_timeout 1
            nb_get_retry 3
            delay_before_retry 1
            }
        }
    real_server 172.16.0.12 80 {
        weight 1
        HTTP_GET {
            url {
                path /
                status_code 200
            }
        connect_timeout 1
        nb_get_retry 3
        delay_before_retry 1
        }
        }
    }

雙主模式的lvs集群,拓撲、實現過程

    其中一個節點:
    ! Configuration File for keepalived
    global_defs {
        notification_email {
            root@localhost
        }
        notification_email_from kaadmin@localhost
        smtp_server 127.0.0.1
        smtp_connect_timeout 30
        router_id node1
        vrrp_mcast_group4 224.0.100.100
    }
    vrrp_instance VI_1 {
        state MASTER
        interface eth0
        virtual_router_id 6
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass f1bf7fde
        }
        virtual_ipaddress {
                172.16.0.80/16 dev eth0 label eth0:0
        }
        track_interface {
                eth0
        }
        notify_master "/etc/keepalived/notify.sh master"
        notify_backup "/etc/keepalived/notify.sh backup"
        notify_fault "/etc/keepalived/notify.sh fault"
    }
    vrrp_instance VI_2 {
        state BACKUP
        interface eth0
        virtual_router_id 8
        priority 98
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass f2bf7ade
        }
        virtual_ipaddress {
            172.16.0.90/16 dev eth0 label eth0:1
        }
        track_interface {
            eth0
        }
        notify_master "/etc/keepalived/notify.sh master"
        notify_backup "/etc/keepalived/notify.sh backup"
        notify_fault "/etc/keepalived/notify.sh fault"
    }
    virtual_server fwmark 3 {
        delay_loop 2
        lb_algo rr
        lb_kind DR
        nat_mask 255.255.0.0
        protocol TCP
        sorry_server 127.0.0.1 80
        real_server 172.16.0.11 80 {
            weight 1
            HTTP_GET {
                url {
                    path /
                    status_code 200
                }
                connect_timeout 2
                nb_get_retry 3
                delay_before_retry 3
            }
        }
    real_server 172.16.0.12 80 {
        weight 1
        HTTP_GET {
            url {
                path /
                status_code 200
            }
            connect_timeout 2
            nb_get_retry 3
            delay_before_retry 3
        }
        }
    }

keepalived 調用腳本進行資源監控

    keepalived 調用外部的輔助腳本進行資源監控,並根據監控的結果狀態能實現優先動態調整。
    vrrp_script:
        自定義一個資源監控腳本或服務監控腳本,腳本可以返回成功或失敗的值,vrrp實例腳本根據腳本返回的狀態修改調度。
        公共定義,可被多個實例調用,定義在vrrp 實例之外。
    track_script:
        調用vrrp_script 定義的腳本去監控資源,定義在實例之內,調用事先定義的vrrp_script。
        調用跟蹤腳本,使當前調度器減去一定的數值,使其優化級低於master配置。
    分兩步:(1) 先定義一個腳本;(2)調用此腳本
        vrrp_script <SCRIPT_NAME> {
            script ""
            interval INT
            weight -INT
        }
        track_script {
            SCRIPT_NAME_1
            SCRIPT_NAME_2
        }

高可用的nginx

    ! Configuration File for keepalived
    global_defs {
        notification_email {
            root@localhost
        }
        notification_email_from keepalived@localhost
        smtp_server 127.0.0.1
        smtp_connect_timeout 30
        router_id node1
        vrrp_mcast_group4 224.0.100.100
    }
    vrrp_script chk_down {
        script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
        interval 1
        weight -20
    }
    vrrp_script chk_nginx {
        script "killall -0 nginx && exit 0 || exit 1"
        interval 1
        weight -20
        fall 2      #2 次檢測失敗為失敗
        rise 1      #1 次檢測成功為成功
    }
    vrrp_instance VI_1 {
        state MASTER
        interface eth0
        virtual_router_id 14
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 571f97b2
        }
        virtual_ipaddress {
            172.18.0.93/16 dev eth0
        }
        track_script {
            chk_down
            chk_nginx
        }
        notify_master "/etc/keepalived/notify.sh master"
        notify_backup "/etc/keepalived/notify.sh backup"
        notify_fault "/etc/keepalived/notify.sh fault"
    }

同步組

    LVS NAT模型VIP 和DIP需要同步,需要同步組
    vrrp_sync_group VG_1 {
        group {
            VI_1    # name of vrrp_instance (below)
            VI_2    # One for each moveable IP.
        }
    }
    vrrp_instance VI_1 {
        eth0
        vip
    }
    vrrp_instance VI_2 {
        eth1
        dip
    }

KeepAlived的實現示例