LVS负载均衡搭建详解

Linux虚拟服务器

章文嵩

隐藏VIP的方法:对外隐藏,对内可见

Kernel parameter:
目标MAC地址为全F,交换机促发广播
/proc/sys/net/ipv4/conf/IF目录下的文件只能用echo重定向去覆盖,不能用vi打开;文件系统是把内核或者程序里面的东西映射成文件,你改文件的时候间接改了程序里面的变量,而且并不是把所有东西都暴露出来而是选择性的暴露。

arp_ignore:定义接到ARP请求时的响应级别
0:只要本地配置的有相应地址,就给予响应
1:仅在请求的目标MAC地址配置请求到达的接口上的时候,才给予响应。
arp_announce: 定义将自己地址向外通告时的通告级别
0:将本地任何接口上的任何地址向外通告
1:试图仅向目标网络通告与其网络匹配的地址
2:仅向与本地接口上地址匹配的网络进行通告。

Vip陪在内核网卡,环卫接口上。(lo,vip)
一块物理网卡上可以配多个IP地址。

LVS负载均衡调度算法:
四种静态:
rr:轮询
wrr:
dh:
sh:
动态调度算法:
lc:最少连接 wlc:加权最少连接 sed:最短期望延迟
nq:never queue LBLC:基于本地的最少连接 DH:
LBLCR:基于本地的带复制功能的最少连接

ipvs内核模块:(不需要装,自带的LVS模块)
内核暴露系统调用(C语言开发的API)
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

管理集群服务中的RS
添加:-a -t|u|f service-address -r server-address [-g|i|m] [ -w weight ]
-t|u|f service-address: 事先定义好的某集群服务
-r server-address:某RS的地址,在NAT模式中可使用IP:PORT实行端口映射;
[-g|i|m]:LVS类型
-g : DR
-i: TUN
-m: NAT
[-w weight] : 定义服务器的权重
修改 -e
删除: -d -t|u|f service-address -r server-address
#ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.8 -g
#ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.9 -g
查看:
-L|I
-n: 数字形式显示主机地址和端口
–status:统计数据
–rate: 速率
–timeout:显示tcp、tcpfin和udp的会话超时时长
-c: 显示当前IPVS的连接状况(偷窥的连接状态)
删除所有集群服务
-C :清楚IPVS规则
保存规则
-S
#ipvsadm -S > /path/to/somefile
载入此前的规则
-R
#ipvsadm -R < /path/to/somefile

实验手册

环境:
LVS负载均衡搭建详解
node01配置VIP: ifconfig eth0:8 192.168.150.100/24
ifconfig eht0:8 down(撤掉的命令)

node02,03配置隐藏VIP:
先调ARP协议:
(1)改eth0
cd /proc/sys/net/ipv4/conf/
cd eth0
echo 1 > arp_ignore
cat arp_ignore
echo 2 > arp_announce
(2)改ALL接口
cd …
cd all
echo 1 > arp_ignore
echo 2 > arp_announce
隐藏VIP配置:
ifconfig lo:2 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

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~03:
netstat -natp 结论:看到很多socket连接
node01:
ipvsadm -lnc 查看偷窥记录表
TCP 00:21 FIN_WAIT 192.168.150.1:51587 192.168.150.100:80 192.168.150.12:80
FIN_WAIT: 连接过,偷窥了所有的包
SYN_RECV: 基本上LVS都记录了,证明LVS没事,一定是后面网络层出问题了(比如RS的VIP down掉了)