keepalived+LVS

本節我們來講一講keepalived,它是基於虛擬路由冗餘協議vrrp (Virtual Router Redundancy Protocol)從而實現模擬路由器的高可用,通常Keepalived用於實現前端高可用,它是輕量級的高可用,且不需要共享存儲,常用於兩個節點的高可用,一個是主節點master,一個是從節點backup,但是對外邊來說只有一個IP地址,通常這個IP地址一開始都是在master,當master宕機時,backup會將該IP搶走並提供服務。好了下面我們就來實現下這個過程。

實驗拓撲圖:

p_w_picpath

本實驗是實現keepalived+lvs的DR模型,這裏介紹下DR模型的工作機制,當外部的請求送給director(即DR)時,DR將請求轉發給內部的real server(即RS)進行響應,而響應後的結果並沒有通過DR返回給用戶,而是RS直接響應給互聯網上的客戶端,但是由於RS在內網當中,因此需要額外加個路由器給RS,並且RS必須將網關指向該路由器。

爲了實驗簡便,本實驗涉及的服務全部爲yum安裝,這裏就不給出了。本實驗是在已安裝好的前提下配置的。

RS配置

RS1:

echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore 
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce 
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
ifconfig eth0 192.168.1.21/24 up
ifconfig lo:0 172.16.6.31 netmask 255.255.255.255 broadcast 172.16.6.31 
route add -host 172.16.6.31  dev lo:0  配置爲lo:0端口
ifconfig lo:1 172.16.6.32  netmask 255.255.255.255 broadcast 172.16.6.32
route add -host 172.16.6.32  dev lo:1

 

RS2:

echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore 
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce 
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
ifconfig eth0 192.168.1.22/24 up              與RS1相比只有IP不同
ifconfig lo:0 172.16.6.31 netmask 255.255.255.255 broadcast 172.16.6.31 
route add -host 172.16.6.31  dev lo:0  
ifconfig lo:1 172.16.6.32  netmask 255.255.255.255 broadcast 172.16.6.32 
route add -host 172.16.6.32  dev lo:1

 

配置keepalived

vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs

{

notification_email

{

root@localhost

}

notification_email_from [email protected]

smtp_connect_timeout 3

smtp_server 127.0.0.1

router_id LVS_DEVEL

}

vrrp_script chk_schedown

{

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

#創建down文件權重減2

interval 2

weight -2

}

vrrp_instance VI_1              在第一個節點扮演的是主節點的角色

{

interface eth0         

state MASTER                    #此節點爲主節點         

priority 100                    優先級

virtual_router_id 1          

garp_master_delay 1

 

 

authentication                  認證部分

{        

auth_type PASS       

auth_pass password              

}

track_interface

{

eth0                         

}

virtual_ipaddress

{

172.16.6.31/16               設定ipvs 規則的虛擬ip                     

   }

track_script

{

chk_schedown

}

}

virtual_server 172.16.6.31 80  #配置一個VIP 工作在TCP的80端口上

{                

 

delay_loop 6

lb_algo rr     #負載均衡的調度算法

lb_kind DR     #工作在DR模型上

#persistence_timeout 50            #是否啓用IPVS持久連接,這項要註銷.連接50S纔會切換

protocol TCP                     #採用的是TCP協議

# sorry_server 192.168.1.2 1358 #錯誤提示頁面.要在這臺服務器上開啓http服務

 

real_server 192.168.1.21 80          #後面RIP地址

{

weight 1 #權重

HTTP_GET

{

url

{

path /

status_code 200 #取得主頁面的狀態,狀態碼爲200就意味着請求成功;也可寫入md5碼,但要制定靜態碼

}

connect_timeout 3 #每次測試3秒

nb_get_retry 3 #測試次數

delay_before_retry 3 #測試失敗在測試3次

}

}

real_server 192.168.1.22 80

{

weight 1

HTTP_GET

{

url

{

path /

status_code 200

}

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}

}

vrrp_instance VI_2               在第二個模型中扮演的備節點的角色

{

interface eth0

state BACKUP           #此節點爲備節點

priority 99            

virtual_router_id 2

garp_master_delay 1

authentication {     

auth_type PASS

auth_pass 12345678

}

track_interface {

eth0

}

virtual_ipaddress {

172.16.6.32/16                 設定ipvs 規則的虛擬

}

track_script {

chk_schedown

}

}

virtual_server 172.16.6.32 80  #配置一個VIP 工作在TCP的80端口上

{                

 

delay_loop 6

#lb_algo rr     

lb_kind DR      

persistence_timeout 50      用於測試這邊啓用持久連接功能

protocol TCP 

# sorry_server 192.168.1.2 1358    

real_server 192.168.1.21 80     

{

weight 1

HTTP_GET

{

url

{        

path /   

status_code 200

}

connect_timeout 3     

nb_get_retry 3     

delay_before_retry 3                        

}

}

real_server 192.168.1.22 80

{

weight 1

HTTP_GET

{

url

{

path /

status_code 200    

}

connect_timeout 3nb_get_retry 3delay_before_retry 3   

}

}

}

 

 

 

 

配置第二個節點keepalived

vi /etc/keepalived/keepalived.conf 

! Configuration File for keepalived 

global_defs

{

notification_email

{

root@localhost

}

notification_email_from [email protected]

smtp_connect_timeout 3

smtp_server 127.0.0.1

router_id LVS_DEVEL

}

vrrp_script chk_schedown

{

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

#創建down文件權重減2

interval 2

weight -2

}

vrrp_instance VI_1              在第一個節點扮演的是從節點的角色

{

interface eth0         

state BACKUP                    #此節點爲從節點         

priority 99                      優先級 

virtual_router_id 1          

garp_master_delay 1

 

 

authentication                  認證部分

{        

auth_type PASS       

auth_pass password              

}

track_interface

{

eth0                         

}

virtual_ipaddress

{

172.16.6.31/16                設定ipvs 規則的虛擬ip                     

   }

track_script

{

chk_schedown

}

}

virtual_server 172.16.6.31 80  #配置一個VIP 工作在TCP的80端口上

{                

 

delay_loop 6

lb_algo rr     #負載均衡的調度算法

lb_kind DR     #工作在DR模型上

#persistence_timeout 50            #是否啓用IPVS持久連接,這項要註銷.連接50S纔會切換

protocol TCP                     #採用的是TCP協議

# sorry_server 192.168.1.2 1358 #錯誤提示頁面.要在這臺服務器上開啓http服務

 

real_server 192.168.1.21 80          #後面RIP地址

{

weight 1 #權重

HTTP_GET

{

url

{

path /

status_code 200 #取得主頁面的狀態,狀態碼爲200就意味着請求成功;也可寫入md5碼,但要制定靜態碼

}

connect_timeout 3 #每次測試3秒

nb_get_retry 3 #測試次數

delay_before_retry 3 #測試失敗在測試3次

}

}

real_server 192.168.1.22 80

{

weight 1

HTTP_GET

{

url

{

path /

status_code 200

}

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}

}

vrrp_instance VI_2               在第二個模型中扮演的主節點的角色

{

interface eth0

state MASTER           #此節點爲主節點

priority 100             注意修改節點狀態的時候優先級也要改 

virtual_router_id 2

garp_master_delay 1

authentication {     

auth_type PASS

auth_pass 12345678

}

track_interface {

eth0

}

virtual_ipaddress {

172.16.6.32/16                 設定ipvs 規則的虛擬

}

track_script {

chk_schedown

}

}

virtual_server 172.16.6.32 80  #配置一個VIP 工作在TCP的80端口上

{                

 

delay_loop 6

#lb_algo rr     

lb_kind DR      

persistence_timeout 50      用於測試這邊啓用持久連接功能

protocol TCP 

# sorry_server 192.168.1.2 1358    

real_server 192.168.1.21 80     

{

weight 1

HTTP_GET

{

url

{        

path /   

status_code 200

}

connect_timeout 3     

nb_get_retry 3     

delay_before_retry 3                        

}

}

real_server 192.168.1.22 80

{

weight 1

HTTP_GET

{

url

{

path /

status_code 200    

}

connect_timeout 3nb_get_retry 3delay_before_retry 3   

}

}

}

 

OK,全部配置完成之後就可以了,本節就到這裏,謝謝!

 

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