負載均衡之keepalived

2022-05-25 18:00:20

DR實驗存在的隱患

  1. DR可能會掛,單點故障
  2. RS可能會掛

解決方案:

  • 解決單點故障

    • 主備:準備多個DR備用機,做好設定,主機掛掉備用機頂上
    • 主主
  • 解決RS會掛的問題

    給RS傳送請求,如果收到200 ok回覆則說明RS正常

keepalived

keepalived就是實現了上述解決方法的工具,檢測web伺服器的狀態,如果有一臺web伺服器宕機,或工作出現故障,Keepalived將檢測到,並將有故障的web伺服器從系統中剔除,當web伺服器工作正常後Keepalived自動將web伺服器加入到伺服器群中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修復故障的web伺服器。

主要用途:

  • 高可用:監控主機,主動替換備用機
  • RS的健康檢測

只需要給主機DR和備用機裝keepalived監控DR,並且向RS傳送請求檢測RS。

keepalived的使用:

  1. 安裝

    yum install keepalived ipvsadm -y
    
  2. 備份和修改keepalived組態檔

    DR組態檔:

    cp keepalive.conf keepalived.conf.bak
    cat /etc/keepalived.conf
    global_defs {
    
      notification_email {  #設定報警郵件地址,可多行每行一個。
      [email protected]
       }
    
      notification_email_from keepalived@localhost  #設定郵件的傳送地址
    
      smtp_server 127.0.0.1                         #設定SMTP server地址
    
      smtp_connect_timeout 30                       #設定SMTP 超時時間
    
      router_id LVS_DEVEL                           #執行keepalived機器的一個標識
    
    }
    
    vrrp_instance VI_1 {                      #定義一個vrrp範例,不同範例的範例編號不一樣。
    
       state MASTER        #定義在keepalived的角色MASTER表示為主伺服器,BACKUP為備伺服器。
    
       interface eth0      #指定HA檢測的網路介面
    
       virtual_router_id 50     #虛擬路由標示,同一個範例裡的路由標示相同,且唯一。MASTER和BACKUP的路由標識一樣,且唯一。
    
       priority 100        #定義此伺服器在此虛擬路由器中的優先順序,優先順序大許可權高
    
       advert_int 1        #檢測時間間隔
    
       authentication {    #設定驗證型別和密碼,主從的密碼必須相同,要不兩者不通訊。
    
           auth_type PASS
    
           auth_pass 1111
    
       }
    
       virtual_ipaddress {     #設定虛擬IP地址,可以設定多個虛擬IP地址。
    
           192.168.233.100/24 dev ens33 label  ens33:3
    
       }
    
    }
    //設定DR主機lvs,代替使用ipvsadm設定lvs
    virtual_server 192.168.233.100 80 {
        delay_loop 6  
        lb_algo rr
        lb_kind DR //模式,NAT,DR,TUN
        nat_mask 255.255.255.0  //子網掩碼
        persistence_timeout 0  //
        protocol TCP
    
        real_server 192.168.150.12 80 {//負載機設定
            weight 1
            HTTP_GET {//對後端機進行健康檢查的設定
                url {
                    path /
                    status_code 200
                }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }   
    	}
        //設定RS
        real_server 192.168.233.129 80 {
            weight 1
            HTTP_GET {
                url {
                    path /
                    status_code 200
                }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }
        }
    

    備用DR設定:

    global_defs {
    
      notification_email {
      [email protected]
       }
    
      notification_email_from keepalive@localhost
    
      smtp_server 127.0.0.1
    
      smtp_connect_timeout 30
    
      router_id LVS_DEVEL
    
    }
    
    vrrp_instance VI_1 {
    
       state BACKUP
    
       interface eth0
    
       virtual_router_id 51
    
       priority 50
    
       advert_int 1
    
       authentication {
    
           auth_type PASS
    
           auth_pass 1111
    
       }
    
       virtual_ipaddress {
    
           192.168.233.100
    
       }
    
    }
    //設定DR主機lvs,代替使用ipvsadm設定lvs
    virtual_server 192.168.233.100 80 {
        delay_loop 6  
        lb_algo rr
        lb_kind DR //模式,NAT,DR,TUN
        nat_mask 255.255.255.0  //子網掩碼
        persistence_timeout 0  //
        protocol TCP
    
        real_server 192.168.150.12 80 {//負載機設定
            weight 1
            HTTP_GET {//對後端機進行健康檢查的設定
                url {
                    path /
                    status_code 200
                }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }   
    	}
        //設定RS
        real_server 192.168.233.129 80 {
            weight 1
            HTTP_GET {
                url {
                    path /
                    status_code 200
                }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }
        }
    
  3. 啟動keepalived服務

    service keepalived start
    

最後,如果keepalived程序掛掉呢?

使用zookper叢集解決這個問題。