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