by shihang.mai
1. LVS负载均衡拓扑
负载均衡拓扑2. NAT模式
负载均衡拓扑-DNAT- Client发出(CIP->VIP)的包到负载均衡服务器,但是如果继续将(CIP-VIP)包向后面的RIP发送,显然RIP服务器会丢掉这个包。
- 只需在负载均衡服务器中将(CIP->VIP)改为(CIP->RIP),就能解决。
- 当server处理完返回时同样道理,server发出(RIP->CIP),在负载均衡服务器中将(RIP->CIP)改为(VIP->CIP),发送回Client
缺点:
- 一般地,发送都是少量的数据,返回的数据都会比发送的大,发送和返回都需要经过负载均衡服务器,带宽就是瓶颈。
- 因为每次的发送和返回都要经过地址转换,会消耗负载均衡服务器的计算能力。
3. DR模式
负载均衡-DR- 为解决NAT模式带宽瓶颈,那么我们只需要发送和返回分开就可以
- 那么server端必须能产生(VIP->CIP),即server端必须有VIP,而且这个VIP应该是隐藏的,在server内部可见,但是对外不可见
- 当Client发出(CIP->VIP),在负载均服务器中,直接利用链路层ARP协议,发出的时候拼上RIP的mac地址,直接发送到server
- server收到后,拆掉RIP@MAC,处理完,用隐藏的VIP就可以生成(VIP->CIP),这样就把发送和返回分开了
优点:利用arp速度快,也不太消耗算力,成本低
缺点:因为利用了arp,而arp是节点与节点间的,所以负载均衡服务器要与server同一个局域网,有限制。
4. TUN模式
负载均衡拓扑-TUN- 解决统一局域网限制,我们直接用数据包(DIP->RIP)包裹吗(CIP->VIP)即可.
- Client发送(CIP->VIP),在负载均衡服务器中用(DIP->RIP)发送,但是这个包里面含有(CIP->VIP),那么在server端接收到包后,拆掉外层(DIP->RIP),处理完后用隐藏的vip就可以生成(VIP->CIP)
优点:没统一局域网限制,速度也可以。
隐藏vip方法(在本地网卡LO上配置)
路径: /proc/sys/net/ipv4/conf/\*IF\*/arp_ignore
arp_ignore: 定义接收到ARP请求时的响应级别;
0:只要本地配置的有相应地址,就给予响应;
1:仅在请求的目标(MAC)地址配置请求,到达的接口上的时候,才给予响应;
====================================================
路径: /proc/sys/net/ipv4/conf/\*IF\*/arp_announce
arp_announce:定义将自己地址向外通告时的通告级别;
0:将本地任何接口上的任何地址向外通告;
1:试图仅向目标网络通告与其网络匹配的地址;
2:仅向与本地接口上地址匹配的网络进行通告;
5. DR模式例子
实验手册LVS:
node01:
ifconfig eth0:8 192.168.150.100/24
node02~node03:
1)修改内核:
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
2)设置隐藏的vip:
ifconfig lo:3 192.168.150.100 netmask 255.255.255.255
RS中的服务:
node02~node03:
yum install httpd -y
service httpd start
vi /var/www/html/index.html
from 192.168.150.1x
LVS服务配置
node01:
yum install ipvsadm
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
验证:
浏览器访问 192.168.150.100 看到负载 疯狂F5
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没事,一定是后边网络层出问题
以上模型存在的问题:
1. LVS单点故障,整个业务异常
2. RS会挂,LVS还存在这个RS的负载记录,导致一部分业务异常
解决方法:
1. 主备解决LVS单点
方向:主向备发送心跳
效率:主挂了,每个备拿出自己的权重,最大的当选。推让制。
2. 验证RS挂。http请求,判断是否返回200
6. Keepalived
这是一个第三方的软件,作用如下:
1. 监控自己服务
2. Matser通告自己还活着,backup监听Master状态,Master挂了,一堆backup推举出一个Master
3. 配置vip,添加itvs
4. 对RS做健康检查
实验手册-keepalive
keepalived实验:
主机: node01~node04
node01:
ipvsadm -C
ifconfig eth0:8 down
----------------------------
node01,node04:
yum install keepalived ipvsadm -y
配置:
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
vi keepalived.conf
node01:
vrrp:虚拟路由冗余协议!
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`
虽然有keepalive,但是keepalive是单点。而且当主机的keepalive异常挂了(主机还运行着),那么备机也会创建vip,那就会有两个相同的vip(即:192.168.150.100)。
网友评论