1. 程式人生 > >keepalived的功能及DR模式搭建筆記

keepalived的功能及DR模式搭建筆記

一、HA叢集中的相關術語

 

1.節點node)

執行HA程序的一個獨立主機,稱為節點,節點是HA的核心組成部分,每個節點上執行著作業系統和高可用軟體服務,在高可用叢集中,節點有主次之分,分別稱之為主節點/備份節點,每個節點擁有唯一的主機名,並且擁有屬於自己的一組資源,例如,磁碟,檔案系統,網路地址和應用服務等,主節點上一般執行著一個或多個應用服務,而備節點一般處於監控狀態

2.資源resource)

資源是一個節點可以控制的實體,並且當節點發生故障時,這些資源能夠被其他節點接管,HA叢集軟體中,可以當做資源的實體有:

1)磁碟分割槽、檔案系統

2)IP地址VIP

3)應用程式服務

4)NFS檔案系統

3.事件event)

也就是叢集中可能發生的事情,例如節點系統故障,網路連通故障,網絡卡故障,應用程式故障等,這些事情都會發生節點資源發生轉移,HA的測試也是基於這些事情來進行的

4.動作action)

事件發生時HA的響應方式,動作是由shell指令碼控制的,例如當某個節點發生故障後,備份節點將通過事先設定好的執行指令碼進行服務的關閉或啟動,進而接管故障節點的資源

二、keepalived簡介

keepalived 是linux下一個輕量級的高可用解決方案,它與HACMP實現功能類似,都可以實現服務或者網路的高可用,但是又有差別:hacmp是一個專業的、功能完善的高可用軟體,它提供了HA軟體所需的基本功能,比如心跳檢測和資源接管,檢測叢集中的系統服務,在叢集節點間轉移共享ip地址所有者等,hacmp功能強大,但是部署和使用相對麻煩,同時也是商業化軟體,與hacmp相比,keepalived主要是通過虛擬路由冗餘來實現高可用功能,雖然他沒有hacmp功能強大,但是keepalived部署使用相對簡單,所有配置只需要一個配置檔案即可完成.-+

 

三、keepalived的用途

keepalived起初是為lvs設計的,專門用來監控集群系統中各個服務節點的狀態,它根據layer3,4 & 5交換機制檢測每個服務節點的狀態,如果某個服務節點出現異常,或工作出現故障,keepaived將檢測到,並將出現故障的服務節點從集群系統中剔除,而在故障節點恢復正常後,keepalived又可以自動將此服務節點重新加入到叢集中,這些工作全部自動完成,不需要人工干預,需要人工完成的只是修復故障節點。

keepalived後來又加入了VRRP 的功能,VRRP是Virtual Router Redundancy Protocol(虛擬路由器冗餘協議)的縮寫,它出現的目的是為了解決靜態路由出現的單點故障問題,通過VRRP可以實現網路不間斷的、穩定的執行,因此,keepalived一方面具有伺服器狀態監測和故障隔離功能,另一方面也具有HA Cluster功能,下面詳細介紹下VRRP協議的實現過程

四、VRRP協議與工作原理

在現實的網路環境中,主機之間的通訊都是通過配置靜態路由完成的,而主機之間的路由器一旦出現故障,通訊就會失敗,因此在這種通訊模式中,路由器就成了一個單點瓶頸,為了解決這個問題就引入了VRRP協議

VRRP協議是一種主備模式的協議,通過VRRP可以在網路發生故障時透明地進行裝置切換不影響主機間的資料通訊,這其中涉及兩個概念:物理路由器和虛擬路由器

VRRP可以將兩臺或者多臺物理路由器裝置虛擬成一個虛擬路由器,這個虛擬路由器通過虛擬IP(一個或多個)對外提供服務,二在虛擬路由器內部,是多個物理路由器協同工作,同一時間只有一臺物理路由器對外提供服務,這臺物理路由器被稱之為主路由器(處於master狀態角色)。它擁有對外提供的虛擬ip,提供各種網路功能,比如arp請求、icmp、資料轉發等,二其他物理路由器不擁有對外提供的虛擬ip,也不提供對外網路功能,僅僅接收master的vrrp狀態通告資訊,這些路由器被統稱為備份路由器(處於backup角色)。當主路由器失效時,處於backup角色的備份路由器將重新進行選舉,產生一個新的主路由器進入master角色繼續對外服務,整個切換過程對於使用者來說完全透明

在一個虛擬路由器中,只有處於master角色的路由器會一直髮送vrrp資料包,處於backup角色的路由器只接受master發過來的報文資訊,用來監控master執行狀態,因此,不會發生master搶佔的現象,除非它的優先順序更高,而當master不可用時,backup也就無法收到master發過來的報文資訊,於是就認定master出現故障,接著多臺backup就會進行選舉,優先順序最高的backup將成為新的master,這種選舉並進行角色的過程非常快,因此也就保證了服務的持續可用性

五、keepalived的體系結構

keepaived是一個高度模組化的軟體,結構簡單,但擴充套件性很強,下圖是官方給出的keepalived的體系結構

 

 

可以看出來,keepalived的體系結構從整體上分為兩層,分別是使用者空間層和核心空間層。下面介紹一個keepalived兩層結構的詳細組成及實現的功能。

核心空間層處於最底層,它包括ipvs和netlink兩個模組。ipvs模組是keepalived引入的一個第三方模組,通過ipvs可以實現基於ip的負載均衡叢集。ipvs預設包含在lvs叢集軟體中。

這裡有一個誤區,由於keepalived可以和ipvs一起很好的工作,所以很多初學者都認為keepalived是一個負載均衡的軟體,這種理解是錯誤的

核心模組:

IPVS:主要用於通過IPVS跟lvs進行整合,是lvs的核心模組,跟lvs一塊使用的

NETLINK:主要實現一些網路的功能

 

使用者模組:主要用於高可用

checker:檢查服務狀態

vrrp stack:用於DS高可用

 

 

六、keepalived安裝與配置

首先準備構建叢集的4臺裝置

       direct_server1:192.168.11.136

       direct_server2:192.168.11.141

       real_server1:192.168.11.138

       real_server2:192.168.11.140

DS1與DS2端:

# yum install keepalived

# yum -y install ipvsadm

# yum -y install httpd*

# ifconfig ens33:0 192.168.11.250 broadcast 192.168.11.250 netmask 255.255.255.255 up

# route add -host 192.168.11.250 dev ens33:0

# vim /dev/sysconfig/ipvsadm  隨便編輯一下

yum安裝keepalived預設配置檔案在/etc/keepalived/keepalived.conf

 

配置檔案主要分為三類分別是:

(1)全域性配置

(2)VRRP配置     (ds)

(3)LVS配置       (監控real_server)

 

! Configuration File for keepalived
                #全域性配置
global_defs {

notification_email {

                #可以輸入收件人地址

}                         #郵件伺服器

}     

VRRP配置

vrrp_instance VI_1 {

state MASTER (BACKUP)          #角色型別MASTER|(BACKUP)

interface ens33                                #網絡卡名稱

virtual_router_id 51                     #虛擬路由id(需要與BACKUP一致)

priority 100                                  #優先順序

advert_int 1                                 #ds之間每1秒檢查一次

#nopreempt                                 #非搶佔模式(需要將MASTER改成BACKUP      才可用)

 

authentication {

auth_type PASS                     #認證型別 (主備之間必須一樣)

auth_pass 1111                      #認證密碼(主備之間必須一樣)

}

virtual_ipaddress {

192.168.11.250                       #虛擬ip(vip)

}

}

#LVS配置

virtual_server 192.168.11.250 80 {

delay_loop 3                                #健康檢查時間間隔

lb_algo rr                                     #負載均衡排程演算法

lb_kind DR                                   #負載均衡轉發規則

protocol TCP                               #協議

real_server 192.168.11.138 80 {     #要監控的real_server的ip和埠號

weight 1                                      #權重(分配連線的權重)

TCP_CHECK {                           #基於tcp協議的檢查

connect_timeout 3                      #連線時間超時

retry 3                                              #重連次數

delay_before_retry 3                       #重連間隔時間

}

}

 

real_server 192.168.11.140 80 {

weight 1

TCP_CHECK {

connect_timeout 3

retry 3

delay_before_retry 3

}

}

}

#systemctl start ipvsadm.service

#systemctl start httpd.service

#systemctl start keepalivrd.service

 RS1與RS2端:

# yum -y install httpd*

# ifconfig lo:0 192.168.11.250 broadcast 192.168.11.250 netmask 255.255.255.255 up    

# route add -host 192.168.11.250 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/all/arp_ignore

# echo "2">/proc/sys/net/ipv4/conf/all/arp_announce

# vim /etc/www/html/index.html

              <h1>this is 138(或者140) host</h1>  (測試用)

測試:# curl 192.168.11.250

 

上述配置雖然可以預防RS的單點故障,但是DS的單點故障並沒有消除,所以需要給DS在加一個備份機器

上述配置中拷貝一份到備機上可以用scp keepalived.conf [email protected]:/etc/keepalived

需要改寫的地方:

state MASTER #角色型別MASTER|BACKUP

priority 55 #優先順序(這裡需要設定比master機器小的值)