10月28日 KeepAlived

1、VRRP協議

VRRP協議被稱為虛擬路由冗余協議

  • 虛擬路由器簡介
    VRRP將局域網內的一組路由器劃分在一起,形成一個VRRP備份組,它在功能上相當于一臺虛擬路由器,使用虛擬路由器號進行標識。以下使用虛擬路由器代替VRRP備份組進行描述。
    虛擬路由器有自己的虛擬IP地址和虛擬MAC地址,它的外在表現形式和實際的物理路由器完全一樣。局域網內的主機將虛擬路由器的IP地址設置為默認網關,通過虛擬路由器與外部網絡進行通信。虛擬路由器是工作在實際的物理路由器之上的。它由多個實際的路由器組成,包括一個Master路由器和多個Backup路由器。Master路由器正常工作時,局域網內的主機通過Master與外界通信。當Master路由器出現故障時,Backup路由器中的一臺設備將成為新的Master路由器,接替轉發報文的工作,如圖下圖
Paste_Image.png
  • VRRP工作過程
    VRRP的工作過程為:
    (1) 虛擬路由器中的路由器根據優先級選舉出Master。Master 路由器通過發送免費ARP 報文,將自己的虛擬MAC 地址通知給與它連接的設備或者主機,從而承擔報文轉發任務;
    (2) Master 路由器周期性發送VRRP 報文,以公布其配置信息(優先級等)和工作狀況;
    (3) 如果Master 路由器出現故障,虛擬路由器中的Backup 路由器將根據優先級重新選舉新的Master;
    (4) 虛擬路由器狀態切換時,Master 路由器由一臺設備切換為另外一臺設備,新的Master 路由器只是簡單地發送一個攜帶虛擬路由器的MAC 地址和虛擬IP地址信息的免費ARP 報文,這樣就可以更新與它連接的主機或設備中的ARP 相關信息。網絡中的主機感知不到Master 路由器已經切換為另外一臺設備。
    (5) Backup 路由器的優先級高于Master 路由器時,由Backup 路由器的工作方式(搶占方式和非搶占方式)決定是否重新選舉Master。
    由此可見,為了保證Master路由器和Backup路由器能夠協調工作,VRRP需要實現以下功能:
    Master 路由器的選舉;
    Master 路由器狀態的通告;
    同時,為了提高安全性,VRRP 還提供了認證功能;
  • VRRP提供了三種認證方式:
    無認證:不進行任何 VRRP 報文的合法性認證,不提供安全性保障。
    簡單字符認證:在一個有可能受到安全威脅的網絡中,可以將認證方式設置
    為簡單字符認證。發送VRRP 報文的路由器將認證字填入到VRRP 報文中,
    而收到VRRP 報文的路由器會將收到的VRRP 報文中的認證字和本地配置的
    認證字進行比較。如果認證字相同,則認為接收到的報文是合法的VRRP 報
    文;否則認為接收到的報文是一個非法報文。
    MD5 認證:在一個非常不安全的網絡中,可以將認證方式設置為MD5 認
    證。發送VRRP 報文的路由器利用認證字和MD5 算法對VRRP 報文進行加
    密,加密后的報文保存在Authentication Header(認證頭)中。收到VRRP
    報文的路由器會利用認證字解密報文,檢查該報文的合法性。
  • VRRP優先級
    VRRP優先級的取值范圍為0到255(數值越大表明優先級越高),可配置的范圍是
    1到254,優先級0為系統保留給路由器放棄Master位置時候使用,255則是系統保
    留給IP地址擁有者使用。當路由器為IP地址擁有者時,其優先級始終為255。因
    此,當虛擬路由器內存在IP地址擁有者時,只要其工作正常,則為Master路由器。
  • 術語:
    虛擬路由器:Virtual Router
    虛擬路由器標識:VRID(0-255),唯一標識虛擬路由器
    物理路由器:
    master:主設備
    backup:備用設備
    priority:優先級
    VIP:Virtual IP
    VMAC:VirutalMAC (00-00-5e-00-01-VRID)

總結:VRRP協議可以實現ip地址的漂移,在兩個物理路由器上虛擬的配置一個VIP,并且VIP剛開始時由master使用,當master損壞時備用的路由器根據優先級進行選舉,選舉為master路由器的使用此虛擬VIP

2、KeepAlived的配置準備

(1) 各節點時間必須同步

在兩臺物理路由器上做如下配置,本次實驗使用centos7和centos6兩臺主機做為物理的路由器
在centos7上
ntpdate 172.18.0.1
vim /etc/chrony.conf 
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
server 172.18.0.1 iburst    ---加上這一行與誰同步的
systemctl start chronyd    ---啟動同步時間的服務
systemctl enable chronyd
在centos6上
ntpdate 172.18.0.1
vim /etc/ntp.conf 
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
172.18.0.1 iburst
service ntpd start   ---啟動同步時間的服務,我們發現在centos6和centos7上同步時間的服務是不同的
chkconfig ntpd on
為什么要先同步時間再去修改配置文件,因為如果時間相差的太多是不會同步的。必須用命令將時間先同步后再去修改配置文件

(2) 確保iptables及selinux不會成為阻礙

getenfoce
iptables -vnL

(3) 各節點之間可通過主機名互相通信(對KA并非必須)
建議使用/etc/hosts文件實現

在centos7上
hostnamectl set-hostname node1
vim /etc/hosts
192.168.74.106   node2
在centos6上
vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=node2
vim /etc/hosts
192.168.74.107   node1
將兩臺主機退出后重新登錄發現主機名改變了
[root@node2 network-scripts]#ping node1
PING node1 (192.168.74.107) 56(84) bytes of data.
64 bytes from node1 (192.168.74.107): icmp_seq=1 ttl=64 time=1.14 ms
64 bytes from node1 (192.168.74.107): icmp_seq=2 ttl=64 time=0.453 ms

(4) 各節點之間的root用戶可以基于密鑰認證的ssh服務完成互相通信(對KA并非必須)

在centos7上
ssh-keygen    ---生成公鑰私鑰對
ssh-copy-id -i id_rsa.pub node2:   ---將公鑰傳給對方,不用加-i也可以,會默認將公鑰轉給對方的
在centos6上
ssh-keygen  
ssh-copy-id -i id_rsa.pub node1:
測試
在cenots7上測試ssh node2
在centos6上測試ssh node1

3、KeepAlived實現

  • 實現單主模式vip的地址轉移
yum install keepalived
1、在主上的配置
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {  ---這里一定要注意所有的大括號前都有空格,并且大括號要一一對應,不然實現不了
   notification_email {      ---給哪個郵箱地址發通知
        root@localhost
   }
   notification_email_from node1@localhost   ---郵件來自己于誰
   smtp_server 127.0.0.1   ---郵件服務器地址
   smtp_connect_timeout 30
   router_id node1    ----真實的物理路由器的id
        vrrp_mcast_group4 224.21.21.21   ---加一個多播地址,用于主master向這個多播地址發送消息,證明自己還活著,當主master壞了的時候,多個從路由器向這個多播地址內發送信息,通過比較優先級選舉出來一個master做為主來代替壞了的master工作
}

vrrp_instance VI_1 {   
    state MASTER
    interface ens33  ----綁定為當前虛擬路由器使用的物理接口
    virtual_router_id 88  ---當前虛擬路由器惟一標識,范圍是0-255
    priority 100  ---當前物理節點在此虛擬路由器中的優先級,范圍1-254
    advert_int 1 ---vrrp通告的時間間隔,默認1s
    authentication {    ----認證機制
        auth_type PASS
        auth_pass 783b7339   ---僅前8位有效,可以用openssl rand -hex 4 取個隨機數
    }
    virtual_ipaddress {
        192.168.74.88/24 dev ens33     ---vip的地址
    }

}
track_interface{    ---配置監控網絡接口,一旦出現故障,則轉為FAULT狀態實現地址轉移
        ens33  
}
systemctl start keepalived.service 
2、在從上的設置
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
        root@localhost
   }
   notification_email_from node2@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id node2
        vrrp_mcast_group4 224.21.21.21
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 88
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 783b7339
    }
    virtual_ipaddress {
        192.168.74.88/24 dev eth0
    }
}
track_interface{
        eth0
}
3、測試
在主上輸入ip a命令發現vip已經配置成功
在從上輸入ip a命令發現沒有vip
此時把主的網卡斷開,在從上抓包
tcpdump -i eth0 -nn host 224.21.21.21可以看到切換的過程,通過向多播內發送優先級選舉出master
并在從上查看ip a發現vip已經轉移到從上了
ip link set dev eth0 multicast off    ---可以使用如下命令關閉多播,默認都是開啟的,一般不需要關閉,此服務如果關閉多播就無法選舉master了和進行實時監控主master是否是活著的了
nopreempt:定義工作模式為非搶占模式,也就是原來的主master修好后即使優先級比現在的高也不會成為master
preempt_delay 300:搶占式模式,節點上線后觸發新選舉操作的延遲時長,默認模式
  • 實現日志功能
1、vim /etc/sysconfig/keepalived    ---定義一個日志設施為local2
KEEPALIVED_OPTIONS="-D -S 2"
2、vim /etc/rsyslog.conf 
local2.*                                                /var/log/keepalived.log
systemctl restart rsyslog
systemctl restart keepalived
3、cat /var/log/keepalived.log   ---發現已經有日志記錄了
  • 定義通知腳本
    也就是發生vip轉移時會給本機的root發郵件
1、定義一個通知腳本
vim /app/notify.sh
#!/bin/bash
#
contact='root@localhost'
notify () {
mailsubject="`hostname` to be $1, vip floating"
mailbody="`date +'%F %T'`: vrrp transition, `hostname` changed to be $1"
echo "$mailbody" | mail -s "$mailsubject" $contact
}
case $1 in
master)
    notify master
        ;;
backup)
    notify backup
        ;;
fault)
    notify fault
        ;;
*)
    echo "Usage: `basename $0` {master|backup|fault}"
        exit 1
        ;;
esac
2、在主路由器和從路由器的配置文件中調用這個腳本
vim /etc/keepalived/keepalived.conf   ---加到vrrp_instance VI_1語句塊里
notify_master "/app/notify.sh master"   ---表示當切換到主的時候會自動給本機的root發郵件
notify_backup "/app/notify.sh backup"     ---表示切換為備用的時候會自動給本機的root發郵件
notify_fault "/app/notify.sh fault"
3、測試
在主路由器上關閉keepalived服務,在從路由器上會發現root收到一封郵件,變成主的通知的郵件,當主路由器開啟keepalived服務時會發現從路由器上的root收到一封變成backup的郵件
輸入mail命令就可以看到發給root的郵件
  • 實現雙主模式
    上面的示例只是實現了一個虛擬vip,當主工作時,從不會工作,只有當主不工作了從才會變成master,得到vip開始工作,如果要實現主和從都工作,就需要配置兩個虛擬的vip
    實現如下圖所示
無標題5.png

實現過程如下:

1、在node1上的設置
vim /etc/keepalived/keepalived.conf   ---在上面的配置中增加一個實例
vrrp_instance VI_2 {
    state BACKUP  ---將node1設置為備份
    interface ens33
    virtual_router_id 66  ---虛擬路由標識改一下
    priority 90  ---優先級要調低
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 683b7339  ---此項也改一下
    }
    virtual_ipaddress {
        192.168.74.66/24 dev ens33  ---設置一個新的vip地址
    }
notify_master "/app/notify.sh master"
notify_backup "/app/notify.sh backup"
notify_fault "/app/notify.sh fault"
}
track_interface{
        ens33
}
2、在node2上的設置
vim /etc/keepalived/keepalived.conf
vrrp_instance VI_2 {
    state MASTER   ---將node2設置為主
    interface eth0
    virtual_router_id 66
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 683b7339
    }
    virtual_ipaddress {
        192.168.74.66/24 dev eth0
    }
notify_master "/app/notify.sh master"
notify_backup "/app/notify.sh backup"
notify_fault "/app/notify.sh fault"
}
track_interface{
        eth0
}
3、將兩個主機重新啟動一下服務
systemctl restart keepalived.service
service keepalived restart
ip a   發現新的vip綁定到rode2上了
[root@node2 ~]#tcpdump -i eth0 -nn host 224.21.21.21  ---抓包可以看到有兩個主在多播內發送優先級等信息,證明自己還活著
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
15:22:35.826209 IP 192.168.74.106 > 224.21.21.21: VRRPv2, Advertisement, vrid 66, prio 100, authtype simple, intvl 1s, length 20
15:22:35.858820 IP 192.168.74.107 > 224.21.21.21: VRRPv2, Advertisement, vrid 88, prio 100, authtype simple, intvl 1s, length 20
15:22:36.832800 IP 192.168.74.106 > 224.21.21.21: VRRPv2, Advertisement, vrid 66, prio 100, authtype simple, intvl 1s, length 20

4、KeepAlived實現IPVS-DR的高可用集群

  • 常用參數
delay_loop <INT>:服務輪詢的時間間隔
lb_algo rr|wrr|lc|wlc|lblc|sh|dh:定義調度方法
lb_kind NAT|DR|TUN:集群的類型
persistence_timeout <INT>:持久連接時長
protocol TCP:服務協議,僅支持TCP
sorry_server <IPADDR> <PORT>:所有RS故障時,備用服務器地址
real_server<IPADDR> <PORT> {
weight <INT> RS權重
notify_up <STRING>|<QUOTED-STRING> RS上線通知腳本
notify_down <STRING>|<QUOTED-STRING> RS下線通知腳本
HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHEC K { ... }:定義當前主機的健康狀態檢測方法
}
  • KeepAlived配置檢測
①HTTP_GET|SSL_GET:應用層檢測
HTTP_GET|SSL_GET {
url{
path <URL_PATH>:定義要監控的URL
status_code <INT>:判斷上述檢測機制為健康狀態的響應碼
digest  <STRING>:判斷為健康狀態的響應的內容的校驗碼
}
connect_timeout <INTEGER>:連接請求的超時時長
nb_get_retry <INT>:重試次數
delay_before_retry <INT>:重試之前的延遲時長
connect_ip <IP ADDRESS>:向當前RS哪個IP地址發起健康狀態檢測請求
connect_port <PORT>:向當前RS的哪個PORT發起健康狀態檢測請求
bindto <IP ADDRESS>:發出健康狀態檢測請求時使用的源地址
bind_port <PORT>:發出健康狀態檢測請求時使用的源端口
}
②如果后端的rs不是httpd服務。健康性檢查利用tcp協議進行檢查
TCP_CHECK {
connect_ip <IP ADDRESS>:向當前RS的哪個IP地址發起健康狀態檢測請求
connect_port <PORT>:向當前RS的哪個PORT發起健康狀態檢測請求
bindto <IP ADDRESS>:發出健康狀態檢測請求時使用的源地址
bind_port <PORT>:發出健康狀態檢測請求時使用的源端口
connect_timeout <INTEGER>:連接請求的超時時長
}
無標題6.png
1、在兩個webserver上的設置
systemctl start httpd
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 addr add 192.168.74.88 dev lo  ---在兩個webserver上配置vip
2、在主和從LVS服務器上的設置
vim /etc/keepalived/keepalived.conf 
 ! Configuration File for keepalived

global_defs {
   notification_email {
        root@localhost
   }
   notification_email_from node1@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id node1
        vrrp_mcast_group4 224.21.21.21
}
vrrp_instance VI_1 {
    state MASTER    ---在另外一臺上設置為BACKUP
    interface ens33   ---另外一臺上網卡可能不同需要修改
    virtual_router_id 88
    priority 100    ----在另外一臺上設置為90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 783b7339
    }
    virtual_ipaddress {
        192.168.74.88/24 dev ens33
    }
notify_master "/app/notify.sh master"
notify_backup "/app/notify.sh backup"
}
track_interface{
        ens33  ---另外一臺上網卡可能不同,需要修改
}
virtual_server 192.168.74.88 80 {    ----在上面的配置中增加一個virtual_server的語句塊,主和從LVS都要加這個語句塊
    delay_loop 6   ---服務輪詢的時間間隔
    lb_algo wrr   ----定義調度方法rr|wrr|lc|wlc|lblc|sh|dh
    lb_kind DR  ----NAT|DR|TUN:集群的類型
   # persistence_timeout <INT>:持久連接時長,此項最好不要加上,加上好測試不出來輪詢,因為會保持持久連接到第一個調度的rs服務器
    protocol TCP    ----服務協議,僅支持TCP
    sorry_server 127.0.0.1 80  ---所有RS故障時,備用服務器地址
  real_server 192.168.74.133 80 {
        weight 1   ---RS權重
        HTTP_GET {    ----應用層檢測
            url {     
              path /    ----定義要監控的URL
              status_code 200   ----判斷上述檢測機制為健康狀態的響應碼
            }
            connect_timeout 3  ----連接請求的超時時長
            nb_get_retry 3    ----重試次數
            delay_before_retry 3   ----重試之前的延遲時長
        }
    }
  real_server 192.168.74.129 80 {
        weight 1
 HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
在主和從上都搭建一個httpd服務器做為sorry_server
systemctl restart keepalived   ---主和從都重啟服務
yum install ipvsadm
[root@node1 app]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.74.88:80 wrr
  -> 192.168.74.129:80            Route   1      0          0         
  -> 192.168.74.133:80            Route   1      0          0     
3、測試
關閉主LVS的keeplived服務,從LVS就開始工作
在客戶端 curl 192.168.74.88   ---發現輪詢   

5、雙主模式的lVS-DR集群

雙主模式就是在兩個物理的LVS上配置兩個虛擬的VIP,當客戶端訪問192.168.74.88時node1是主,node2是備份,當客戶端訪問是192.168.74.66時node2是主,node1是備份,利用防火墻打標簽,當無論客戶端訪問的是192.168.74.88還是192.168.74.66時都調度到后端的rs服務器上
實現過程如下

1、在兩個rs服務器上的設置
systemctl start httpd
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 addr add 192.168.74.88 dev lo  ---在兩個webserver上配置兩個vip
ip addr add 192.168.74.66 dev lo 
2、在主和從LVS服務器上的設置
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
        root@localhost
   }
   notification_email_from node1@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id node1
        vrrp_mcast_group4 224.21.21.21
}

vrrp_instance VI_1 {     ---定義一個虛擬的vip1
    state MASTER   ---在另外一臺LVS上設置為BACKUP
    interface ens33  ---另外一臺上網卡可能不同需要修改
    virtual_router_id 88
    priority 100    ----在另外一臺LVS上設置為90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 783b7339
    }
    virtual_ipaddress {
        192.168.74.88/24 dev ens33 ---另外一臺網卡要修改
    }
notify_master "/app/notify.sh master"
notify_backup "/app/notify.sh backup"
notify_fault "/app/notify.sh fault"
}
track_interface{
        ens33  ---網卡可能不同需要修改
}
vrrp_instance VI_2 {    ---定義一個虛擬的vip2
    state BACKUP    ---在另外一臺LVS服務上設置為MASTER
    interface ens33    ----在另外一臺上網卡可能不同需要修改
    virtual_router_id 66
    priority 90    ----在另外一臺LVS服務上設置為100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 683b7339
    }
    virtual_ipaddress {
        192.168.74.66/24 dev ens33   ---另外一臺網卡名要修改
    }
notify_master "/app/notify.sh master"
notify_backup "/app/notify.sh backup"
notify_fault "/app/notify.sh fault"
}
track_interface{
        ens33    ---另外一臺上網卡名要修改
}
virtual_server fwmark 20 {    ---只要訪問的是打標簽為20的地址就轉發到后面的rs服務器上
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    protocol TCP
   sorry_server 127.0.0.1 80
  real_server 192.168.74.133 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
  real_server 192.168.74.129 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
iptables -t mangle -A PREROUTING -d 192.168.74.88,192.168.74.66 -p tcp --dport 80 -j MARK --set-mark 20   ---無論訪問哪個vip地址都打標簽為20
在兩個主從服務器上安裝httpd服務做為sorry_server
systemctl restart keepalived.service 
3、測試
在客戶端測試
curl 192.168.74.66
curl 192.168.74.88
停止一個LVS上keeplived服務,繼續訪問這兩個地址,仍然可以調度

6、高可用nginx服務

1、在后端的兩個rs上搭建好httpd服務
2、在兩個nginx服務器上搭建好nginx服務,并做好轉發
vim /etc/nginx/nginx.conf
   upstream webserver {     ---在http語句塊里添加
                server 192.168.74.133:80;
                server 192.168.74.129:80;
        }
vim /etc/nginx/conf.d/vhost.conf 
server{
        listen 80 default_server;
        server_name www.a.com;
        root /app/website1;
        location  / {
        proxy_pass http://webserver;

}
nginx -t  ---檢查語法
nginx  ---啟動服務
3、在兩臺nginx服務器上修改keepalived的配置文件
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
        root@localhost
   }
   notification_email_from node1@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id node1
        vrrp_mcast_group4 224.21.21.21
}

vrrp_script chk_down {       ---創建一個測試的腳本,如果這個文件存在就把優先級減20,這樣備用的就開始工作了,這個可以不加,只是測試用的
        script "[ -f /etc/keepalived/down ] &&exit 1||exit 0"
                interval 1
                weight -20
}
vrrp_script chk_nginx {    ---這個腳本是用來監控nginx服務是否正常工作,如果不正常優先級就減20,備用的開始工作
        script "killall -0 nginx &>/dev/null &&exit 0||exit 1"
                interval 1
                weight -20    ---如果腳本的返回值為1,優先級就減20
                fall 2    #2次檢測失敗為失敗
                rise 2  #2次檢測成功為成功
}
vrrp_instance VI_1 {
    state MASTER    ---另外一臺nginx上設置為BACKUP
 interface ens33    ---另外一臺網卡名要改
    virtual_router_id 88
    priority 100  ---另外一臺優先級為90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 783b7339
    }
    virtual_ipaddress {
        192.168.74.88/24 dev ens33    ---在另外一臺上網卡名要改
     }
        track_script {       ----調用上面的兩個腳本
                chk_down
                chk_nginx
}
notify_master "/app/notify.sh master"
notify_backup "/app/notify.sh backup"
notify_fault "/app/notify.sh fault"
}
systemctl start keepalived   ----啟動服務
4、測試
curl 192.168.74.88
停止一臺nginx服務,發現仍可以調度,因為vip已經轉移到備用的服務上了

7、同步組

LVS NAT模型VIP和DIP都需要同步,需要同步組

vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
        root@localhost
   }
   notification_email_from node1@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id node1
        vrrp_mcast_group4 224.21.21.21
}

vrrp_sync_group VG_1 {
        group {
                VI_1
                VI_2
}
}
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 88
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
       auth_pass 783b7339
    }
    virtual_ipaddress {
        192.168.74.88/24 dev ens33   ---定義一個vip
    }
notify_master "/app/notify.sh master"
notify_backup "/app/notify.sh backup"
notify_fault "/app/notify.sh fault"
}
vrrp_instance VI_2 {
    state MASTER
    interface ens37
    virtual_router_id 87
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 683b7339
    }
    virtual_ipaddress {
        172.18.21.88/16 dev ens37    ---定義dip
    }
notify_master "/app/notify.sh master"
notify_backup "/app/notify.sh backup"
notify_fault "/app/notify.sh fault"
}
                                              
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。