lvs简介: LVS是一个开源的软件,由毕业于国防科技大学的章文嵩博士于1998年5月创立,可以实现LINUX平台下的简单负载均衡.LVS是Linux Virtual Server的缩写,意思是Linux虚拟服务器.
Lvs 的集群工作模式有3种:VS/NAT,vs/tun,vs/dr.
Lvs的调度算法:
LVS的算法分为两大类:
静态算法:只是根据算法进行调度并不考虑后端REALSERVER的实际连接情况
rr-论调算法,假如有两台服务器A,B,第一个请求给A,第二个给B,第三个给A依次往复
wrr-加权论调,假如有两台服务器A,B,A的性能是B的两倍,则在论调的同时给A上面分配的请求也大致会是B上面的两倍
dh-假如调度器的后面是两台缓存服务器A,B而不是真正的REALSERVER,则会尽可能的把相同请求或者把同一用户的请求转发到同一个缓存服务器上面以提高缓存命中率
sh-假如公司有两台防火墙让员工上网,则会把某个员工往外的访问及向内返回的请求结果定向到同一台防火墙上面,方便防火墙做established的状态检测
动态算法:前端的调度器会根据后端REALSERVER的实际连接情况来分配请求
活动链接:当前有数据包传输
非活动链接:当前连接出于建立状态但是没有数据传输
lc-同时检查后端REALSERVER上面活动状态和非活动状态的连接数使用(活动连接数*256 非活动连接数)数字小的将接收下次访问请求
wlc-加权的lc,使用(活动连接数*256 非活动连接数)/权重,数字小的将接收下次访问请求,是最常用的算法
sed-不考虑非活动状态,使用(活动状态 1)*256,数字小的将接收下次访问请求, 1主要是为了提高权重大的服务器的响应能力nq-假设有两台服务器A,B,权重比为10:1,按照sed算法,只有当A服务器已经响应了10个请求之时两者的计算数值才相同,为了避免权重小的服务器过于空闲,nq沿用sed算法但是确保让每个服务器都不空闲,只有在不考虑非活动连接的情况下nq才能取代wlc算法
lblc-在dh的基础上面考虑后台服务器的负载能力
lblcr-在lblc的基础上,假设有A,B两台缓存服务器,某个用户第一次访问被重定向到A,第二次访问时A负载很大,B过于空闲这时也会打破原来的规则把客户的第二次访问重定向给B
案例:
在公司的内部有两台web服务器,为了实现群集的负载均衡,通过lvs服务器来实现对web服务器流量的分发.
公司的内部服务器.
web1 192.168.10.2
Web2 192.168.10.3
分发服务器director
外卡地址 192.168.2.1
内卡地址 192.168.10.1
常用的调算法
CONFIG_IP_VS_RR=m
CONFIG_IP_VS_WRR=m
CONFIG_IP_VS_LC=m
CONFIG_IP_VS_WLC=m
CONFIG_IP_VS_LBLC=m
CONFIG_IP_VS_LBLCR=m
CONFIG_IP_VS_DH=m
CONFIG_IP_VS_SH=m
CONFIG_IP_VS_SED=m
CONFIG_IP_VS_NQ=m
FILES
/proc/net/ip_vs
/proc/net/ip_vs_app
/proc/net/ip_vs_conn
/proc/net/ip_vs_stats
/proc/sys/net/ipv4/vs/am_droprate
/proc/sys/net/ipv4/vs/amemthresh
/proc/sys/net/ipv4/vs/drop_entry
/proc/sys/net/ipv4/vs/timeout_synrecv
/proc/sys/net/ipv4/vs/timeout_synsent
/proc/sys/net/ipv4/vs/timeout_timewait
/proc/sys/net/ipv4/vs/timeout_udp
一:server1的搭建
Webserver1
[root@zzu ~]# yum install http*
[root@zzu ~]# service httpd restart
二:server2的搭建
同一,此处省略
三:director的搭建
1:配置好网络参数
[root@zzu ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:F7:49:EF
inet addr:192.168.2.1 Bcast:192.168.2.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fef7:49ef/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:5917 errors:0 dropped:0 overruns:0 frame:0
TX packets:4726 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:552498 (539.5 KiB) TX bytes:599760 (585.7 KiB)
Interrupt:67 Base address:0x2000
eth1 Link encap:Ethernet HWaddr 00:0C:29:F7:49:F9
inet addr:192.168.10.1 Bcast:192.168.10.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fef7:49f9/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:916 errors:0 dropped:0 overruns:0 frame:0
TX packets:902 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:94742 (92.5 KiB) TX bytes:112395 (109.7 KiB)
Interrupt:67 Base address:0x2080
[root@zzu ~]# vim /etc/sysctl.conf开启数据包的转发功能
net.ipv4.ip_forward = 1
[root@zzu ~]# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 4294967295
kernel.shmall = 268435456
2:安装ipvsadm的rpm包
[root@zzu ~]# yum install -y ipvsadm
[root@zzu ~]# ipvsadm -A -t 192.168.2.1:80 -s rr
[root@zzu ~]# ipvsadm –a -t 192.168.2.1:80 -r 192.168.10.2:80 –m -w 1
[root@zzu ~]# ipvsadm –a -t 192.168.2.1:80 -r 192.168.10.3:80 –m -w 1
3:测试lc
[root@zzu ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.2.1:80 lc
-> 192.168.10.3:80 Masq 1 0 0
-> 192.168.10.2:80 Masq 1 0 11
10.2的连接数已经为11,而10.3的连接数竟然为0.
[root@zzu ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.2.1:80 lc
-> 192.168.10.3:80 Masq 1 0 1
-> 192.168.10.2:80 Masq 1 0 11
4:测试rr
[root@zzu ~]# ipvsadm -A -t 192.168.2.1:80 -s rr
[root@zzu ~]# ipvsadm -a -t 192.168.2.1:80 -r 192.168.10.2:80 -m 使用nat的工作模式
[root@zzu ~]# ipvsadm -a -t 192.168.2.1:80 -r 192.168.10.3:80 -m
[root@zzu ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.2.1:80 rr
-> 192.168.10.3:80 Masq 1 0 0
-> 192.168.10.2:80 Masq 1 0 0
[root@zzu ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.2.1:80 rr
-> 192.168.10.3:80 Masq 1 0 4
-> 192.168.10.2:80 Masq 1 0 3
5.测试wrr
[root@zzu ~]# ipvsadm -E -t 192.168.2.1:80 -s wrr
[root@zzu ~]# ipvsadm -e -t 192.168.2.1:80 -r 192.168.10.3:80 -m -w 1
[root@zzu ~]# ipvsadm -e -t 192.168.2.1:80 -r 192.168.10.2:80 -m -w 3
[root@zzu ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.2.1:80 wrr
-> 192.168.10.3:80 Masq 1 0 0
-> 192.168.10.2:80 Masq 3 0 0
[root@zzu ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.2.1:80 wrr
-> 192.168.10.3:80 Masq 1 0 2
-> 192.168.10.2:80 Masq 3 0 5
6:测试dh算法
[root@zzu ~]# ipvsadm -E -t 192.168.2.1:80 -s dh
[root@zzu ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.2.1:80 dh
-> 192.168.10.3:80 Masq 1 0 0
-> 192.168.10.2:80 Masq 1 0 11
常用指令的说明:
service ipvsadm save 保存ipvs-table表格
service ipvsadm panic 清空ipvs-table表格
service ipvsadm start|stop|restart
ipvsadm -A|E -t|u| service-address [-s scheduler]
ipvsadm -a|e -t|u| service-address -r server-address
[-g|i|m] [-w weight]
-A 增加虚拟服务 -E 表示修改 -t -u tcp/udp协议 -s 指定调度算法
-a 增加虚拟的映射关系 -r 真是服务器的地址 -w 权重的大小
-g -i -m 三种不用的工作模式
-g, --gatewaying Use gatewaying (direct routing). This is the default.
-i, --ipip Use ipip encapsulation (tunneling).
-m, --masquerading Use masquerading (network access translation, or NAT).
-Z, --zero
ipvsadm -Z -t 207.175.44.110:80
例子:
ipvsadm -A -t 207.175.44.110:80 -s rr
ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.1:80 -m
ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.2:80 -m
ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.3:80 -m
ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.4:80 -m
ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.5:80 -m