部署LVS-DR與 Keepalived羣集(實戰!!!)

keepalived概述

Keepalived的作用是檢測服務器的狀態,如果有一臺web服務器宕機,或工作出現故障,Keepalived將檢測到,並將有故障的服務器從系統中剔除,同時使用其他服務器代替該服務器的工作,當服務器工作正常後Keepalived自動將服務器加入到服務器羣中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修復故障的服務器。

keepalived工作原理

1、keepalived是以VRRP協議爲實現基礎的,VRRP全稱Virtual Router Redundancy Protocol,即虛擬路由冗餘協議。

2、虛擬路由冗餘協議,可以認爲是實現路由器高可用的協議,即將N臺提供相同功能的路由器組成一個路由器組,這個組裏面有一個master和多個backup,master上面有一個對外提供服務的vip(該路由器所在局域網內其他機器的默認路由爲該vip),master會發組播,當backup收不到vrrp包時就認爲master宕掉了,這時就需要根據VRRP的優先級來選舉一個backup當master。這樣的話就可以保證路由器的高可用了。

3、keepalived主要有三個模塊,分別是core、check和vrrp。core模塊爲keepalived的核心,負責主進程的啓動、維護以及全局配置文件的加載和解析。check負責健康檢查,包括常見的各種檢查方式。vrrp模塊是來實現VRRP協議的。

實驗環境

調度服務器DR1(主):     192.168.100.66     centos7-1
調度服務器DR2(備):     192.168.100.77     centos7-2

節點服務器web1:       192.168.100.88     centos7-3
節點服務器web2:       192.168.100.99     centos7-4

漂移地址vip:             192.168.100.100

客戶端client:       192.168.100.200    windows7

第一步配置centos7-1——DR1調度服務器

1、安裝ipvsadm、keepalived軟件包

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

2、修改網卡模式爲僅主機並固定IP:192.168.100.66

[root@dr1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33

BOOTPROTO=static

IPADDR=192.168.100.66
NETMASK=255.255.255.0
GATEWAY=192.168.100.1

[root@dr1 ~]# service network restart
Restarting network (via systemctl):                        [  確定  ]

[root@dr1 ~]# vim /etc/sysctl.conf
#添加路由轉發功能
net.ipv4.ip_forward=1
#proc響應關閉重定向功能
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.default.send_redirects=0
net.ipv4.conf.ens33.send_redirects=0

#生效路由轉發功能
[root@dr1 ~]# sysctl -p             

3、構建虛擬網卡

[root@dr1 ~]# cd /etc/sysconfig/network-scripts/

[root@dr1 network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0

[root@dr1 network-scripts]# vim ifcfg-ens33:0
#刪除原有內容
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.100.100
NETWASK=255.255.255.0

  #啓用虛擬網卡
[root@dr1 network-scripts]# ifup ens33:0     

4、添加服務啓動腳本

[root@dr1 ~]# cd /etc/init.d/

[root@dr1 init.d]# vim dr.sh
#!/bin/bash
GW=192.168.100.1
VIP=192.168.100.100
RIP1=192.168.100.88
RIP2=192.168.100.99
case "$1" in
start)
        /sbin/ipvsadm --save > /etc/sysconfig/ipvsadm
        systemctl start ipvsadm
        /sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up
        /sbin/route add -host $VIP dev ens33:0
        /sbin/ipvsadm -A -t $VIP:80 -s rr
        /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
        /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
        echo "ipvsadm starting------------------[ok]"
        ;;
        stop)
        /sbin/ipvsadm -C
        systemctl stop ipvsadm
        ifconfig ens33:0 down
        route del $VIP
        echo "ipvsamd stoped--------------------[ok]"
        ;;
        status)
        if [ ! -e ar/lock/subsys/ipvsadm ];then
        echo "ipvsadm stoped--------------------"
        exit 1
                else
                echo "ipvsamd Runing-------------[ok]"
        fi
        ;;
        *)
        echo "Usage: $0 {start|stop|status}"
        exit 1
        esac
        exit 0

#授予腳本執行權限          
[root@dr1 init.d]# chmod +x dr.sh

#啓動腳本
[root@dr1 init.d]# service dr.sh start

#查看ipvsadm 狀態
[root@dr1 init.d]# systemctl status ipvsadm             #查看服務開啓狀態

#關閉防火牆與安全功能
[root@dr1 init.d]# systemctl stop firewalld.service
[root@dr1 init.d]# setenforce 0

第二步配置centos7-2——DR2調度服務器

1.安裝ipvsdam、keepalived軟件包

[root@dr2 ~]# yum install ipvsdam keepalived -y

2.修改網卡模式爲僅主機並固定IP:192.168.100.77

[root@dr2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33

BOOTPROTO=static

IPADDR=192.168.100.77
NETMASK=255.255.255.0
GATEWAY=192.168.100.1

[root@dr2 ~]# service network restart
Restarting network (via systemctl):                        [  確定  ]

[root@dr2 ~]# vim /etc/sysctl.conf
#添加路由轉發功能
net.ipv4.ip_forward=1
#proc響應關閉重定向功能
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.default.send_redirects=0
net.ipv4.conf.ens33.send_redirects=0

#生效路由轉發功能
[root@dr1 ~]# sysctl -p            

3、構建虛擬網卡

[root@dr1 ~]# cd /etc/sysconfig/network-scripts/

[root@dr1 network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0

[root@dr1 network-scripts]# vim ifcfg-ens33:0
#刪除原有內容
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.100.100
NETWASK=255.255.255.0

#啓用虛擬網卡
[root@dr2 ~]# ifup ens33:0        

4、添加服務啓動腳本

[root@dr2 ~]# cd /etc/init.d/

[root@dr2 ~]# vim dr.sh
#!/bin/bash
GW=192.168.100.1
VIP=192.168.100.100
RIP1=192.168.100.88
RIP2=192.168.100.99
case "$1" in
start)
        /sbin/ipvsadm --save > /etc/sysconfig/ipvsadm
        systemctl start ipvsadm
        /sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up
        /sbin/route add -host $VIP dev ens33:0
        /sbin/ipvsadm -A -t $VIP:80 -s rr
        /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
        /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
        echo "ipvsadm starting------------------[ok]"
        ;;
        stop)
        /sbin/ipvsadm -C
        systemctl stop ipvsadm
        ifconfig ens33:0 down
        route del $VIP
        echo "ipvsamd stoped--------------------[ok]"
        ;;
stop)
       /sbin/ipvsadm -C
        systemctl stop ipvsadm
        ifconfig ens33:0 down
        route del $VIP
        echo "ipvsamd stoped--------------------[ok]"
        ;;
        status)
        if [ ! -e ar/lock/subsys/ipvsadm ];then
        echo "ipvsadm stoped--------------------"
        exit 1
                else
                echo "ipvsamd Runing-------------[ok]"
        fi
        ;;
        *)
        echo "Usage: $0 {start|stop|status}"
        exit 1
        esac
        exit 0

[root@dr2 ~]# chmod +x dr.sh

[root@dr2 ~]# service dr.sh start

[root@dr2 ~]# systemctl status ipvsadm             #查看服務開啓狀態

[root@dr2 ~]# systemctl stop firewalld.service
[root@dr2 ~]# setenforce 0

第三步配置centos7-3——web1節點服務器

1.安裝httpd軟件包

[root@web-1 ~]# yum install httpd -y

2.修改網卡模式:僅主機並固定IP:192.168.100.88

[root@web-1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33

BOOTPROTO=static

IPADDR=192.168.100.88
NETMASK=255.255.255.0
GATEWAY=192.168.100.1

[root@web-1 ~]# service network restart                    #重啓網卡
[root@web-1 ~]# systemctl stop firewalld.service        #關閉防火牆
[root@web-1 ~]# setenforce 0

[root@web-1 ~]# systemctl start httpd.service       #啓動網站服務

3.創建網站首頁

[root@web-1 ~]# cd /var/www/html/
[root@web-1 ~]# echo "this is accp web" > index.html

4.創建虛擬網卡

[root@web-1 ~]# cd /etc/sysconfig/network-scripts/
[root@web-1 ~]# cp ifcfg-lo ifcfg-lo:0
[root@web-1 ~]# vim ifcfg-lo:0

#刪除原來所有信息,添加以下內容:
DEVICE=Lo:0
IPADDR=192.168.100.100
NETMASK=255.255.255.0
ONBOOT=yes

5.編寫服務啓動腳本

[root@web-1 ~]# cd /etc/init.d/
[root@web-1 ~]# vim web.sh               #控制服務啓動腳本

#!/bin/bash
VIP=192.168.100.100
        case "$1" in
        start)
                ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
                /sbin/route add -host $VIP dev lo:0
        echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
        echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
        sysctl -p > /dev/null 2>&1
        echo "RealServer Start OK "
        ;;
        stop)
                ifconfig lo:0 down
                route del $VIP /dev/null 2>&1
                echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore
                echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce
                echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
                echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
    echo "RealServer Stoped"
                ;;
        *)
                echo "Usage: $0 {start|stop}"
                exit 1
        esac
        exit 0

[root@web-1 ~]# chmod +x web.sh

[root@web-1 ~]# service web.sh start

[root@web-1 ~]# ifup lo:0      

在web2節點服務器上查看IP,可以看到虛擬IP就說明沒問題:ifconfig

firefox "http://127.0.0.1/" &         #直接訪問網站

[root@web-1 ~]# service web.sh stop

[root@web-1 ~]# service web.sh start                #建議重啓服務

第四步配置centos7-4——web2節點服務器

1.安裝httpd軟件包

[root@web-2 ~]# yum install httpd -y

2.調整網卡模式爲僅主機並固定IP:192.168.100.99

[root@web-2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33

BOOTPROTO=static

IPADDR=192.168.100.99
NETMASK=255.255.255.0
GATEWAY=192.168.100.1

[root@web-2 ~]# service network restart                    #重啓網卡
[root@web-2 ~]# systemctl stop firewalld.service        #關閉防火牆
[root@web-2 ~]# setenforce 0

[root@web-2 ~]# systemctl start httpd.service
[root@web-2 ~]# systemctl status httpd.service

[root@web-2 ~]# cd /var/www/html/
[root@web-2 ~]# echo "this is benet web" > index.html

[root@web-2 ~]# cd /etc/sysconfig/network-scripts/
[root@web-2 ~]# cp ifcfg-lo ifcfg-lo:0

[root@web-2 ~]# vim ifcfg-lo:0

DEVICE=Lo:0
IPADDR=192.168.100.100
NETMASK=255.255.255.0
ONBOOT=yes

[root@web-2 ~]# cd /etc/init.d/
[root@web-2 ~]# vim web.sh               #控制服務啓動腳本

#!/bin/bash
VIP=192.168.100.100
        case "$1" in
        start)
                ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
                /sbin/route add -host $VIP dev lo:0
        echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
        echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
        sysctl -p > /dev/null 2>&1
        echo "RealServer Start OK "
        ;;
        stop)
                ifconfig lo:0 down
                route del $VIP /dev/null 2>&1
                echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore
                echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce
                echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
                echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
    echo "RealServer Stoped"
                ;;
        *)
                echo "Usage: $0 {start|stop}"
                exit 1
        esac
        exit 0

[root@web-2 ~]# chmod +x web.sh

[root@web-2 ~]# service web.sh start

#開啓虛擬網卡
[root@web-2 ~]# ifup lo:0      

firefox "http://127.0.0.1/" &         #直接訪問網站

#關閉並重啓服務
[root@web-2 ~]# service web.sh stop
[root@web-2 ~]# service web.sh start      

第五步:使用Win7客戶端測試

1.使用win7,調整網卡爲僅主機模式
在這裏插入圖片描述
2.使用客戶機嘗試聯通服務器

C:\Users\czt>ping 192.168.100.100

正在 Ping 192.168.100.100具有 32 字節的數據:
來自 192.168.100.100 的回覆: 字節=32 時間<1ms TTL=64
來自 192.168.100.100 的回覆: 字節=32 時間<1ms TTL=64
來自 192.168.100.100 的回覆: 字節=32 時間<1ms TTL=64
來自 192.168.100.100 的回覆: 字節=32 時間<1ms TTL=64

192.168.100.100 的 Ping 統計信息:
    數據包: 已發送 = 4,已接收 = 4,丟失 = 0 (0% 丟失),
往返行程的估計時間(以毫秒爲單位):
    最短 = 0ms,最長 = 0ms,平均 = 0ms

3.使用客戶機瀏覽網頁,輸入http://192.168.100.100/

在這裏插入圖片描述
在這裏插入圖片描述

第六步:keepalived部署(兩臺調度服務器上配置一樣)

[root@dr1 ~]# cd /etc/keepalived/

[root@dr1 ~]# vim keepalived.conf

global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1                         #指向本地
   smtp_connect_timeout 30
   router_id LVS_01                    #指定名稱,備份服務器不同名稱,另一臺爲02
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER                     #備份服務器將MASTER換爲BACKUP  
    interface eth0
    virtual_router_id 10              #組號相同
    priority 100                          #優先級,備小於主
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass abc123              #驗證密碼
    }
    virtual_ipaddress {
        192.168.100.100               #虛擬IP
    }
}

virtual_server 192.168.100.100 80 {          #虛擬IP及端口號
    delay_loop 6
    lb_algo rr
    lb_kind DR                   #改爲DR
    persistence_timeout 50
    protocol TCP

    real_server 192.168.100.88 80 {              #節點服務器1
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.100.99 80 {              #節點服務器2
        weight 1
        TCP_CHECK {                     #修改爲TCP_CHECK
            connect_port 80              #添加端口
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

#啓動keepalived服務
[root@dr1 ~]# systemctl start keepalived.service

第七步:使用客戶端測試

1.模擬down掉一臺調度服務器

[root@dr1 init.d]# ifdown ens33:0

2.在win7上嘗試互聯服務器,如果在win7上還能ping通,就說明另一臺調度服務器已經接替並開始工作

C:\Users\czt>ping 192.168.100.100

正在 Ping 192.168.100.66 具有 32 字節的數據:
來自 192.168.100.100 的回覆: 字節=32 時間<1ms TTL=64
來自 192.168.100.100 的回覆: 字節=32 時間<1ms TTL=64
來自 192.168.100.100 的回覆: 字節=32 時間<1ms TTL=64
來自 192.168.100.100 的回覆: 字節=32 時間<1ms TTL=64

192.168.100.100 的 Ping 統計信息:
    數據包: 已發送 = 4,已接收 = 4,丟失 = 0 (0% 丟失),
往返行程的估計時間(以毫秒爲單位):
    最短 = 0ms,最長 = 0ms,平均 = 0ms

至此,實驗已驗證成功!

謝謝閱讀!!!

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