LVS負載均衡配置與keepalive服務配置

EkuinoxPrime發表於2020-12-20

LVS負載均衡配置

負載均衡模型

D-NAT
在這裡插入圖片描述
D-NAT模型的缺點在於網路上傳與下載的不對稱性,返回資料包時會經過負責負載均衡的機器,網路io任務很重,可能導致卡頓,並且tcp握手是與負載機進行的,流量一大則很容易響應不過來。


DR
在這裡插入圖片描述
DR模型的均衡機接收到資料包後直接把目標mac地址改為負載機的mac地址(RIP的mac),資料包直接轉發給伺服器,伺服器配置了虛擬網路卡,虛擬網路卡的ip地址(vip)與均衡機公開的vip相同,但對外不暴露,所以收到轉發過來的資料包會收下,處理完後以虛擬網路卡的ip通過其他可達網路發回給client,不再經過負載機;但由於均衡機是修改mac地址進行資料包轉發的,所以負載機(server)和均衡機(轉發機)必須處於同一區域網中。


TUN
在這裡插入圖片描述
沒有明顯缺點,直接再包一層ip包頭轉發給server,可以不處於同一區域網中,但轉發資料包也可能產生延遲,所以服務響應可能會稍慢。

配置LVS

實驗虛擬機器
系統centos
node01:ip/192.168.150.11、網路卡名:eth0
node02:ip/192.168.150.12、網路卡名:eth0
node03:ip/192.168.150.13、網路卡名:eth0

1、
node01物理網路卡建立子ip

ifconfig  eth0:8 192.168.150.100/24

2、
設定node02和03的arp報文響應、通告級別
隱藏VIP方法:對外隱藏,對內可見 :

kernel parameter:
目標mac地址為全F時,交換機會觸發arp廣播,當網路卡上電時,不修改響應級別的話會發起arp廣播,導致閘道器接收到伺服器的mac和ip,從而新增記錄到路由表中,閘道器收到發往vip的資料包時會直接發給server,進一步導致轉發機收不到資料包,做負載均衡失敗,因此需要修改server的arp響應和通告級別

arp_ignore: 定義接收到ARP請求時的響應級別:

  0:只要本地配置的有相應地址,就給予響應;
  1:僅在請求的目標(MAC)地址配置請求
        到達的介面上的時候,才給予響應;

arp_announce:定義將自己地址向外通告時的通告級別:

  0:將本地任何介面上的任何地址向外通告;
  1:試圖僅向目標網路通告與其網路匹配的地址;
  2:僅向與本地介面上地址匹配的網路進行通告;

node02/03 分別做如下操作:
設定響應通告級別

echo 1  >  /proc/sys/net/ipv4/conf/eth0/arp_ignore 
echo 1  >  /proc/sys/net/ipv4/conf/all/arp_ignore 
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce 
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 

設定隱藏的vip,僅自己可見

ifconfig  lo:3  192.168.150.100  netmask 255.255.255.255

3、
LVS服務配置
node01:

yum install ipvsadm -y
ipvsadm -A  -t  192.168.150.100:80  -s rr
ipvsadm -a  -t 192.168.150.100:80  -r  192.168.150.12 -g -w 1
ipvsadm -a  -t 192.168.150.100:80  -r  192.168.150.13 -g -w 1
ipvsadm -ln

node02/03:

yum	install httpd -y
touch /var/www/html/index.html
echo 02/03 > /var/www/html/index.html         #02/03區別操作
service httpd start						#centos7: systemctl start httpd

最後物理機開啟瀏覽器,位址列輸入192.168.150.100驗證,開多個瀏覽器可看到不同結果
node01:

netstat -natp   結論看不到socket連線

node02~node03:

netstat -natp   結論看到很多的socket連線

node01:

ipvsadm -lnc    檢視記錄本
TCP 00:57  FIN_WAIT    192.168.150.1:51587 192.168.150.100:80 192.168.150.12:80
FIN_WAIT: 連線過,偷窺了所有的包
SYN_RECV: 基本上lvs都記錄了,證明lvs沒事,一定是後邊網路層出問題

ipvs核心模組:

yum install ipvsadm -y

管理叢集服務:

新增:-A -t|u|f service-address [-s scheduler]
-t: TCP協議的叢集 
-u: UDP協議的叢集
service-address:     IP:PORT
-f: FWM: 防火牆標記 
service-address: Mark Number
修改:-E
刪除:-D -t|u|f service-address

ipvsadm -A -t 192.168.9.100:80 -s rr

Keepalive

keepalive可以做lvs負載均衡的高可用,防止均衡機掛掉,還能夠實時監測伺服器服務是否線上,動態調整負載,但keepalive本身也可能掛掉


實驗虛擬機器:node01/node04

node01:

ipvsadm -C				#清除負載策略
ifconfig eth0:8 down    #關閉虛擬機器物理網路卡子ip

node01,node04:

yum install keepalived ipvsadm -y
cd  /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
vi keepalived.conf

配置keepalive:

vrrp_instance VI_1 {
	state MASTER         //  node04  BACKUP
	interface eth0
	virtual_router_id 51
	priority 100		 //	 node04	 50
	advert_int 1
	authentication {
		auth_type PASS
		auth_pass 1111
	}
	virtual_ipaddress {
		192.168.150.100/24 dev eth0 label  eth0:3
	}
}
virtual_server 192.168.150.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
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
	}   
}       
real_server 192.168.150.13 80 {
	weight 1
	HTTP_GET {
		url {
		  path /
		  status_code 200
		}
		connect_timeout 3
		nb_get_retry 3
		delay_before_retry 3
	}
}
scp  ./keepalived.conf  root@node04:`pwd`    #node04需要進到keepalive配置目錄下

不要忘記修改node04的keepalive配置檔案

可以隨機關掉node01/04的網路卡或關掉node02/03的http服務測試服務是否正常。

相關文章