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
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服务测试服务是否正常。