CentOS6.5 keepalived详解及实现Nginx服务的高可用性
keepalived基礎概念
? ?Keepalived是一個基于VRRP協議來實現的WEB服務高可用方案,可以利用其來避免單點故障。一個WEB服務至少會有2臺服務器運行Keepalived,一臺為主服務器(MASTER),一臺為備份服務器(BACKUP),但是對外表現為一個虛擬IP,主服務器會發送特定的消息給備份服務器,當備份服務器收不到這個消息的時候,即主服務器宕機的時候,備份服務器就會接管虛擬IP,繼續提供服務,從而保證了高可用性。
? ?keepalived最初的誕生就是為ipvs提供高可用性的,它可以自己調用ipvs來生成規則,并且可以自動實現把用戶設定好的ip地址轉移動別的節點上去的,還可以實現后端服務器的健康狀態檢測,說白了就是對vrrp的實現而已,那vrrp是什么呢:它叫虛擬冗余路由協議;vrrp可以把兩個網關虛擬成一個網關來使用,當一個網關不可以用了,另一個會取而代之,keepalived其實就是linux操作系統上實現vrrp的,keepalived就是這樣來實現vip地址轉移的,也是實現的地址的高可用性;
? ?在VRRP協議中,有兩組重要的概念:VRRP路由器和虛擬路由器,主控路由器和備份路由器。 VRRP路由器是指運行VRRP的路由器,是物理實體,虛擬路由器是指VRRP協議創建的,是邏輯概念。一組VRRP路由器協同工作,共同構成一臺虛擬路由器。該虛擬路由器對外表現為一個具有唯一固定IP地址和MAC地址的邏輯路由器。處于同一個VRRP組中的路由器具有兩種互斥的角色:主控路由器和備份路由器,一個VRRP組中有且只有一臺處于主控角色的路由器,可以有一個或者多個處于備份角色的路由器。VRRP協議使用選擇策略從路由器組中選出一臺作為主控,負責ARP相應和轉發IP數據包,組中的其它路由器作為備份的角色處于待命狀態。當由于某種原因主控路由器發生故障時,備份路由器能在幾秒鐘的時延后升級為主路由器。由于此切換非常迅速而且不用改變IP地址和MAC地址,故對終端使用者系統是透明的。
keepalived的核心組成:
? ?1、vrrp(Virtual Redundancy Router Protocol)的實現,虛擬冗余路由協議,它可以把兩個或多個網關虛擬成一個網關來使用,就是在兩個或多個路由之前用一種協議,讓兩個或多個路由通過選舉不決定哪個是活動的路由,當活動的不再提供服務了,另一個將取而代之,
? ?2、virtual server虛擬服務器
? ?3、vrrp_script,
keepalived配置文件分為三段:
? ?第一段:Global configuration全局配置段;
? ? ? ?Global definitions ? ?全局定義;
? ? ? ?Static route ? ?靜態路由;
? ?第二段:VRRP configuration配置段;
? ? ? ?VRRP synchronization groups同步組,假如在一個節點上配置兩個IP要把VIP同時轉移出去,也就是說這兩個VIP要同步工作,定義成一個組,而后當也一個資源來轉移;
? ? ? ?VRRP instances實例,定義虛擬路由器的;要實現虛擬路由轉移時要轉移IP地址;
? ?第三段:LVS configuration配置段;
? ? ? ?virtual server groups,虛擬路由服務器組,把多個路由定義在一起同時使用;
? ? ? ?virtual servers虛擬服務器,一般都是單獨定義的;
keepalived的實現過程:
第一步:安裝配置keepalived程序,有多少個節點就安裝多少個,都得安裝上;
第二步:編寫通告腳本,當某一節點發生VIP地址轉移時就會發郵件通知管理員,在/etc/keepalived/目錄下創建一個腳本文件,然后再在腳本文件中調用這個腳本就可以了,上面配置文件中已經有調用腳本內容了:
? ?# vim /etc/keepalived/notify.sh
第三步:配置LVS的集群服務,把下面代碼加入到/etc/keepalived/keepalived.conf配置文件中即可,默認的配置文件中也有示例:
virtual_server 172.16.27.100 80 { # 定義一個虛擬服務 VIP PORTdelay_loop 6 # 大概延遲幾個周期再去做服務檢測的lb_algo rr # 定義調度方法lb_kind DR # LVS的模型,NET也可以nat_mask 255.255.0.0 # 掩碼persistence_timeout 0 # 持久時間protocol TCP # 協議,默認也是TCPreal_server 172.16.27.1 80 { # 定義真正的real_server ip portweight 1 # 定義權重HTTP_GET { # 請求方法url { # 聲明檢測哪個URLpath /status_code 200}connect_timeout 3 # 連接超時時間nb_get_retry 3 # 至少嘗試幾次delay_before_retry 3# 在每次嘗試時要等上幾秒鐘}}real_server 172.16.27.2 80 { # 定義真正的real_server ip portweight 1 # 定義權重HTTP_GET { # 請求方法url { # 聲明檢測哪個URLpath /status_code 200}connect_timeout 3 # 連接超時時間nb_get_retry 3 # 至少嘗試幾次delay_before_retry 3# 在每次嘗試時要等上幾秒鐘}} }即使沒安裝有ipvsadm,只要配置有keepalived的lvs,啟動服務后就會自動生成LVS規則,但是如果沒安裝有ipvsadm就查看不了規則了,裝上來查看一下吧。
第四步:兩個節點都配置有MASTER/BACKUP,定義兩個實例,一個定義為MASTER,另一個定義為BACKUP就可以了,分別配置不同的VIP,node1上配置了MASTER的VIP為172.16.27.100,BACKUP的VIP為172.16.27.200;node2為上配置了MASTER的VIP為172.16.27.200,BACKUP的VIP為172.16.27.100。
# 這段代碼在node1的節點上加,同樣加為vrrp實例就可以了 vrrp_instance VI_2 {state BACKUPinterface eth0virtual_router_id 33priority 99advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {172.16.27.200}track_script {chk_mantaince_down # chk_nginx}notify_master "/etc/keepalived/notify.sh master"notify_backup "/etc/keepalived/notify.sh backup"notify_fault "/etc/keepalived/notify.sh fault" } # 下面這段代碼加到node2節點的配置文件上就可以了,就是需要改一個master和權重 vrrp_instance VI_2 {state MASTERinterface eth0virtual_router_id 33priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {172.16.27.200}track_script {chk_mantaince_down # chk_nginx}notify_master "/etc/keepalived/notify.sh master"notify_backup "/etc/keepalived/notify.sh backup"notify_fault "/etc/keepalived/notify.sh fault" }結束:
? ?經過不懈的努力,終于把keepalived的vrrp的大概實現出來了,不管是LVS還是高可用VIP地址的自動轉移,還是服務的高用,都需要認真的配置好,更有需要寫好很多的腳本,使服務更回高效,更高可用,在此,如果大神發現在什么不妥還望多多指點,不勝感激。
轉載于:https://blog.51cto.com/tanxw/1405461
總結
以上是生活随笔為你收集整理的CentOS6.5 keepalived详解及实现Nginx服务的高可用性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hadoop 2.2.0安装和配置lzo
- 下一篇: C++ 中判断非空的错误指针