共计 8181 个字符,预计需要花费 21 分钟才能阅读完成。
LVS 是 Linux Virtual Server 的缩写,是一个虚拟的服务器集群系统,能够定义一个或多个后端服务器。工作在 INPUT 上的内核中 ipvs。
LVS 的调度方法:10 种
静态方法:仅根据算法本身进行调度
rr: Round Robin 轮询
wrr: Weighted RR 权重轮询
sh: source hashing 根据 ip 反均衡 支持 session 绑定
dh: destination hashing 根据防火墙 设置时候 用到不多
动态方法:根据算法及 RS 当前的负载状况
真处在数据链接的叫活动状态 数据链接结束但为断开叫非活动链接
lc: Least Connection #最少连接
Overhead=Active*256+Inactive #开始时候是轮询 结果中,最小者胜出;
wlc: Weighted LC
Overhead=(Active*256+Inactive)/weight #结果中,最小者胜出;
sed: Shortest Expect Delay #wlc 的升级 最小期望延迟
Overhead=(Active+1)*256/weight
nq: Nerver Queue #改进的 sed 上来先轮一篇 不过是根据 sed 来轮询
lblc: Locality-based Least Connection 基于本地最少连接
dh+lc 用于 session 绑定 用的不多
lblcr: Replicated and Locality-based Least Connection 用的不多 后端是缓存服务器
lvs-nat
LVS NAT 的特性:
1、RS 应该使用私有地址;
2、RS 的网关的必须指向 DIP;
3、RIP 和 DIP 必须在同一网段内;
4、请求和响应的报文都得经过 Director;在高负载场景中,Director 很可能成为系统性能瓶颈;
5、支持端口映射;
6、RS 可以使用任意支持集群服务的 OS;
安装 ipvsadm
[root@marvin /]# yum install ipvsadm -y
vip:192.168.1.119
dip:192.168.243.132 虚拟网卡:主机模式
rip1:192.168.243.129 虚拟网卡:主机模式 http 服务 测试页面 demo.html 页面内容 martin
rip2:192.168.243.131 虚拟网卡:主机模式 http 服务 测试页面 demo.html 页面内容 lucia
http: 这里不做安装配置说明
添加 vip:
[root@marvin /]# ifconfig eth1:0 192.168.1.119/24 up
配置路由转发:
[root@marvin nat]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@marvin nat]# sysctl -p
real-server 路由指向 dip:
[root@martin /]# route add default gw 192.168.243.132
[root@lucia /]# route add default gw 192.168.243.132
添加集群服务:
#添加集群服务器
[root@marvin /]# ipvsadm -A -t 192.168.1.119:80 -s rr
# 添加后端服务器
[root@marvin /]# ipvsadm -a -t 192.168.1.119:80 -r 192.168.243.129 -m
[root@marvin /]# ipvsadm -a -t 192.168.1.119:80 -r 192.168.243.131 -m
#数据查看
[root@marvin /]# ipvsadm -L -n # –rate –stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.119:80 rr
-> 192.168.243.129:80 Masq 1 0 0
-> 192.168.243.131:80 Masq 1 0 0
测试结果 1:1
[root@marvin /]# ipvsadm -L -n –rate –stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
-> RemoteAddress:Port
TCP 192.168.1.119:80 104 1090 507 154977 109894
-> 192.168.243.129:80 52 649 304 101371 75352
-> 192.168.243.131:80 52 441 203 53606 34542
修改:
[root@marvin /]# ipvsadm -E -t 192.168.1.119:80 -s wrr
[root@marvin /]# ipvsadm -e -t 192.168.1.119:80 -r 192.168.243.131 -m -w 3
清空计数器:
[root@marvin /]# ipvsadm -Z -t 192.168.1.119:80
测试结果 3:1
1234567 [root@marvin /]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.119:80 wrr
-> 192.168.243.129:80 Masq 1 0 5
-> 192.168.243.131:80 Masq 3 1 16
数据保存:
[root@marvin lvs-date]# ipvsadm -S > /mydata/lvs-date/nat/wrr.conf
数据集群服务:
[root@marvin nat]# ipvsadm -D -t 192.168.1.119:80
[root@marvin nat]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
还原集群服务:
[root@marvin nat]# ipvsadm -R </mydata/lvs-date/nat/wrr.conf
[root@marvin nat]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.119:80 wrr
-> 192.168.243.129:80 Masq 1 0 0
-> 192.168.243.131:80 Masq 3 0 0
查看映射表:
[root@marvin /]# ipvsadm -L -c
IPVS connection entries
pro expire state source virtual destination
TCP 00:46 TIME_WAIT 192.168.1.102:56168 192.168.1.119:http 192.168.243.131:http
TCP 00:45 TIME_WAIT 192.168.1.102:56161 192.168.1.119:http 192.168.243.129:http
TCP 00:46 TIME_WAIT 192.168.1.102:56163 192.168.1.119:http 192.168.243.131:http
TCP 00:46 TIME_WAIT 192.168.1.102:56164 192.168.1.119:http 192.168.243.131:http
TCP 00:44 TIME_WAIT 192.168.1.102:56154 192.168.1.119:http 192.168.243.131:http
TCP 00:45 TIME_WAIT 192.168.1.102:56162 192.168.1.119:http 192.168.243.131:http
TCP 00:52 TIME_WAIT 192.168.1.102:56172 192.168.1.119:http 192.168.243.131:http
TCP 00:46 TIME_WAIT 192.168.1.102:56165 192.168.1.119:http 192.168.243.129:http
TCP 00:44 TIME_WAIT 192.168.1.102:56153 192.168.1.119:http 192.168.243.129:http
TCP 00:47 TIME_WAIT 192.168.1.102:56171 192.168.1.119:http 192.168.243.131:http
TCP 00:44 TIME_WAIT 192.168.1.102:56155 192.168.1.119:http 192.168.243.131:http
TCP 00:46 TIME_WAIT 192.168.1.102:56167 192.168.1.119:http 192.168.243.131:http
TCP 00:46 TIME_WAIT 192.168.1.102:56169 192.168.1.119:http 192.168.243.129:http
TCP 00:47 TIME_WAIT 192.168.1.102:56170 192.168.1.119:http 192.168.243.131:http
TCP 00:46 TIME_WAIT 192.168.1.102:56166 192.168.1.119:http 192.168.243.131:http
TCP 00:45 TIME_WAIT 192.168.1.102:56159 192.168.1.119:http 192.168.243.131:http
TCP 00:44 TIME_WAIT 192.168.1.102:56156 192.168.1.119:http 192.168.243.131:http
TCP 00:44 TIME_WAIT 192.168.1.102:56152 192.168.1.119:http 192.168.243.131:http
TCP 00:45 TIME_WAIT 192.168.1.102:56157 192.168.1.119:http 192.168.243.129:http
TCP 00:45 TIME_WAIT 192.168.1.102:56160 192.168.1.119:http 192.168.243.131:http
TCP 00:45 TIME_WAIT 192.168.1.102:56158 192.168.1.119:http 192.168.243.131:http
TCP 00:44 TIME_WAIT 192.168.1.102:56149 192.168.1.119:http 192.168.243.131:http
lvs-dr:
LVS DR 类型:
1、让前端路由将请求发往 VIP 时,只能是 Dirctor 上的 VIP;
解决方案:
(1) 静态地址绑定;
未必有路由器的配置权限;
Director 调用时静态地址绑定将难以适用;
(2) arptables
(3) 修改 Linux 内核参数,将 RS 上的 VIP 配置为 lo 接口的别名,限制 Linux 仅对对应接口的 ARP 请求做响应;
LVS DR 类型的特性:
1、RS 可以使用私有地址;但也可以使用公网地址,此时可以直接通过互联网连入 RS 以实现配置、监控等;
2、RS 的网关一定不能指向 DIP;
3、RS 跟 Dirctory 要在同一物理网络内(不能由路由器分隔);
4、请求报文经过 Directory,但响应报文一定不经过 Director
5、不支持端口映射;
6、RS 可以使用大多数的操作系统;
vip:192.168.1.119
#dip: 虚拟网卡:主机模式
rip1:192.168.1.122 虚拟网卡:主机模式 http 服务 测试页面 demo.html 页面内容 martin
rip2:192.168.1.123 虚拟网卡:主机模式 http 服务 测试页面 demo.html 页面内容 lucia
http: 这里不做安装配置说明
简单说明:这里的 dip=vip vip 是一般都是公网 假如要设置不同网段的 dip,即 dip 可以是私网 只要 rip 与 dip 能通信 rip 的网络能流向 cip 即可。
real-server:
[root@martin ~]# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
[root@martin ~]# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
[root@martin ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@martin ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@lucia ~]# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
[root@lucia ~]# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
[root@lucia ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@lucia ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
arp_ignore 被动模式 # 是否响应 ARP 地址请求,默认 0。
0 # 回复本机的所有 ip 地址(不管地址在哪里)。
1 # 仅在请求的目标地址配置请求到达的接口上的时候,才给予响应
arp_announce # 限制本机如何通告本地地址,默认 0。通告级别:主动模式
0 # 通高所有本机 ip 地址。
1 #试图仅向目标网络通告与其网络匹配的地址
2 # 仅对相同网络段地址进行通告。通告 rip mac 隐藏 real-server 上的 vip mac
添加 vip:(广播域设为本机)
[root@martin ~]# ip addr add dev lo 192.168.1.119/32 broadcast 192.168.1.119 label lo:0
[root@lucia ~]# ip addr add dev lo 192.168.1.119/32 broadcast 192.168.1.119 label lo:0
添加集群服务
[root@marvin nat]# ipvsadm -A -t 192.168.1.119:80 -s rr #时间[-p 300]
[root@marvin nat]# ipvsadm -a -t 192.168.1.119:80 -r 192.168.1.222 -g
[root@marvin nat]# ipvsadm -a -t 192.168.1.119:80 -r 192.168.1.223 -g
[root@marvin nat]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.119:80 rr
-> 192.168.1.222:80 Route 1 0 5
-> 192.168.1.223:80 Route 1 0 5
[root@marvin nat]# ipvsadm -E -t 192.168.1.119:80 -s wrr
[root@marvin nat]# ipvsadm -e -t 192.168.1.119:80 -r 192.168.1.223 -g -w 4
[root@marvin nat]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.119:80 wrr
-> 192.168.1.222:80 Route 1 0 6
-> 192.168.1.223:80 Route 4 0 24
抓包:数据从 lo 上出去
[root@lucia ~]# tcpdump -i any -nn -XX tcp src port 80 and ip src 192.168.1.119
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes
19:14:03.630672 IP 192.168.1.119.80 > 192.168.1.102.58761: Flags [S.], seq 4229184048, ack 1320608146, win 14480, options [mss 1460,sackOK,TS val 418789887 ecr 177960826,nop,wscale 6], length 0
0x0000: 0004 0001 0006 000c 2960 a9fd 0000 0800 ……..)`……
0x0010: 4500 003c 0000 4000 4006 b68e c0a8 0177 E..<..@.@……w
0x0020: c0a8 0166 0050 e589 fc14 3a30 4eb6 e192 …f.P….:0N…
0x0030: a012 3890 69c0 0000 0204 05b4 0402 080a ..8.i………..
0x0040: 18f6 39ff 0a9b 777a 0103 0306 ..9…wz….
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-06/131941.htm