LVS负载均衡配置与keepalive服务配置

  • Post author:
  • Post category:其他




负载均衡模型


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



Keepalived

keepalived可以做lvs负载均衡的高可用,防止均衡机挂掉,还能够实时监测服务器服务是否在线,动态调整负载,但keepalived本身也可能挂掉


实验虚拟机: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

配置keepalived:

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`    #node01需要进到keepalived的配置目录下

不要忘记修改node04的keepalived配置文件

可以随机关掉node01/04的网卡或关掉node02/03的http服务测试服务是否正常。



版权声明:本文为EquinoxPrime原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。