使用Keepalived實現雙機熱備


1Keepalived

keepalived是專爲LVSHA設計的一款健康檢查工具,支持故障自動切換和節點健康狀態檢查,可判斷LVS負載調度器和節點服務器的可用性,構建高可用性的LVS負載均衡羣集

②官方網站:http://www.keepalived.org/

     Snip20190221_1.pngSnip20190221_2.pngkl-logo-30.gif

2VRRPVirtual Router Redundancy Protocol,虛擬路由冗餘協議)

VRRP是由IETF提出的解決局域網中配置靜態網關出現單點失效現象的路由協議,其工作原理與CISCOHSRP類似,即由多臺路由器組成一個熱備組,通過共用的虛擬IP地址對外提供服務,每個熱備組內同一時刻只有一臺主路由器(master)提供服務,其他路由器處於冗餘狀態(backup),若當前主路由器失效,則處於冗餘狀態的路由器會自動接替虛擬IP地址,繼續提供服務

VRRPHSRP主要區別在於:HSRPCISCO私有,而VRRP是公有的,目前廠商都支持;HSRP中不允許虛擬IP地址使用HSRP組內設備的真實IP地址,而VRRP中允許使用VRRP組內設置的IP地址

③虛擬IP地址,即虛擬路由器的IP地址可以在熱備組內的路由器之間進行轉移,因此也稱爲漂移IP地址,其不需要手動配置,Keepalived會自動建立進行配置管理

3keepalived主配置文件/etc/keepalived/keepalived.conf

全局設置:global_defs { ... }

熱備設置:vrrp_instance 實例名稱 { ... }

樣例文件位於:/etc/keepalived/samples/...

state:設置本節點狀態,MASTERSLAVE

priority:設置競選優先級,數值越大優先級越高

virtual_ipaddress { ... }:設置漂移IP地址

 

 

實驗一:使用Keepalived實現雙機熱備

 

Snip20190221_3.png

一、基本配置

1、配置各Linux主機名

vi /etc/sysconfig/network

HOSTNAME=master.benet.com

vi /etc/hosts

172.16.16.173   master.benet.com

2、配置IP地址、關閉iptables

vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

ONBOOT=yes

BOOTPROTO=static

IPADDR=172.16.16.173

NETMASK=255.255.255.0

rm -f /etc/udev/rules.d/70-persistent-net.rules

reboot          --------重新啓動虛擬機,其他虛擬機配置與之類似

 

二、配置主服務器

1、安裝支持軟件

yum -y install kernel-devel openssl-devel popt-devel

2、編譯安裝Keepalived

tar zxf keepalived-1.2.2.tar.gz -C /usr/src

cd /usr/src/keepalived-1.2.2/

./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.32-131.0.15.el6.i686/

                              ------keepalived安裝到根目錄,同時指定Linux內核位置

make & make install

chkconfig --add keepalived      ----keepalived添加爲系統服務,方便管理

chkconfig keepalived on

3、修改主配置文件/etc/keepalived/keepalived.conf

vi /etc/keepalived/keepalived.conf

      global_defs {

   router_id master.benet.com            -----指定本服務器的主機名

      }

    vrrp_instance VI_1 {                                -----定義VRRP實例

    state MASTER                   ---- MASTER爲主路由器,SLAVE爲備用路由器

    interface eth0                                    -----承載VIP地址的物理接口

    virtual_router_id 51                         -----熱備組ID號,每個組應保持一致

    priority 100                                         -----優先級,越大優先級越高

    advert_int 1                                        -----心跳頻率

    authentication {                                 -----認證信息

        auth_type PASS                         -----認證類型爲密碼

        auth_pass 123456                    ----密碼字符串

    }

    virtual_ipaddress {                      -----指定漂移IP地址

        172.16.16.172

    }

      }
service keepalived start
ip addr show dev eth0                 -----
通過ip命令查看自動添加的虛擬IP地址

 

三、配置備用服務器

備用服務器的配置與主服務器基本類似,只有主配置文件keepalived.conf的部分配置項有所不同

1、安裝支持軟件

yum -y install kernel-devel openssl-devel popt-devel

2、編譯安裝Keepalived

tar zxf keepalived-1.2.2.tar.gz -C /usr/src

cd /usr/src/keepalived-1.2.2/

./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.32-131.0.15.el6.i686/

                                     ------keepalived安裝到根目錄,同時指定Linux內核位置

make & make install

chkconfig --add keepalived        ----keepalived添加爲系統服務,方便管理

chkconfig keepalived on

3、修改主配置文件/etc/keepalived/keepalived.conf

vi /etc/keepalived/keepalived.conf

      global_defs {

   router_id backup.benet.com

      }

    vrrp_instance VI_1 {

    state SLAVE                                      ----- SLAVE表示備用路由器

    priority 90                                            -----優先級數值應小於主服務器

    authentication {

        auth_type PASS

        auth_pass 123456                    ----密碼字符串與主服務器相同

    }

    virtual_ipaddress {

        172.16.16.172                          -----指定漂移IP地址

    }

      }
service keepalived start
ip addr show dev eth0

 

四、測試雙機熱備

Keepalived的日誌消息保存在/var/log/messages中,可查看此日誌文件觀察熱備狀態的變化

1、連通性測試

步驟:在客戶機上持續ping虛擬IP地址====>禁用主服務器的eth0網卡===>啓用主服務器的eth0網卡,觀察變化

ping -t 172.16.16.172

2、訪問Web服務測試

步驟:在主服務器和備用服務器上分別安裝httpd服務,並提供不同的web頁面====>禁用主服務器的eth0網卡===>啓用主服務器的eth0網卡,訪問測試

http://172.16.16.172

3、查看日誌文件

觀察日誌文件的變化

more /var/log/messages

 

 

實驗二:構建LVS+Keepalived高可用性羣集

 

Snip20190221_4.png

本實驗案例以DR模式的LVS羣集爲基礎,通過LVS+Keepalived實現Web站點的負載均衡和高可用性,其中包括兩臺熱備的負載調度器、兩臺Web節點服務器、一臺NFS服務器、一臺客戶機

 

一、基本配置

配置各Linux主機名、關閉iptables

二、配置主調度器

1、爲eth0eth1eth0:0配置IP地址

vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

ONBOOT=yes

BOOTPROTO=static

IPADDR=172.16.16.253

NETMASK=255.255.255.0

vi /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1

ONBOOT=yes

IPADDR=192.168.7.253

NETMASK=255.255.255.0

vi /etc/sysconfig/network-scripts/ifcfg-eth0:0

DEVICE=eth0:0

ONBOOT=yes

IPADDR=172.16.16.172

NETMASK=255.255.255.0

rm -f /etc/udev/rules.d/70-persistent-net.rules

reboot                --------重新啓動虛擬機

2、調整/proc內核參數,關閉重定向響應

由於負載調度器和各節點共用VIP地址,爲避免ARP解析異常,故關閉內核的重定向響應

vi /etc/sysctl.conf

net.ipv4.conf.all.send_redirects = 0

net.ipv4.conf.default.send_redirects = 0

net.ipv4.conf.eth0.send_redirects = 0

net.ipv4.conf.eth1.send_redirects = 0

sysctl –p

3、加載模塊、安裝LVS羣集管理工具

modprobe ip_vs

rpm -ivh /mnt/iso/Packages/ipvsadm-1.25-9.el6.i686.rpm

yum -y install vsftpd        -----配置yum倉庫,方便安裝軟件包

vi /etc/vsftpd/vsftpd.conf

anon_root=/mnt

service vsftpd start

chkconfig vsftpd on

4、編譯安裝Keepalived

yum -y install kernel-devel openssl-devel popt-devel

tar zxvf keepalived-1.2.2.tar.gz -C /usr/src

cd /usr/src/keepalived-1.2.2/

./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.32-131.0.15.el6.i686/

                              -----keepalived安裝到根目錄,同時指定Linux內核位置

make & make install

chkconfig --add keepalived      ----keepalived添加爲系統服務,方便管理

chkconfig keepalived on

5、修改主配置文件/etc/keepalived/keepalived.conf

vi /etc/keepalived/keepalived.conf

      global_defs {

    router_id master.benet.com                        -----指定本服務器的主機名

      }

    vrrp_instance VI_1 {                                              -----定義VRRP實例

    state MASTER                 ----- MASTER爲主路由器,SLAVE爲備用路由器

    interface eth0                                                  -----承載VIP地址的物理接口

    virtual_router_id 51                           -----熱備組ID號,每個組應保持一致

    priority 100                                                       -----優先級,越大優先級越高

    advert_int 1                                                      -----心跳頻率

    authentication {                                               -----認證信息

        auth_type PASS                                       -----認證類型爲密碼

        auth_pass 123456                                  ----密碼字符串

    }

    virtual_ipaddress {                                    -----指定漂移IP地址

        172.16.16.172

    }

   }

virtual_server 172.16.16.172 80 {

    delay_loop 6

    lb_algo rr

    lb_kind DR

    nat_mask 255.255.255.0

    persistence_timeout 50

    protocol TCP

    real_server  172.16.16.21 80 {

        weight 1

        TCP_CHECK {

            connect_port 80

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

    real_server  172.16.16.22 80 {

        weight 1

        TCP_CHECK {

            connect_port 80

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

}
service keepalived start

 

三、配置從調度器

從調度器折配置與主調度器基本相同,不同之處主要在於router_idstatepriority參數

vi /etc/keepalived/keepalived.conf

      global_defs {

     router_id master.benet.com

      }

    vrrp_instance VI_1 {

    state SLAVE

    priority 90

   }

service keepalived start

 

四、配置NFS服務器

1、爲eth0配置IP地址

vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

ONBOOT=yes

BOOTPROTO=static

IPADDR=192.168.7.250

NETMASK=255.255.255.0

rm -f /etc/udev/rules.d/70-persistent-net.rules

reboot

2、安裝ntf-utilsrpcbind軟件包

yum -y install nfs-utils rpcbind

3、設置共享目錄

mkdir -p /opt/wwwroot

vi /etc/exports

/opt/wwwroot    192.168.7.0/24(rw,sync,no_root_squash)

4、啓動服務並查看發佈的共享目錄

service rpcbind start

service nfs start

chkconfig rpcbind on

chkconfig nfs on

netstat -anpt | grep rpcbind             -----使用111端口

showmount -e 127.0.0.1

 

五、配置節點服務器

1、爲eth0eth1lo:0配置IP地址,並添加路由記錄

①配置IP地址

vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

ONBOOT=yes

BOOTPROTO=static

IPADDR=172.16.16.21

NETMASK=255.255.255.0

vi /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1

ONBOOT=yes

IPADDR=192.168.7.21

NETMASK=255.255.255.0

vi /etc/sysconfig/network-scripts/ifcfg-lo:0

DEVICE=lo:0

ONBOOT=yes

IPADDR=172.16.16.172          -----此地址僅用作響應數據包的源地址

NETMASK=255.255.255.255      -----子網掩碼必須全爲1

rm -f /etc/udev/rules.d/70-persistent-net.rules

reboot             -------重新啓動虛擬機,節點2的配置與之類似

②添加VIP本地訪問路由

vi /etc/rc.local

/sbin/route add -host 172.16.16.172 dev lo:0

route add -host 172.16.16.172 dev lo:0

2、調整/proc內核參數,關閉重定向響應

vi /etc/sysctl.conf

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

net.ipv4.conf.default.arp_ignore = 1

net.ipv4.conf.default.arp_announce = 2

net.ipv4.conf.lo.arp_ignore = 1

net.ipv4.conf.lo.arp_announce = 2

sysctl –p

3、安裝rpcbind軟件包以實現訪問NFS共享資源

yum -y install nfs-utils rpcbind

service rpcbind start

chkconfig rpcbind on

showmount -e 192.168.7.250

4、掛載NFS共享目錄

mkdir -p /var/www/html

mount 192.168.7.250:/opt/wwwroot /var/www/html

vi /etc/fstab

192.168.7.250:/opt/wwwroot /var/www/html   nfs     defaults,_netdev 0 0

5、安裝httpd軟件包並創建測試頁面

yum –y install httpd

echo welcome to web! > /var/www/html/index.html

service httpd start

chkconfig httpd on

 

六、測試LVS羣集

在外網客戶機中訪問http://172.16.16.172可以看到Web頁面內容

當主調度器失效時Web站點仍可以訪問(可能需要刷新或重新打開瀏覽器),實現高可用性;只要有兩臺或以上Web節點服務器可用,則可實現負載均衡

只要保持至少一個Web節點服務器可用,則整個站點依然可用

more /var/log/messages     ----查看日誌,跟蹤故障切換過程

ipvsadm -Ln                    -----查看節點狀態

ipvsadm -Lnc                         -----查看負載連接情況

 

補充:啓用郵件通知功能(主、從調度器)

當節點狀態異常時發送通知

notification_email:設置收信人地址

notification_email_from:設置發信人地址

smtp_server:指定SMTP發信服務器

smtp_connect_timeoutSMTP連接超時

1、安裝sendmail軟件包

yum -y install sendmail

service sendmail start

chkconfig sendmail on

2、爲Keepalived添加郵件通過設置

vi /etc/keepalived/keepalived.conf

global_defs {

   notification_email {

     [email protected]

   }

   notification_email_from ftp  [email protected]

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id    master.benet.com

}

3、停止某個節點的Web服務,過幾分鐘再恢復,查看通知郵件內容

講師介紹.jpg


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