RedHat 7配置keepalived+LVS實現高可用的Web負載均衡

上一篇博文中我們使用keepalived實現了haproxy的高可用,但keepalived問世之初卻是爲LVS而設計,與LVS高度整合,LVS與haproxy一樣也是實現負載均衡,結合keepalived可以實現LVS的高可用架構,這一篇主要介紹RedHat 7配置keepalived+LVS實現高可用的Web負載均衡,架構圖如下:

         wKioL1jRRPeiDbASAABlB8iS-po529.png


一、測試環境

計算機名

操作系統

IP地址

VIP

安裝的軟件

RH7-LVS01

Redhat  7.2

192.168.10.31

192.168.10.30

ipvsadm 1.27keepalived 1.2.13

RH7-LVS02

Redhat  7.2

192.168.10.32

ipvsadm 1.27keepalived 1.2.13

RH7-Web-01

Redhat  7.2

192.168.10.33

     ——

Apache  httpd 2.4

RH7-Web-02

Redhat  7.2

192.168.10.34

     ——

Apache  httpd 2.4


二、安裝配置lvs與keepalived
1、分別在兩臺lvs服務器rh7-lvs01和rh7-lvs02上安裝ipvsadm和keepalived
[root@rh7-lvs01 ~]# yum install ipvsadm keepalived -y

wKioL1jP4O6SqLI7AAHB8sNfDV0042.png

[root@rh7-lvs02 ~]# yum install ipvsadm keepalived -y

wKioL1jP4O-iDOezAAEd6Dm9V78700.png

2、修改rh7-lvs01上的keepalived配置文件,按以下內容進行修改,將rh7-lvs01配置爲MASTER節點,並設置LVS的負載均衡模式爲DR模式
[root@rh7-lvs01 ~]# vi /etc/keepalived/keepalived.conf

! Configuration Filefor keepalived
 
global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
 
vrrp_instance VI_1 {
    state MASTER #MASTER
    interface eno16777736
    virtual_router_id 52
    priority 100 #必須比BACKUP的值大
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.10.30 #VIP
    }
}
 
virtual_server192.168.10.30 80 {
    delay_loop 6
    lb_algo rr #輪詢算法
    lb_kind DR #DR模式
    #persistence_timeout 50
    protocol TCP
 
    real_server 192.168.10.33 80 {
        weight 1
            TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
 
    real_server 192.168.10.34 80 {
        weight 1
            TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}


3、修改rh7-lvs02上的keepalived配置文件,按以下內容進行修改,其實只有2處地方與主節點的配置文件不同,即state 要修改爲Backup,priority數值要比master的小
[root@rh7-lvs02 ~]# vi /etc/keepalived/keepalived.conf

! Configuration Filefor keepalived
 
global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
 
vrrp_instance VI_1 {
    state BACKUP #BACKUP
    interface eno16777736
    virtual_router_id 52
    priority 90 #必須比MASTER的值小
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.10.30 #VIP
    }
}
 
virtual_server192.168.10.30 80 {
    delay_loop 6
    lb_algo rr #輪詢算法
    lb_kind DR #DR模式
    #persistence_timeout 50
    protocol TCP
 
    real_server 192.168.10.33 80 {
        weight 1
            TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
 
    real_server 192.168.10.34 80 {
        weight 1
            TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}


4、在rh7-lvs01上設置keepalived開機自動啓動,並啓動keepalived服務
[root@rh7-lvs01 keepalived]# systemctl enable keepalived
[root@rh7-lvs01 keepalived]# systemctl start keepalived

wKiom1jP4PCzPsd6AABme0eQNdg621.png


5、觀察rh7-lvs01的日誌可觀察到keepalived啓動後所發生的一連串動作,根據配置文件的參數進入了MASTER狀態,並綁定了VIP地址

[root@rh7-lvs01 ~]#tail -f /var/log/messages

wKioL1jP4PKSc5YpAARkxWQhapk227.png

6、查看rh7-lvs01的IP地址,可以看到VIP已經綁定到網卡上

wKiom1jP4PPxh_Z6AAEkgnoz5Hc949.png


7、在rh7-lvs02上設置keepalived開機自動啓動,並啓動keepalived服務
[root@rh7-lvs02 keepalived]# systemctl enable keepalived
[root@rh7-lvs02 keepalived]# systemctl start keepalived

wKioL1jP4PPCPNh-AAB1fb6ZCrk188.png


8、觀察rh7-lvs02的日誌可觀察到keepalived啓動後所發生的一連串動作,根據配置文件的參數進入了BACKUP狀態

wKiom1jP4PbCgmhjAAOsbFD1Qeo952.png


9、查看rh7-lvs02的IP地址,可以看到VIP不在網卡上

wKioL1jP4Pbj1maNAAEA5C6QFvo032.png


10、查看LVS的狀態,可以看到VIP和兩臺Realserver的相關信息

wKiom1jP4Pnxs2N7AABuOZyNQ8A848.png


11、由於DR模式是後端兩臺realserver在響應請求時直接將數據包發給客戶端,無需再經過LVS,這樣減輕了LVS的負擔、提高了效率,但由於LVS分發給realserver的數據包的目的地址是VIP地址,因此必須把VIP地址綁定到realserver的迴環網卡lo上,否則realserver會認爲該數據包不是發給自己因此會丟棄不作響應。另外由於網絡接口都會進行ARP廣播響應,因此當其他機器也有VIP地址時會發生衝突,故需要把realserver的lo接口的ARP響應關閉掉。我們可以用以下腳本來實現VIP綁定到lo接口和關閉ARP響應。

wKiom1jP4PfSCEi6AACp0OKXoG8873.png


12、執行該腳本設置該腳本開機自動執行,查看IP地址,發現lo接口已經綁定了VIP地址

wKioL1jP4Pig5JL-AAFe6T48blw712.png


13、同理,在RH7-Web-02上也綁定了VIP地址到lo接口上

wKioL1jP4PnikbpxAADEmuUOL04203.png

本文出自江健龍的技術博客 http://jiangjianlong.blog.51cto.com/3735273/1909031


三、LVS負載均衡測試

1、在兩臺WEB上分別配置不同的默認頁面,以方便區分訪問到的是哪臺WEB,從而看出負載均衡效果是否生效

2、使用瀏覽器訪問VIP,先是訪問到Web01,進行刷新,又訪問到Web02,說明負載均衡已經生效

wKioL1jP4PqwdxZpAAA1zH--MjE610.png

wKiom1jP4PrxuuLlAAA2K6ba0cw443.png

3、查看LVS的狀態,可以看到兩臺realserver各有2個不活動的連接,說明按1:1權重的輪詢也有生效,不活動連接是因爲我們只是訪問一個靜態頁面,訪問過後很快就會處於不活動狀態

wKioL1jP4PvR2S-JAABNEpKsawA592.png

本文出自江健龍的技術博客 http://jiangjianlong.blog.51cto.com/3735273/1909031


四、Keepalived高可用測試

1、停止rh7-lvs01上的keepalived服務,再觀察它的日誌,可以發現其綁定的VIP被移除,兩個realserver節點也被移除了

[root@rh7-lvs01 ~]# systemctl stop keepalived

[root@rh7-lvs01 ~]# tail -f /var/log/messages

wKiom1jP4PyjaaeqAAEvujEBx8s425.png

wKioL1jP4P2CZagZAAD_q_e7G9s069.png

wKiom1jP4P2wwI-HAABOoO4jbVA230.png


2、再看看rh7-lvs02的日誌,再看看rh7-lvs02的日誌,可以看到它立刻檢測到主節點出現故障,馬上將自己進入MASTER狀態,同時接管了VIP,將VIP綁定到自己的網卡上,成功完成一次切換。
[root@rh7-lvs02 ~]# tail -f /var/log/messages

wKiom1jP4P6jvNg5AADm3YMqGcM225.png

wKioL1jP4P-zlyHDAAEtUIgV6gA021.png

wKioL1jP4QCgHzffAABv4om3GFs654.png


3、使用瀏覽器訪問一下VIP,依然正常負載均衡地成功訪問,對用戶來說並未覺察到VIP剛發生過一次漂移。

wKiom1jP4QCRUoCkAAA1zH--MjE207.png

wKiom1jP4QHw0S3sAAA2K6ba0cw056.png

wKioL1jP4QGifXJfAABuO02BuLQ844.png


4、再將rh7-lvs01的keepalived服務啓動,通過日誌可以看到它啓動後進入了MASTER狀態,把剛纔rh7-lvs02剛綁定的VIP又奪了回去,誰叫它配置爲MASTER呢,天生爲主呀,然王侯將相寧有種乎,我們其實也可以在主節點的keepalived配置文件中增加nopreempt參數控制它不要強行奪佔VIP

[root@rh7-lvs01 ~]# systemctl start keepalived
[root@rh7-lvs01 ~]# tail -f /var/log/messages

wKioL1jP4QPwOhGMAARJLtHRdTE242.png

[root@rh7-lvs02 ~]# tail -f /var/log/messages

wKiom1jP4QTSUJkgAACMFBEaaes341.png

wKiom1jP4QXiV5DVAAEkc24Moaw230.png


五、keepalived故障監控測試

1、我們將web01的httpd服務停止,模擬web01出現故障不能提供web服務,測試keepalived能否及時監控到並將web01從LVS中剔除,不再分發請求給web01,防止用戶訪問到故障的web服務器

[root@RH7-Web-01 ~]# systemctl stop httpd


2、通過查看rh7-lvs01的日誌可以看到keepalived檢查到web01的80端口失敗,於是將它從羣集中移除,並嘗試通過SMTP服務器發送郵件,由於我沒配SMTP服務器因此連接失敗報了錯誤

[root@rh7-lvs01 ~]# tail -f /var/log/messages

wKioL1jP4QXzTQ2UAAB9ruIr-vE195.png


3、通過查看rh7-lvs02的日誌發現它作爲備機也是觸發了相同的操作,說明備機也是時刻在監控着後端realserver的健康狀態

[root@rh7-lvs012~]# tail -f /var/log/messages

wKioL1jP4QbAVKu3AAB-O7hYGq8132.png


4、分別在rh7-lvs01和rh7-lvs02上查看LVS的狀態,可以看到確實都移除了故障的web節點

wKiom1jP4QaQaQvWAABkX5Gp2n0719.png

wKioL1jP4QfwM3cqAABvjFCw8zs730.png

5、再把web01的httpd服務啓動
[root@RH7-Web-01 ~]# systemctl start httpd


6、通過rh7-lvs01和rh7-lvs02的日誌可以看到它們監控到web01的80端口已成功連接,便再次把web01加入到LVS中去,這個監控的方法可以是檢測端口,也可以檢測URL等其他方法,具體取決於keepalived配置文件中的參數設置。

[root@rh7-lvs01 ~]# tail -f /var/log/messages

wKiom1jROX2gC8eoAAB6cw2TkyY996.png

[root@rh7-lvs02 ~]# tail -f /var/log/messages

wKioL1jROX6Qyww5AAB8dh0yvqo891.png


7、分別在rh7-lvs01和rh7-lvs02上查看LVS的狀態,可以看到確實都把web01節點又加了進來

wKiom1jROX-wP9kpAABwT7XHFSw932.png

wKioL1jROYCgmqmuAABxHDGCpuI804.png

本文出自江健龍的技術博客 http://jiangjianlong.blog.51cto.com/3735273/1909031

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章