keepalive+lvs

keepalived與ipvs

1)keepalived組件中有ipvs wrapper組件,可以用來生成IPVS規則

2)即ipvs wrapper可以通過讀取keepalived的配置文件,生成ipvs規則。

3)==> keepalived+lvs是絕配,keepalived解決了lvs的單點故障和對real server的狀態檢測。

虛擬服務器配置參數

①virtual server (虛擬服務)的定義:

  • virtual_server IP port #定義虛擬主機IP地址及其端口

  • virtual_server fwmark int #ipvs的防火牆打標,實現基於防火牆的負載均衡集羣

  • virtual_server group string #將多個虛擬服務器定義成組,將組定義成虛擬服務

virtual_server IP port 
{
...
    real_server {
    ...
    }
......
}

②real_server參數配置

  • delay_loop <INT>:檢查後端服務器的時間間隔

  • lb_algo rr|wrr|lc|wlc|lblc|sh|dh:定義調度方法

  • lb_kind NAT|DR|TUN:集羣的類型
    DR模型需要保證real server和keepalived在同一網段

  • persistence_timeout <INT>:持久連接時長

  • protocol TCP|UDP|SCTP:指定服務協議

  • sorry_server <IPADDR> <PORT>:所有RS故障時,備用服務器地址

  • real_server <IPADDR> <PORT>
    {
    weight <INT> RS權重
    notify_up <STRING>|<QUOTED-STRING> RS上線通知腳本
    notify_down <STRING>|<QUOTED-STRING> RS下線通知腳本

    HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK
    {

    定義當前主機的健康狀態檢測方法
    }
    }

主機的健康狀態檢測方法

1)應用層監測

  • HTTP_GET|SSL_GET:應用層檢測
  • 應用層檢測配置:
HTTP_GET|SSL_GET {
    url {
        path <URL_PATH>:定義要監控的URL
        status_code <INT>:判斷上述檢測機制爲健康狀態的響應碼
    }
    connect_timeout <INTEGER>:連接請求的超時時長
    nb_get_retry <INT>:重試次數
    delay_before_retry <INT>:重試之前的延遲時長
    connect_ip <IP ADDRESS>:向當前RS哪個IP地址發起健康狀態檢測請求
    connect_port <PORT>:向當前RS的哪個PORT發起健康狀態檢測請求
    bindto <IP ADDRESS>:發出健康狀態檢測請求時使用的源地址
    bind_port <PORT>:發出健康狀態檢測請求時使用的源端口
}
  • 檢測示例:
real_server 192.168.38.47 80 {
    weight 1
    HTTP_GET {
        url {
            path /index.html
            status_code 200
        } 
    }
    connect_timeout 5
    nb_get_retry 3
    delay_before_retry 3
}

2)TCP檢測

  • 傳輸層檢測 TCP_CHECK
TCP_CHECK {
    connect_ip <IP ADDRESS>:向當前RS的哪個IP地址發起健康狀態檢測請求
    connect_port <PORT>:向當前RS的哪個PORT發起健康狀態檢測請求
    bindto <IP ADDRESS>:發出健康狀態檢測請求時使用的源地址
    bind_port <PORT>:發出健康狀態檢測請求時使用的源端口
    connect_timeout <INTEGER>:連接請求的超時時長
}
  • tcp檢測示例:後文keepalived+lvs的實現的配置文件就是使用的tcp檢測

keepalived+lvs的實現

[root@centos7-17 keepalived]# cat /etc/keepalived/conf/lvs-web.conf 
vrrp_instance VI_2 {
    state MASTER
    interface eth0
    virtual_router_id 77
    priority 100
    advert_int 1
    unicast_src_ip 192.168.38.17
	unicast_peer { 
	192.168.38.27
	}
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.38.88 dev eth0 label eth0:0
    }
}

########################虛擬主機配置#############################
virtual_server 192.168.38.88 80 {                  
        delay_loop 3
        lb_algo rr                                 
        lb_kind DR                                
        protocol TCP
#########################real server 配置########################
        real_server 192.168.38.47 80 {             
                weight 1
		TCP_CHECK {
			connect_timeout 5
			nb_get_retry 3
			delay_before_retry 3
			connect_port 80                           
        	}
	}
        real_server 192.168.38.37 80 {             
                weight 1
		TCP_CHECK {
			connect_timeout 5
			nb_get_retry 3
			delay_before_retry 3
			connect_port 80                           
        	}
	}
}

:web server(lvs的real server)需要綁定VIP.

  • 限制響應級別:arp_ignore
    1: 僅在請求的目標IP配置在本地主機的接收到請求報文的接口上時,纔給予響應

  • 限制通告級別:arp_announce
    2:必須避免將接口信息向非本網絡進行通告

# 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
# ip a a 192.168.38.88/24 dev eth0
  • 關於lvs-dr模型詳情見:https://blog.csdn.net/wdirdo/article/details/102681184
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章