keepalived高可用

一、keepalived介紹

        爲了保證業務不間斷的對外提供服務,從而需要有單獨的硬件(F5)或者軟件來監控服務是否能正常的提供服務,keepalived就是一種能夠監控後端服務是否能正常的提供服務的一種軟件,keepalived軟件是根據一種路由協議實現的,協議名叫做VRRP。

VRRP工作過程

        (1) 虛擬路由器中的路由器根據優先級選舉出Master。Master 路由器通過發送免費ARP 報文,將自己的虛擬MAC 地址通知給與它連接的設備或者主機,從而承擔報文轉發任務;

        (2) Master 路由器週期性發送VRRP 報文,以公佈其配置信息(優先級等)和工作狀況;

        (3) 如果Master 路由器出現故障,虛擬路由器中的Backup 路由器將根據優先級重新選舉新的Master;

        (4) 虛擬路由器狀態切換時,Master 路由器由一臺設備切換爲另外一臺設備,新的Master 路由器只是簡單地發送一個攜帶虛擬路由器的MAC 地址和虛擬IP地址信息的免費ARP 報文,這樣就可以更新與它連接的主機或設備中的ARP 相關信息。網絡中的主機感知不到Master 路由器已經切換爲另外一臺設備。

        (5) Backup 路由器的優先級高於Master 路由器時,由Backup 路由器的工作方式(搶佔方式和非搶佔方式)決定是否重新選舉Master。在VRRP中有一個免費的ARP是來解決路由器或者路由器中的緩存mac地址的問題免費ARP:通知同一個網段的主機更新地址表,緩存,mac地址

keepalived兩種工作模式

        1.搶佔模式

                如果backup工作在搶佔模式下,當收到vrrp報文後,會將自己的優先級與通告的優先級進行比對,若比通告的優先級高,則會主動搶佔爲master,否則繼續保持backup

        2.非搶佔模式

                如果backup工作在非搶佔模式下,只要master不發生故障,就算backup比master優先級高也不會搶佔爲master

keepalived核心功能

        1.VRRP:地址轉移

        2.檢查IPVS健康狀態,若後端服務出現故障,能夠自動的踢出和添加

        3.添加IPVS規則,直接在keepalived配置文件中就可以添加IPVS功能

二、使用keepalived實現VRRP的雙主模型配置(單主則直接添加一個即可)

        該配置只是在兩臺不同的主機上配置keepalived,沒有配置任何的服務,只是起到了VRRP能夠在任何一臺主機故障,虛擬IP地址還是可用

主機1

[root@centos7 ~]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived
global_defs {
   notification_email {
         root@loaclhost  #這裏填寫可以真正發送郵件的郵件服務器     
   }
   notification_email_from keepalived@localhost  #發送人
   smtp_server 127.0.0.1   #主機地址
   smtp_connect_timeout 10  #超時時間
   router_id test1    #該ID不能與其他服務器一致
   vrrp_mcast_group4 224.255.255.255   #廣播地址,可以使用任意廣播地址
}
vrrp_instance VI_1 {   #指定VRRP
state MASTER    #工作模式
interface ens38   #物理網卡
virtual_router_id 11   #相同的VRRP應該一致,不同的VRRP不能一致
priority 100   #優先級,1-255
advert_int 1   #每隔多久發送一個ARP
authentication {
auth_type PASS   #認證機制,
auth_pass 12345678  #密碼,最長8位字符
}
virtual_ipaddress {
192.168.1.200/24 dev ens38     #虛擬IP地址,網卡等信息
}
track_interface {
ens38    #監控的網卡,可以監控多個
}
}
vrrp_instance VI_2 {
state BACKUP
interface ens38
virtual_router_id 22
priority 98
advert_int 1
authentication {
auth_type PASS
auth_pass 87654321
}
virtual_ipaddress {
192.168.1.222/24 dev ens38
}
track_interface {
ens38
}
}

主機2

[root@centos7 ~]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived
global_defs {
   notification_email {
root@loaclhost
   }
   notification_email_from keepalived@localhost 
   smtp_server 127.0.0.1
   smtp_connect_timeout 10
   router_id test2
   vrrp_mcast_group4 224.255.255.255
}
vrrp_instance VI_1 {
state BACKUP
interface ens38
virtual_router_id 11
priority 98
advert_int 1
authentication {
auth_type PASS
auth_pass 12345678
}
virtual_ipaddress {
192.168.1.200/24 dev ens38
}
track_interface {
ens38
}
}
vrrp_instance VI_2 {
        state MASTER
        interface ens38
        virtual_router_id 22
        priority 100
        advert_int 1
        authentication {
                auth_type PASS
                auth_pass 87654321
        }       
        virtual_ipaddress {
                192.168.1.222/24 dev ens38
        }       
        track_interface {
                ens38
        }       
        
}

三、使用keepalived高可用IPVS

        準備環境,若需要測試則需要四臺主機,兩臺做後端的提供web服務的機器,兩臺做高可用IPVS,這裏只配置前端高可用的配置

[root@centos7 ~]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

global_defs {
   notification_email {
	root@loaclhost
   }
   notification_email_from keepalived@localhost 
   smtp_server 127.0.0.1
   smtp_connect_timeout 10
   router_id test1
   vrrp_mcast_group4 224.255.255.255
}
vrrp_instance VI_1 {
	state MASTER
	interface ens38
	virtual_router_id 11
	priority 100
	advert_int 1
	authentication {
		auth_type PASS
		auth_pass 12345678
	}
	virtual_ipaddress {
		192.168.1.200/24 dev ens38
	}
	track_interface {
		ens38
	}
}
virtual_server 192.168.1.200 80 {     #IPVS的設置,需要指定使用哪一個虛擬主機
        delay_loop 1     #輪詢間隔
        lb_algo rr       #輪詢算法支持rr|wrr|lc|wlc|lblc|sh|dh
        lb_kind DR       #模型 DR|NAT|TUN
        persistence_timeout 10   超時時間
        protocol TCP   #使用協議,只支持TCP
        sorry_server 127.0.0.1 80   #當所有服務都不可用時,指定錯誤頁面,一般指向本機
        real_server 192.168.1.153 80 {   #都斷的服務器
                weight 1   #權重
                HTTP_GET {   #方法,也可以使用SSL_GET定義https協議
                        url {
                                path /   #檢查的目錄
                                status_code 200   #返回的狀態碼
                        }
                        nb_get_retry 3  #重試次數
                        delay_before_retry 10   #重試之前的延遲時長
                        connect_timeout 10   #請求超時時長
                }
        }
}

備用主機

[root@centos7 ~]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

global_defs {
   notification_email {
	root@loaclhost
   }
   notification_email_from keepalived@localhost 
   smtp_server 127.0.0.1
   smtp_connect_timeout 10
   router_id test2
   vrrp_mcast_group4 224.255.255.255
}
vrrp_instance VI_1 {
	state BACKUP
	interface ens38
	virtual_router_id 11
	priority 98
	advert_int 1
	authentication {
		auth_type PASS
		auth_pass 12345678
	}
	virtual_ipaddress {
		192.168.1.200/24 dev ens38
	}
	track_interface {
		ens38
	}

}
virtual_server 192.168.1.200 80 {
        delay_loop 1
        lb_algo rr
        lb_kind DR
        persistence_timeout 10
        protocol TCP
        sorry_server 127.0.0.1 80
        real_server 192.168.1.153 80 {
                weight 1
                HTTP_GET {
                        url {
                                path /
                                status_code 200
                        }
                        nb_get_retry 3
                        delay_before_retry 10
                        connect_timeout 10
                }
        }
}

        在該模型下,也需要和IPVS配置NAT模型時更改的內核參數,和添加指向keepalived服務器的路由,參考更改配置如下,在多臺後端服務器上都需要修改,若需要永久生效,則需要將配置更改到/etc/sysctl.conf文件中

                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
[root@centos7 ~]#ifconfig lo:0 192.168.1.200 netmask 255.255.255.255 broadcast 192.168.1.200 up
[root@centos7 ~]#route add -host 192.168.1.200 dev lo:0

四、使用keepalived高可用nginx,因爲keepalived內置並不能直接高可用nginx,所以需要依靠腳本文件來實現,這裏只是簡單的實現高可用,基本拓撲圖如下圖,但是DNS一般就是指的添加兩條A記錄,並不是自己搭建DNS服務器

keepalived+nginx拓撲圖.jpg

相關配置文件

調用腳本

1.定義腳本
vrrp_script  腳本名 {
	script ""
	interval INT   #檢測間隔
	weight  -INT|+INT   #表示滿足條件後增加權重或減少權重,從而達到動態的切換
}
2.調用腳本
track_script {
	腳本1
	腳本2
}

兩臺主機的相關配置

keepalivedA

[root@centos7 ~]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

global_defs {
   notification_email {
	root@loaclhost
   }
   notification_email_from keepalived@localhost 
   smtp_server 127.0.0.1
   smtp_connect_timeout 10
   router_id test1
   vrrp_mcast_group4 224.255.255.255

}
vrrp_script test {
	script "killall -0 nginx"
	interval 1
	weight -5
	fall 2
	rise 1
}
vrrp_instance VI_1 {
	state MASTER
	interface ens38
	virtual_router_id 11
	priority 100
	advert_int 1
	authentication {
		auth_type PASS
		auth_pass 12345678
	}
	virtual_ipaddress {
		192.168.1.200/24 dev ens38
	}
	track_interface {
		ens38
	}
	track_script {
		test
	}

}

keepalivedB

[root@centos7 ~]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

global_defs {
   notification_email {
	root@loaclhost
   }
   notification_email_from keepalived@localhost 
   smtp_server 127.0.0.1
   smtp_connect_timeout 10
   router_id test2
   vrrp_mcast_group4 224.255.255.255
}
vrrp_script test {
        script "killall -0 nginx"
        interval 1
        weight -5
	fall 2
	rise 1
}
vrrp_instance VI_1 {
	state BACKUP
	interface ens38
	virtual_router_id 11
	priority 98
	advert_int 1
	authentication {
		auth_type PASS
		auth_pass 12345678
	}
	virtual_ipaddress {
		192.168.1.200/24 dev ens38
	}
	track_interface {
		ens38
	}
       track_script {
                test
        }


}
vrrp_instance VI_2 {
        state MASTER
        interface ens38
        virtual_router_id 22
        priority 100
        advert_int 1
        authentication {
                auth_type PASS
                auth_pass 87654321
        }       
        virtual_ipaddress {
                192.168.1.222/24 dev ens38
        }       
        track_interface {
                ens38
        }       
        track_script {
                test
        }       
}


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