2018-08-28 KeepAlived

1荚藻、VRRP協(xié)議

VRRP協(xié)議被稱為虛擬路由冗余協(xié)議

  • 虛擬路由器簡介
    VRRP將局域網(wǎng)內(nèi)的一組路由器劃分在一起场梆,形成一個VRRP備份組,它在功能上相當于一臺虛擬路由器段只,使用虛擬路由器號進行標識趣惠。以下使用虛擬路由器代替VRRP備份組進行描述。
    虛擬路由器有自己的虛擬IP地址和虛擬MAC地址身害,它的外在表現(xiàn)形式和實際的物理路由器完全一樣味悄。局域網(wǎng)內(nèi)的主機將虛擬路由器的IP地址設置為默認網(wǎng)關(guān),通過虛擬路由器與外部網(wǎng)絡進行通信塌鸯。虛擬路由器是工作在實際的物理路由器之上的侍瑟。它由多個實際的路由器組成,包括一個Master路由器和多個Backup路由器。Master路由器正常工作時涨颜,局域網(wǎng)內(nèi)的主機通過Master與外界通信费韭。當Master路由器出現(xiàn)故障時,Backup路由器中的一臺設備將成為新的Master路由器庭瑰,接替轉(zhuǎn)發(fā)報文的工作星持,如圖下圖


    image.png
  • VRRP工作過程
    VRRP的工作過程為:
    (1) 虛擬路由器中的路由器根據(jù)優(yōu)先級選舉出Master。Master 路由器通過發(fā)送免費ARP 報文弹灭,將自己的虛擬MAC 地址通知給與它連接的設備或者主機督暂,從而承擔報文轉(zhuǎn)發(fā)任務;
    (2) Master 路由器周期性發(fā)送VRRP 報文穷吮,以公布其配置信息(優(yōu)先級等)和工作狀況逻翁;
    (3) 如果Master 路由器出現(xiàn)故障,虛擬路由器中的Backup 路由器將根據(jù)優(yōu)先級重新選舉新的Master捡鱼;
    (4) 虛擬路由器狀態(tài)切換時八回,Master 路由器由一臺設備切換為另外一臺設備,新的Master 路由器只是簡單地發(fā)送一個攜帶虛擬路由器的MAC 地址和虛擬IP地址信息的免費ARP 報文驾诈,這樣就可以更新與它連接的主機或設備中的ARP 相關(guān)信息缠诅。網(wǎng)絡中的主機感知不到Master 路由器已經(jīng)切換為另外一臺設備。
    (5) Backup 路由器的優(yōu)先級高于Master 路由器時翘鸭,由Backup 路由器的工作方式(搶占方式和非搶占方式)決定是否重新選舉Master滴铅。
    由此可見,為了保證Master路由器和Backup路由器能夠協(xié)調(diào)工作就乓,VRRP需要實現(xiàn)以下功能:
    Master 路由器的選舉汉匙;
    Master 路由器狀態(tài)的通告;
    同時生蚁,為了提高安全性噩翠,VRRP 還提供了認證功能;
  • VRRP提供了三種認證方式:
    無認證:不進行任何 VRRP 報文的合法性認證邦投,不提供安全性保障伤锚。
    簡單字符認證:在一個有可能受到安全威脅的網(wǎng)絡中,可以將認證方式設置
    為簡單字符認證志衣。發(fā)送VRRP 報文的路由器將認證字填入到VRRP 報文中屯援,
    而收到VRRP 報文的路由器會將收到的VRRP 報文中的認證字和本地配置的
    認證字進行比較。如果認證字相同念脯,則認為接收到的報文是合法的VRRP 報
    文狞洋;否則認為接收到的報文是一個非法報文。
    MD5 認證:在一個非常不安全的網(wǎng)絡中绿店,可以將認證方式設置為MD5 認
    證吉懊。發(fā)送VRRP 報文的路由器利用認證字和MD5 算法對VRRP 報文進行加
    密庐橙,加密后的報文保存在Authentication Header(認證頭)中。收到VRRP
    報文的路由器會利用認證字解密報文借嗽,檢查該報文的合法性态鳖。
  • VRRP優(yōu)先級
    VRRP優(yōu)先級的取值范圍為0到255(數(shù)值越大表明優(yōu)先級越高),可配置的范圍是
    1到254恶导,優(yōu)先級0為系統(tǒng)保留給路由器放棄Master位置時候使用浆竭,255則是系統(tǒng)保
    留給IP地址擁有者使用。當路由器為IP地址擁有者時甲锡,其優(yōu)先級始終為255兆蕉。因
    此,當虛擬路由器內(nèi)存在IP地址擁有者時缤沦,只要其工作正常虎韵,則為Master路由器。
  • 術(shù)語:
    虛擬路由器:Virtual Router
    虛擬路由器標識:VRID(0-255)缸废,唯一標識虛擬路由器
    物理路由器:
    master:主設備
    backup:備用設備
    priority:優(yōu)先級
    VIP:Virtual IP
    VMAC:VirutalMAC (00-00-5e-00-01-VRID)

總結(jié):VRRP協(xié)議可以實現(xiàn)ip地址的漂移包蓝,在兩個物理路由器上虛擬的配置一個VIP,并且VIP剛開始時由master使用企量,當master損壞時備用的路由器根據(jù)優(yōu)先級進行選舉测萎,選舉為master路由器的使用此虛擬VIP

2、KeepAlived的配置準備

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

在兩臺物理路由器上做如下配置届巩,本次實驗使用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   ---啟動同步時間的服務硅瞧,我們發(fā)現(xiàn)在centos6和centos7上同步時間的服務是不同的
chkconfig ntpd on
為什么要先同步時間再去修改配置文件,因為如果時間相差的太多是不會同步的恕汇。必須用命令將時間先同步后再去修改配置文件

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

getenfoce
iptables -vnL

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

在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
將兩臺主機退出后重新登錄發(fā)現(xiàn)主機名改變了
[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) 各節(jié)點之間的root用戶可以基于密鑰認證的ssh服務完成互相通信(對KA并非必須)

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

3谚中、KeepAlived實現(xiàn)

  • 實現(xiàn)單主模式vip的地址轉(zhuǎn)移
yum install keepalived
1键俱、在主上的配置
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {  ---這里一定要注意所有的大括號前都有空格碰逸,并且大括號要一一對應,不然實現(xiàn)不了
   notification_email {      ---給哪個郵箱地址發(fā)通知
        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向這個多播地址發(fā)送消息枷遂,證明自己還活著漆枚,當主master壞了的時候湿蛔,多個從路由器向這個多播地址內(nèi)發(fā)送信息膀曾,通過比較優(yōu)先級選舉出來一個master做為主來代替壞了的master工作
}

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

}
track_interface{    ---配置監(jiān)控網(wǎng)絡接口苫纤,一旦出現(xiàn)故障,則轉(zhuǎn)為FAULT狀態(tài)實現(xiàn)地址轉(zhuǎn)移
        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命令發(fā)現(xiàn)vip已經(jīng)配置成功
在從上輸入ip a命令發(fā)現(xiàn)沒有vip
此時把主的網(wǎng)卡斷開喊废,在從上抓包
tcpdump -i eth0 -nn host 224.21.21.21可以看到切換的過程,通過向多播內(nèi)發(fā)送優(yōu)先級選舉出master
并在從上查看ip a發(fā)現(xiàn)vip已經(jīng)轉(zhuǎn)移到從上了
ip link set dev eth0 multicast off    ---可以使用如下命令關(guān)閉多播栗弟,默認都是開啟的污筷,一般不需要關(guān)閉,此服務如果關(guān)閉多播就無法選舉master了和進行實時監(jiān)控主master是否是活著的了
nopreempt:定義工作模式為非搶占模式乍赫,也就是原來的主master修好后即使優(yōu)先級比現(xiàn)在的高也不會成為master
preempt_delay 300:搶占式模式瓣蛀,節(jié)點上線后觸發(fā)新選舉操作的延遲時長,默認模式
  • 實現(xiàn)日志功能
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   ---發(fā)現(xiàn)已經(jīng)有日志記錄了
  • 定義通知腳本
    也就是發(fā)生vip轉(zhuǎn)移時會給本機的root發(fā)郵件
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诈皿、在主路由器和從路由器的配置文件中調(diào)用這個腳本
vim /etc/keepalived/keepalived.conf   ---加到vrrp_instance VI_1語句塊里
notify_master "/app/notify.sh master"   ---表示當切換到主的時候會自動給本機的root發(fā)郵件
notify_backup "/app/notify.sh backup"     ---表示切換為備用的時候會自動給本機的root發(fā)郵件
notify_fault "/app/notify.sh fault"
3、測試
在主路由器上關(guān)閉keepalived服務像棘,在從路由器上會發(fā)現(xiàn)root收到一封郵件稽亏,變成主的通知的郵件,當主路由器開啟keepalived服務時會發(fā)現(xiàn)從路由器上的root收到一封變成backup的郵件
輸入mail命令就可以看到發(fā)給root的郵件
  • 實現(xiàn)雙主模式
    上面的示例只是實現(xiàn)了一個虛擬vip缕题,當主工作時截歉,從不會工作,只有當主不工作了從才會變成master烟零,得到vip開始工作瘪松,如果要實現(xiàn)主和從都工作,就需要配置兩個虛擬的vip
    實現(xiàn)如下圖所示


    image.png

    實現(xiàn)過程如下:

1瓶摆、在node1上的設置
vim /etc/keepalived/keepalived.conf   ---在上面的配置中增加一個實例
vrrp_instance VI_2 {
    state BACKUP  ---將node1設置為備份
    interface ens33
    virtual_router_id 66  ---虛擬路由標識改一下
    priority 90  ---優(yōu)先級要調(diào)低
    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   發(fā)現(xiàn)新的vip綁定到rode2上了
[root@node2 ~]#tcpdump -i eth0 -nn host 224.21.21.21  ---抓包可以看到有兩個主在多播內(nèi)發(fā)送優(yōu)先級等信息群井,證明自己還活著
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實現(xiàn)IPVS-DR的高可用集群

  • 常用參數(shù)
delay_loop <INT>:服務輪詢的時間間隔
lb_algo rr|wrr|lc|wlc|lblc|sh|dh:定義調(diào)度方法
lb_kind NAT|DR|TUN:集群的類型
persistence_timeout <INT>:持久連接時長
protocol TCP:服務協(xié)議,僅支持TCP
sorry_server <IPADDR> <PORT>:所有RS故障時书斜,備用服務器地址
real_server<IPADDR> <PORT> {
weight <INT> RS權(quán)重
notify_up <STRING>|<QUOTED-STRING> RS上線通知腳本
notify_down <STRING>|<QUOTED-STRING> RS下線通知腳本
HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHEC K { ... }:定義當前主機的健康狀態(tài)檢測方法
}
  • KeepAlived配置檢測
①HTTP_GET|SSL_GET:應用層檢測
HTTP_GET|SSL_GET {
url{
path <URL_PATH>:定義要監(jiān)控的URL
status_code <INT>:判斷上述檢測機制為健康狀態(tài)的響應碼
digest  <STRING>:判斷為健康狀態(tài)的響應的內(nèi)容的校驗碼
}
connect_timeout <INTEGER>:連接請求的超時時長
nb_get_retry <INT>:重試次數(shù)
delay_before_retry <INT>:重試之前的延遲時長
connect_ip <IP ADDRESS>:向當前RS哪個IP地址發(fā)起健康狀態(tài)檢測請求
connect_port <PORT>:向當前RS的哪個PORT發(fā)起健康狀態(tài)檢測請求
bindto <IP ADDRESS>:發(fā)出健康狀態(tài)檢測請求時使用的源地址
bind_port <PORT>:發(fā)出健康狀態(tài)檢測請求時使用的源端口
}
②如果后端的rs不是httpd服務诬辈。健康性檢查利用tcp協(xié)議進行檢查
TCP_CHECK {
connect_ip <IP ADDRESS>:向當前RS的哪個IP地址發(fā)起健康狀態(tài)檢測請求
connect_port <PORT>:向當前RS的哪個PORT發(fā)起健康狀態(tài)檢測請求
bindto <IP ADDRESS>:發(fā)出健康狀態(tài)檢測請求時使用的源地址
bind_port <PORT>:發(fā)出健康狀態(tài)檢測請求時使用的源端口
connect_timeout <INTEGER>:連接請求的超時時長
}
image.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   ---另外一臺上網(wǎng)卡可能不同需要修改
    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  ---另外一臺上網(wǎng)卡可能不同焙糟,需要修改
}
virtual_server 192.168.74.88 80 {    ----在上面的配置中增加一個virtual_server的語句塊,主和從LVS都要加這個語句塊
    delay_loop 6   ---服務輪詢的時間間隔
    lb_algo wrr   ----定義調(diào)度方法rr|wrr|lc|wlc|lblc|sh|dh
    lb_kind DR  ----NAT|DR|TUN:集群的類型
   # persistence_timeout <INT>:持久連接時長样屠,此項最好不要加上穿撮,加上好測試不出來輪詢缺脉,因為會保持持久連接到第一個調(diào)度的rs服務器
    protocol TCP    ----服務協(xié)議,僅支持TCP
    sorry_server 127.0.0.1 80  ---所有RS故障時悦穿,備用服務器地址
  real_server 192.168.74.133 80 {
        weight 1   ---RS權(quán)重
        HTTP_GET {    ----應用層檢測
            url {     
              path /    ----定義要監(jiān)控的URL
              status_code 200   ----判斷上述檢測機制為健康狀態(tài)的響應碼
            }
            connect_timeout 3  ----連接請求的超時時長
            nb_get_retry 3    ----重試次數(shù)
            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攻礼、測試
關(guān)閉主LVS的keeplived服務,從LVS就開始工作
在客戶端 curl 192.168.74.88   ---發(fā)現(xiàn)輪詢

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時都調(diào)度到后端的rs服務器上
實現(xiàn)過程如下

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  ---另外一臺上網(wǎng)卡可能不同需要修改
    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 ---另外一臺網(wǎng)卡要修改
    }
notify_master "/app/notify.sh master"
notify_backup "/app/notify.sh backup"
notify_fault "/app/notify.sh fault"
}
track_interface{
        ens33  ---網(wǎng)卡可能不同需要修改
}
vrrp_instance VI_2 {    ---定義一個虛擬的vip2
    state BACKUP    ---在另外一臺LVS服務上設置為MASTER
    interface ens33    ----在另外一臺上網(wǎng)卡可能不同需要修改
    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   ---另外一臺網(wǎng)卡名要修改
    }
notify_master "/app/notify.sh master"
notify_backup "/app/notify.sh backup"
notify_fault "/app/notify.sh fault"
}
track_interface{
        ens33    ---另外一臺上網(wǎng)卡名要修改
}
virtual_server fwmark 20 {    ---只要訪問的是打標簽為20的地址就轉(zhuǎn)發(fā)到后面的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服務绣的,繼續(xù)訪問這兩個地址叠赐,仍然可以調(diào)度

6、高可用nginx服務

1屡江、在后端的兩個rs上搭建好httpd服務
2芭概、在兩個nginx服務器上搭建好nginx服務,并做好轉(zhuǎn)發(fā)
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 {       ---創(chuàng)建一個測試的腳本罢洲,如果這個文件存在就把優(yōu)先級減20,這樣備用的就開始工作了文黎,這個可以不加惹苗,只是測試用的
        script "[ -f /etc/keepalived/down ] &&exit 1||exit 0"
                interval 1
                weight -20
}
vrrp_script chk_nginx {    ---這個腳本是用來監(jiān)控nginx服務是否正常工作,如果不正常優(yōu)先級就減20耸峭,備用的開始工作
        script "killall -0 nginx &>/dev/null &&exit 0||exit 1"
                interval 1
                weight -20    ---如果腳本的返回值為1桩蓉,優(yōu)先級就減20
                fall 2    #2次檢測失敗為失敗
                rise 2  #2次檢測成功為成功
}
vrrp_instance VI_1 {
    state MASTER    ---另外一臺nginx上設置為BACKUP
 interface ens33    ---另外一臺網(wǎng)卡名要改
    virtual_router_id 88
    priority 100  ---另外一臺優(yōu)先級為90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 783b7339
    }
    virtual_ipaddress {
        192.168.74.88/24 dev ens33    ---在另外一臺上網(wǎng)卡名要改
     }
        track_script {       ----調(diào)用上面的兩個腳本
                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服務劳闹,發(fā)現(xiàn)仍可以調(diào)度院究,因為vip已經(jīng)轉(zhuǎn)移到備用的服務上了

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"
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末业汰,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子菩颖,更是在濱河造成了極大的恐慌样漆,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晦闰,死亡現(xiàn)場離奇詭異放祟,居然都是意外死亡鳍怨,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門跪妥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來京景,“玉大人,你說我怎么就攤上這事骗奖。” “怎么了醒串?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵执桌,是天一觀的道長。 經(jīng)常有香客問我芜赌,道長仰挣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任缠沈,我火速辦了婚禮膘壶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘洲愤。我一直安慰自己颓芭,他們只是感情好,可當我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布柬赐。 她就那樣靜靜地躺著亡问,像睡著了一般。 火紅的嫁衣襯著肌膚如雪肛宋。 梳的紋絲不亂的頭發(fā)上州藕,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天,我揣著相機與錄音酝陈,去河邊找鬼床玻。 笑死,一個胖子當著我的面吹牛沉帮,可吹牛的內(nèi)容都是我干的锈死。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼遇西,長吁一口氣:“原來是場噩夢啊……” “哼馅精!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起粱檀,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤洲敢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后茄蚯,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體压彭,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡睦优,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了壮不。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片汗盘。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖询一,靈堂內(nèi)的尸體忽然破棺而出隐孽,到底是詐尸還是另有隱情,我是刑警寧澤健蕊,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布菱阵,位于F島的核電站,受9級特大地震影響缩功,放射性物質(zhì)發(fā)生泄漏晴及。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一嫡锌、第九天 我趴在偏房一處隱蔽的房頂上張望虑稼。 院中可真熱鬧,春花似錦势木、人聲如沸蛛倦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽胰蝠。三九已至,卻和暖如春震蒋,著一層夾襖步出監(jiān)牢的瞬間茸塞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工查剖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留钾虐,地道東北人。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓笋庄,卻偏偏與公主長得像效扫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子直砂,可洞房花燭夜當晚...
    茶點故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容