LVS+KeepAlived+Nginx高可用實現方案

LVS

KeepAlived

keepalived是一個類似於layer3, 4 & 5交換機制的軟件,也就是我們平時說的第3層、第4層和第5層交換。Keepalived是自動完成,不需人工干涉。Keepalived的作用是檢測服務器的狀態,如果有一臺web服務器宕機,或工作出現故障,Keepalived將檢測到,並將有故障的服務器從系統中剔除,同時使用其他服務器代替該服務器的工作,當服務器工作正常後Keepalived自動將服務器加入到服務器羣中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修復故障的服務器。

keepalived主要用作RealServer的健康狀態檢查以及LoadBalance主機和BackUP主機之間failover的實現。

高可用web架構: LVS+keepalived+nginx+apache+php+eaccelerator(+nfs可選 可不選)

Layer3,4,5工作在IP/TCP協議棧的IP層,TCP層,及應用層,原理分別如下:

  • Layer3:Keepalived使用Layer3的方式工作式時,Keepalived會定期向服務器羣中的服務器發送一個ICMP的數據包(既我們平時用的Ping程序),如果發現某臺服務的IP地址沒有激活,Keepalived便報告這臺服務器失效,並將它從服務器羣中剔除,這種情況的典型例子是某臺服務器被非法關機。Layer3的方式是以服務器的IP地址是否有效作爲服務器工作正常與否的標準。

  • Layer4:如果您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的狀態來決定服務器工作正常與否。如web server的服務端口一般是80,如果Keepalived檢測到80端口沒有啓動,則Keepalived將把這臺服務器從服務器羣中剔除。

  • Layer5:Layer5對指定的URL執行HTTP GET。然後使用MD5算法對HTTP GET結果進行求和。如果這個總數與預期值不符,那麼測試是錯誤的,服務器將從服務器池中移除。該模塊對同一服務實施多URL獲取檢查。如果您使用承載多個應用程序服務器的服務器,則此功能很有用。此功能使您能夠檢查應用程序服務器是否正常工作。MD5摘要是使用genhash實用程序(包含在keepalived軟件包中)生成的。

  • 下面開始 搭建 LVS+KeepAlived+Nginx 
  • 試驗環境:
  • keepalived 服務器 2臺 (master + backup)
  • nginx WEB 服務器 2臺
  •  
  • VIP 192.168.1.168
  • keepalived master    192.168.1.2  CentOS 7.5   
  • keepalived backup   192.168.1.3   CentOS 7.5
  • nginx 1                     192.168.1.10  CentOS 6.5
  • nginx 2                     192.168.1.11  CentOS 7.5

  • 首先在 192.168.1.2  端安裝、配置 keepalived  Master

  • 前提要配置好 LVS 詳細設置請參閱拙作: LVS 負載均衡 https://blog.csdn.net/gaofei0428/article/details/104438533

  • sudo yum -y install keepalived ipvsadm libnl libnl-devel openssl-devel libnfnetlink-devel net-tools
  • 備份 keepalived 主配置文件
  • mv /etc/keepalived/keepalived.conf /bak/keepalived.conf.bak
    vim /etc/keepalived/keepalived.conf
  • 編輯 /etc/keepalived/keepalived.conf 添加以下內容
  • global_defs {                 #全局配置
    #   notification_email {  #指定keepalived在發生切換時是否發送email警告
    #   }
    #   smtp_connect_timeout 30
            router_id LVS_DEVEL   #此處注意router_id爲負載均衡標識,在局域網內應該是唯一的
    }
    vrrp_instance VI_1 {    #虛擬路由的標識符
            state MASTER    #指定狀態,有MASTER和BACKUP兩種要大寫,MASTER爲工作狀態,BACKUP是備用狀態
            interface eth0       #指定 VIP 虛擬IP 對應的 INTERFACE 接口

               lvs_sync_daemon_inteface eth0 #心跳線接口,DR模式用的和上面的接口一樣,也可以用機器上的其他網卡,用來防止腦裂

        virtual_router_id 51    #虛擬路由的ID號,是虛擬路由MAC的最後一位地址
        priority 100          #此節點的優先級,主節點的優先級需要比其他節點高  
        advert_int 1         #通告的間隔時間
        authentication {    #認證配置    
                auth_type PASS  #認證方式
                auth_pass 1111    #認證密碼
        }
        virtual_ipaddress {   #虛擬ip地址,可以有多個地址,每個地址佔一行,不需要子網掩碼,必須與 lvs 客戶端設定的 vip 一致
                192.168.1.168
        }
}
virtual_server 192.168.1.168 80 { #集羣所使用的VIP和端口
        delay_loop 6         #健康檢查間隔,單位爲秒  
        lb_algo wrr            #lvs調度算法rr|wrr|lc|wlc|lblc|sh|dh
        lb_kind DR            #負載均衡轉發規則。一般包括DR,NAT,TUN 3種
        nat_mask 255.255.255.255   #VIP掩碼
        persistence_timeout 50      #會話保持時間
        protocol TCP             #轉發協議             
        real_server 192.168.1.10 80 { #真實服務器,包括IP和端口號
                weight 1   #默認爲1,0爲失效

               inhibit_on_failure #在服務器健康檢查失效時,將其設爲0,而不是直接從ipvs中刪除

                TCP_CHECK {      #通過tcpcheck判斷RealServer的健康狀態              
                        connect_timeout 10    #連接超時時間
                        nb_get_retry 3    #重連次數
                        delay_before_retry 3   #重連間隔時間
                        connect_port 80   #健康檢查端口的端口
                }
        }
        real_server 192.168.1.11 80 {
                weight 1

                inhibit_on_failure
                TCP_CHECK {
                        connect_timeout 10
                        nb_get_retry 3
                        delay_before_retry 3
                        connect_port 80
                }
        }
}

  • 確認無誤保存退出,暫時不啓動 keepalived

  • 接下來在 192.168.1.3 上安裝、配置 keeepalived (前提要配置好 LVS)
  • sudo yum -y install keepalived ipvsadm libnl libnl-devel openssl-devel libnfnetlink-devel net-tools
  • 備份 keepalived 主配置文件
  • mv /etc/keepalived/keepalived.conf /bak/keepalived.conf.bak
    vim /etc/keepalived/keepalived.conf
  • 編輯 /etc/keepalived/keepalived.conf 添加以下內容
  • global_defs {                       
    #   notification_email {             
    #   }
    #   smtp_connect_timeout 30
            router_id LVS_DEVEL             
    }
    vrrp_instance VI_1 {            
            state BACKUP    #BACKUP是備用狀態
            interface eth0
            lvs_sync_daemon_inteface eth0
            virtual_router_id 51        
            priority 99
            nopreempt    #設置爲不搶佔 注:這個配置只能設置在backup主機上,而且這個主機優先級要比另外一臺高
            advert_int 1           
            authentication {        
                    auth_type PASS
                    auth_pass 1111
            }
            virtual_ipaddress {         
                    192.168.1.168
            }
    }
    virtual_server 192.168.1.168 80 {
            delay_loop 6           
            lb_algo wrr            
            lb_kind DR
            nat_mask 255.255.255.255   
            persistence_timeout 50    
            protocol TCP                          
            real_server 192.168.1.10 80 {
                    weight 1
            inhibit_on_failure
                    TCP_CHECK {                     
                            connect_timeout 10   
                            nb_get_retry 3
                            delay_before_retry 3
                            connect_port 80
                    }
            }
            real_server 192.168.1.11 80 {
                    weight 1
                   inhibit_on_failure
            TCP_CHECK {
                            connect_timeout 10
                            nb_get_retry 3
                            delay_before_retry 3
                            connect_port 80
                    }
            }
    }
  • 確認無誤保存退出,分別在 Master 和 Backup 端啓動 keepalived 和 lvs

  • 這裏爲了測試將 persistence_timeout 50 鏈接時間改爲 0
  • 在另外一臺虛擬機上測試

  • 模擬故障將 Master 停掉
  • 192.168.1.2 端 systemctl stop keepalived

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