初识LVS
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。章文嵩博士目前工作于中国国家并行与分布式处理重点实验室,主要从事集群技术、操作系统、对象存储与数据库的研究。
用户从外部访问负载均衡服务器,请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端的某台服务器 。
术语 | 解释 |
---|---|
Load balancer或director | 负载调度器 |
RS或Real Server | 真实服务器,提供服务的服务器 |
VIP | 虚拟IP地址,客户端访问集群的地址 |
RIP | 集群所提供应用程序的地址(HTTP,FTP) |
DIP | 调度器的真实地址 |
LVS工作模式
LVS的工作模式分为NAT模式、DR模式、以及TUN模式。模式原理见负载均衡模型
LVS调度方法
静态方法
(1)rr : round robin :轮叫,轮询
(2)wrr: weight round robin :加权轮询(以权重之间的比例实现在各主机之间进行调度)
(3)sh : source hashing : 源地址hash实现会话绑定sessionaffinity
(4)dh : destination hashing : 目标地址hash
动态方法
如何获取最小连接数?
LVS会“偷窥”RS的建立连接时的请求(三次握手中的两次),以及端口连接的请求(四次挥手中的两次)
LVS的偷窥行为也就解释了为什么LVS不会把三次握手时候syn包和ack包负载到不同的RS,因为LVS会做一个记录
(1)lc :leash-connection 最少连接
(2)wlc :加权最少连接
(3)sed :最少期望延迟
(4)nq :never queue 永不排队
(5)LBLC :基于本地的最少连接
(6)LBLCR :基于本地的带复制功能的最少连接
LVS隐藏VIP的方法
修改内核参数,arp_ignore修改为1,arp_announce修改为2,在lo虚拟网卡上配置VIP;
lo网卡代表本地地址,是内部通信用的,这样就做到了VIP对内可见,对外隐藏
/proc/sys/net/ipv4/conf/eth0/
arp_ignore: 定义接收到ARP请求时的响应级别;
0:只要本地配置的有相应地址,就给予响应;
1:仅在请求的目标(MAC)地址配置请求
到达的接口上的时候,才给予响应;
arp_announce:定义将自己地址向外通告时的通告级别;
0:将本地任何接口上的任何地址向外通告;
1:试图仅向目标网络通告与其网络匹配的地址;
2:仅向与本地接口上地址匹配的网络进行通告;
LVS负载均衡配置
LINUX的ipvs模块集成了LVS,但是只是系统调用
要想使用LVS,需要安装一个用户空间程序 ipvsadm
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没事,一定是后边网络层出问题