Keepalived實現LVS-DR雙機熱備_2015101601

Keepalived實現LVS-DR模型的高可用

 

>>>拓撲結構簡介

 

wKioL1YhHNXgKPzOAAF7nPcSMqg144.jpg

本次實驗所使用的系統發行版本爲:centos6.6

nod1)路由器,爲一臺linux主機模擬,共有兩個接口eth0內網172.16.0.0/16網段,並且該接口爲內網RS的網關;eth1爲外網192.168.1.0/24網段,爲外網客戶端的網關

nod55)爲MASTER調度器,DIP172.16.13.55/16keepalived工作於搶佔模式

nod44)爲BACKUP調度器,DIP172.16.13.44/16keepalived工作於搶佔模式

nod22)爲RS1,運行httpd服務,負責提供web服務

nod33)爲RS2,運行httpd服務,負責提供web服務

Client)使用一臺linux虛擬機模擬,網關指向nod1eth1接口

實驗目的

利用keepalived,實現LVS-DR模型的雙機熱備。當nod55故障停機,nod44自動搶佔VIP地址,並提供LVS調度功能;並且當nod55修復上線後,其自動搶佔VIP,繼續作爲MASTER服務器

 

實驗準備

VMware中創建6臺,nod22nod33nod44nod55各裝配有一塊網卡,爲橋接模式,nod1eth0網卡爲橋接模式,wth1網卡爲自定義網絡vmnet10Clientnod66)網卡也爲自定義網絡vmnet10

 

實驗配置:以下配置基本爲當前生效,重啓生效,若想永久生效需自行修改保存對應的配置文件

關於keepalived配置參數介紹,請參見http://imsupeng.blog.51cto.com/10651675/1703673

 

nod55MASTER的配置:提前配置好eth0IP172.16.13.55/16,網關無需指定

>>>關閉selinux,清空防火牆規則

[root@nod55 ~]# setenforce 0
[root@nod55 ~]# iptables –F

 

>>>由於keepalive的配置前提必須(1、主備節點時間同步;2、主備節點主機名必須是使用hostnameuname –r命令獲取的一直,並且能互相解析);因此,需要修改主機名並添加主備節點的hosts文件解析

[root@nod55 ~]# sed -i 's/\(HOSTNAME=\).*/\1nod55/' /etc/sysconfig/network && hostname nod55
[root@nod55 ~]# echo -e '127.0.0.1nod55\n172.16.13.44 nod44' >> /etc/hosts 
##172.16.13.44爲BACKUP節點的DIP
[root@nod55 ~]# crontab -e    
##編輯crontab任務計劃,添加如下內容,實現每3分鐘自動時間同步
*/3 * * * * /usr/sbin/ntpdate ntp.sjtu.edu.cn &> /dev/null && /sbin/hwclock -w

 

 

>>>安裝keepalived,並進行配置;

[root@nod55 ~]# yum install -y  keepalived   ##需事先配置好yum源
[root@nod55 ~]# vim /etc/keepalived/keepalived.conf 
##編輯keepalived配置文件,將配置文件所有內容刪除,粘貼如下配置


! Configuration File for keepalived

 

global_defs {   

  notification_email {

       root@localhost

   }

  notification_email_from kaadmin@nod55

  smtp_server 127.0.0.1

  smtp_connect_timeout 30

  router_id nod55         ##此項爲當前主機的主機名

}

 

vrrp_script chk_down {

        script "[[-e /etc/keepalived/down ]] && exit 1 || exit 0"

        interval 1

        weight -2

}        ##此處爲定義一個腳本,用於在線將主節點設置爲維護模式,此處腳本的意義爲:每隔一秒檢查一下/etc/keepalived/目錄下是否存在一個名爲down的文件,此文件一旦存在,便會執行將調用此腳本的VRRP實例的優先級(priority)減去2.

 

vrrp_instance VI_1 {

   state MASTER ##此處聲明當前節點爲MASTER節點

   interface eth0 ##聲明將VIP綁定在eth0網卡

   virtual_router_id 13         ##主備節點此處必須相同,若有多個VRRP實例,每個實例的此項不能相同

   priority 100      ##設置優先級,主節點必須大於備節點

   advert_int 1     ##keepalive的狀態通告週期時間/s

   authentication {

       auth_type PASS        ##狀態通告信息使用明文驗證

       auth_pass 5ffffc4b  ##狀態通告信息驗證密碼

    }

   virtual_ipaddress {

       172.16.13.100/32 dev eth0 label eth0:1          ##VIP地址

}

track_script {

         chk_down

}        ##此處爲調用前面所定義的腳本

}

virtual_server 172.16.13.100 80 {

   delay_loop 3    ##RealServer的健康狀態探測的時間間隔

   lb_algo rr ##LVS的調度算法

   lb_kind DR        ##LVS的類型,這裏使用的是DR模型

   nat_mask 255.255.255.255    ##VIP的掩碼,需和VRRP實例中定義的掩碼一致

   protocol TCP

 

   real_server 172.16.13.22 80 {

       weight 1

       HTTP_GET {      ##聲明狀態監測的方法

           url {

              path /

              status_code 200

           }

           connect_timeout 3

           nb_get_retry 3

           delay_before_retry 3

       }

    }

 

   real_server 172.16.13.33 80 {

       weight 1

       HTTP_GET {

           url {

              path /

              status_code 200

           }

           connect_timeout 3

           nb_get_retry 3

           delay_before_retry 3

       }

    }

 

}

 

>>>啓動keepalived進程,並添加至開機自動啓動

[root@nod55 ~]# service keepalived start
[root@nod55 ~]# chkconfig --add keepalived; chkconfig keepalived on

 

 

nod44MASTER的配置:提前配置好eth0IP172.16.13.44/16,網關無需指定

>>>關閉selinux,清空防火牆規則

[root@nod44 ~]# setenforce 0
[root@nod44 ~]# iptables –F

 

>>>修改主機名並添加主備節點的hosts文件解析;設置時間同步

[root@nod44 ~]# sed -i 's/\(HOSTNAME=\).*/\1nod44/' /etc/sysconfig/network && hostname nod44
[root@nod44 ~]# echo -e '127.0.0.1 nod44\n172.16.13.55nod55' >> /etc/hosts 
##172.16.13.55爲MASTER節點的DIP
[root@nod44 ~]# crontab -e    
##編輯crontab任務計劃,添加如下內容,實現每3分鐘自動時間同步
*/3 * * * * /usr/sbin/ntpdate ntp.sjtu.edu.cn &> /dev/null && /sbin/hwclock -w

 

 

>>>安裝keepalived,並進行配置;

[root@nod44 ~]# yum install -y  keepalived ##需事先配置好yum源
[root@nod44 ~]# vim /etc/keepalived/keepalived.conf
 ##編輯keepalived配置文件,將配置文件所有內容刪除,粘貼如下配置


! Configuration File for keepalived

global_defs {

  notification_email {

       root@localhost

   }

  notification_email_from kaadmin@nod44

  smtp_server 127.0.0.1

  smtp_connect_timeout 30

  router_id nod44

}

 

 

vrrp_instance VI_1 {

    state BACKUP

   interface eth0

    virtual_router_id 13

    priority 99

   advert_int 1

   authentication {

       auth_type PASS

       auth_pass 5ffffc4b

    }

   virtual_ipaddress {

       172.16.13.100/32 dev eth0 label eth0:1

    }

 

}

 

virtual_server 172.16.13.100 80 {

    delay_loop3

   lb_algo rr

   lb_kind DR

   nat_mask 255.255.255.255

protocol TCP

 

   real_server 172.16.13.22 80 {

       weight 1

       HTTP_GET {

           url {

              path /

              status_code 200

           }

           connect_timeout 3

           nb_get_retry 3

           delay_before_retry 3

       }

    }

 

   real_server 172.16.13.33 80 {

       weight 1

       HTTP_GET {

           url {

              path /

              status_code 200

           }

           connect_timeout 3

           nb_get_retry 3

           delay_before_retry 3

       }

    }

 

}

 

>>>啓動keepalived進程,並添加至開機自動啓動

[root@nod44 ~]# service keepalived start
[root@nod44 ~]# chkconfig --add keepalived; chkconfig keepalived on

 

 

nod22RS1的配置:提前配置好eth0IP172.16.13.22/16,網關需指向172.16.13.1routerIP

>>>關閉selinux,清空防火牆規則

[root@nod22 ~]# setenforce 0
[root@nod22 ~]# iptables –F

 

>>>安裝httpd,提供網頁文件並啓動httpd

[root@nod22 ~]# yum install -y httpd     ##需事先配置好yum源
[root@nod22 ~]# echo "nod22" >/var/www/html/index.html
[root@nod22 ~]# service httpd start

 

>>>在物理機測試http服務是否正常

wKiom1YhHOyy2kuDAACBBLXQQ20116.jpg

 

>>>/root目錄下編寫如下腳本,命名爲initset.sh(自定義腳本名),內容如下

由於LVS-DR模型RS上需要配置有VIP地址並隔離本機的VIPARP通告,以防影響VIP對外部請求的接收及調度,此腳本便是實現這些功能,並設置VIP地址到lo網卡的別名上,注意,此處隔離ARP通告和設置IP地址的順序不能隨便

#!/bin/sh
#
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
       ifconfig lo:0 172.16.13.100/32 broadcast 172.16.13.100 up
       ;;
stop)
       ifconfig lo:0 down
       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
       ;;
Esac

>>>運行此腳本,並向其傳遞start參數

[root@nod22 ~]# bash /root/initset.sh start

 

 

nod33RS2的配置:提前配置好eth0IP172.16.13.33/16,網關需指向172.16.13.1routerIP

>>>關閉selinux,清空防火牆規則

[root@nod33 ~]# setenforce 0
[root@nod33 ~]# iptables –F

 

>>>安裝httpd,提供網頁文件並啓動httpd

[root@nod33 ~]# yum install -y httpd     ##需事先配置好yum源
[root@nod33 ~]# echo "nod33" >/var/www/html/index.html
[root@nod33 ~]# service httpd start

 

>>>在物理機測試http服務是否正常

wKiom1YhHPzSI_PsAACQPa2B2No373.jpg

 

>>>/root目錄下編寫如下腳本,命名爲initset.sh(自定義腳本名),內容如下

#!/bin/sh
#
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
       ifconfig lo:0 172.16.13.100/32 broadcast 172.16.13.100 up
       ;;
stop)
       ifconfig lo:0 down
       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
       ;;
Esac

>>>運行此腳本,並向其傳遞start參數

[root@nod22 ~]# bash /root/initset.sh start

 

 

nod1ROUTER的網卡配置,無需指定網關

>>>關閉selinux及清空防火牆規則

[root@nod1 ~]# iptables -F
[root@nod1 ~]# setenforce 0

 

》》》開啓主機的核心轉發功能

[root@nod1 ~]# echo 1 >/proc/sys/net/ipv4/ip_forward

 

>>>網卡配置

wKioL1YhHT3ADvLBAAKbBAIVDWA480.jpg

 

 

 

 

 

Client客戶端IP設置爲192.168.1.12/24

@@@此處再次聲明:ClientROUTERnod1)的eth1連接在自定義網絡vmnet10上,MASTERBACKUPRS的網卡都爲橋接模式

 

 

 

第一步:由於在定義keepalived時,配置文件中創建了降級維護的腳本,因此首先在MASTER節點(nod55)上測試keepalived主備節點是否正常

wKiom1YhHTCC_6MZAAMelCJ2GZY910.jpg

 

>>>/etc/keepalived/目錄下創建一個名爲“down”的文件,測試VIP是否能正常轉移

[root@nod55 ~]# cd /etc/keepalived/
[root@nod55 keepalived]# touch down
[root@nod55 keepalived]# ls
down keepalived.conf keepalived.conf.bak

wKiom1YhHV3Q5owoAAIR4RADwkM982.jpg

 

wKioL1YhHbHhyJXGAANRNgeGyjE319.jpg

 


 

測試正常,將nod55down文件刪除,使nod55再次成爲MASTER節點

wKiom1YhHfmzawI7AAIJAERhqbA065.jpg

 

 

第二步:客戶端使用curl命令進行請求測試:

wKiom1YhHh_CiDelAAKckJObFNE031.jpg

測試正常

 

第三部:將MASTER節點置爲維護狀態(在nod55主機的/etc/keepalived目錄下創建名爲down的文件),然後再從客戶端進行訪問測試

wKioL1YhHl2DlobfAAIR4RADwkM429.jpg

 

wKiom1YhHkqgYQt0AAJGXAGoSrc166.jpg

 

 

 

 


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