标签:缺点 列表排序 proc 复制 均衡器 未使用 art ipv4 ipaddr
linux virtual server简称LVS,Internet的快速增长使多媒体网络服务器面对的访问数量快速增加,服务器需要具备提供大量并发访问服务的能力,因此对于大负载的服务器来讲, CPU、I/O处理能力很快会成为瓶颈。由于单台服务器的性能总是有限的,简单的提高硬件性能并不能真正解决这个问题。为此,必须采用多服务器和负载均衡技术才能满足大量并发访问的需要。Linux 虚拟服务器(Linux Virtual Servers,LVS) 使用负载均衡技术将多台服务器组成一个虚拟服务器。它为适应快速增长的网络访问需求提供了一个负载能力易于扩展,而价格低廉的解决方案。lvs的负载能力特别强,优化空间特别大,lvs的变种DPVS据说是lvs性能的几倍,由爱奇艺开发,并广泛用于爱奇艺IDC。其他负载均衡服务器还有nginx,haproxy,F5,Netscale。
LVS 由2部分程序组成,包括 ipvs 和 ipvsadm。
在路由器上明显说明vip对应的地址一定是Director上的MAC,只要绑定,以后再跟vip通信也不用再请求了,这个绑定是静态的,所以它也不会失效,也不会再次发起请求,但是有个前提,我们的路由设备必须有操作权限能够绑定MAC地址,万一这个路由器是运行商操作的,我们没法操作怎么办?第一种方式固然很简便,但未必可行。
在给别主机上(例如:红帽)它们引进的有一种程序arptables,它有点类似于iptables,它肯定是基于arp或基于MAC做访问控制的,很显然我们只需要在每一个real server上定义arptables规则,如果用户arp广播请求的目标地址是本机的vip则不予相应,或者说相应的报文不让出去,很显然网关(gateway)是接受不到的,也就是director相应的报文才能到达gateway,这个也行。第二种方式我们可以基于arptables。
在相对较新的版本中新增了两个内核参数(kernelparameter),第一个是arp_ignore定义接受到ARP请求时的相应级别;第二个是arp_announce定义将自己地址向外通告时的通告级别。【提示:很显然我们现在的系统一般在内核中都是支持这些参数的,我们用参数的方式进行调整更具有朴实性,它还不依赖于额外的条件,像arptables,也不依赖外在路由配置的设置,反而通常我们使用的是第三种配置】
0: 只要本地配置的有相应地址,就给予响应。(默认)
1: 仅回应目标IP地址是本地的入网地址的arp请求。
2: 仅回应目标IP地址是本地的入网地址,而且源IP和目标IP在同一个子网的arp请 求。
3: 不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应
4-7:保留未使用
8: 不回应所有的arp请求。
0: 将本地任何接口上的任何地址向外通告
1: 试图仅向目标网络通告与其网络匹配的地址
2: 仅向与本地接口上地址匹配的网络进行通告
补充:特点1的解决方法
固定调度算法:rr,wrr,dh,sh
动态调度算法:wlc,lc,lblc,lblcr
固定调度算法:即调度器不会去判断后端服务器的繁忙与否,一如既往得将请求派发下去。
动态调度算法:调度器会去判断后端服务器的繁忙程度,然后依据调度算法动态得派发请求。
这种算法是最简单的,就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是简单。轮询算法假设所有的服务器处理请求的能力都是一样的,调度器会将所有的请求平均分配给每个真实服务器,不管后端 RS 配置和处理能力,非常均衡地分发下去。这个调度的缺点是,不管后端服务器的繁忙程度是怎样的,调度器都会讲请求依次发下去。如果A服务器上的请求很快请求完了,而B服务器的请求一直持续着,将会导致B服务器一直很忙,而A很闲,这样便没起到均衡的左右。
这种算法比 rr 的算法多了一个权重的概念,可以给 RS 设置权重,权重越高,那么分发的请求数越多,权重的取值范围 0 – 100。主要是对rr算法的一种优化和补充, LVS 会考虑每台服务器的性能,并给每台服务器添加要给权值,如果服务器A的权值为1,服务器B的权值为2,则调度到服务器B的请求会是服务器A的2倍。权值越高的服务器,处理的请求越多。
简单的说,即将同一类型的请求分配给同一个后端服务器,例如将以 .jgp、.png等结尾的请求转发到同一个节点。这种算法其实不是为了真正意义的负载均衡,而是为了资源的分类管理。这种调度算法主要应用在使用了缓存节点的系统中,提高缓存的命中率。
即将来自同一个ip的请求发给后端的同一个服务器,如果后端服务器工作正常没有超负荷的话。这可以解决session共享的问题,但是这里有个问题,很多企业、社区、学校都是共用的一个IP,这将导致请求分配的不均衡。
这个算法会根据后端 RS 的连接数来决定把请求分发给谁,比如 RS1 连接数比 RS2 连接数少,那么请求就优先发给 RS1。这里问题是无法做到会话保持,即session共享。
这个比最少连接数多了一个加权的概念,即在最少连接数的基础上加一个权重值,当连接数相近,权重值越大,越优先被分派请求。
将来自同一目的地址的请求分配给同一台RS如果这台服务器尚未满负荷,否则分配给连接数最小的RS,并以它为下一次分配的首先考虑。
这个用得少,可以略过。
ipvsadm是ipvs的管理器,需要yum安装。
基本用法:
ipvsadm COMMAND [protocol] service-address [scheduling-method] [persistence options]
ipvsadm COMMAND [protocol] service-address server-address [packet-forwarding-method] [weight options]
第一条命令用于向LVS系统中添加一个用于负载均衡的virtual server(VS);第二条命令用来修改已经存在的VS的配置,service address用来指定涉及的虚拟服务即虚拟地址,server-address指定涉及的真实地址。
命令参数:
-A, --add-service: 为ipvs虚拟服务器添加一个虚拟服务,即添加一个需要被负载均衡的虚拟地址。虚拟地址需要是ip地址,端口号,协议的形式。
-E, --edit-service: 修改一个虚拟服务。
-D, --delete-service: 删除一个虚拟服务。
-C, --clear: 清除所有虚拟服务。
-R, --restore: 从标准输入获取ipvsadm命令。一般结合下边的-S使用。
-S, --save: 从标准输出输出虚拟服务器的规则。可以将虚拟服务器的规则保存,在以后通过-R直接读入,以实现自动化配置。
-a, --add-server: 为虚拟服务添加一个real server(RS)
-e, --edit-server: 修改RS
-d, --delete-server: 删除
-L, -l, --list: 列出虚拟服务表中的所有虚拟服务。可以指定地址。添加-c显示连接表。
-Z, --zero: 将所有数据相关的记录清零。这些记录一般用于调度策略。
--set tcp tcpfin udp:修改协议的超时时间。
--start-daemon state:设置虚拟服务器的备服务器,用来实现主备服务器冗余。(注:该功能只支持ipv4)
--stop-daemon: 停止备服务器。
-h, --help: 帮助。
参数:以下参数可以接在上边的命令后边。
-t, --tcp-service service-address:
指定虚拟服务为tcp服务。service-address要是host[:port]的形式。端口是0表示任意端口。如果需要将端口设置为0,还需要加上-p选项(持久连接)。
-u, --udp-service service-address:
使用udp服务,其他同上。
-f, --fwmark-service integer:
用firewall mark取代虚拟地址来指定要被负载均衡的数据包,可以通过这个命令实现把不同址、端口的虚拟地址整合成一个虚拟服务,可以让虚拟服务器同时截获处理去往多个不同地址的数据包。fwmark可以通过iptables命令指定。如果用在ipv6需要加上-6。
-s, --scheduler scheduling-method:
指定调度算法。调度算法可以指定以下8种:rr(轮询),wrr(权重),lc(最后连接),wlc(权重),lblc(本地最后连接),lblcr(带复制的本地最后连接),dh(目的地址哈希),sh(源地址哈希),sed(最小期望延迟),nq(永不排队)
-p, --persistent [timeout]:
设置持久连接,这个模式可以使来自客户的多个请求被送到同一个真实服务器,通常用于ftp或者ssl中。
-M, --netmask netmask:
指定客户地址的子网掩码。用于将同属一个子网的客户的请求转发到相同服务器。
-r, --real-server server-address:
为虚拟服务指定数据可以转发到的真实服务器的地址。可以添加端口号。如果没有指定端口号,则等效于使用虚拟地址的端口号。
[packet-forwarding-method]:
此选项指定某个真实服务器所使用的数据转发模式。需要对每个真实服务器分别指定模式。
-g, --gatewaying: 使用网关(即直接路由),此模式是默认模式。
-i, --ipip: 使用ipip隧道模式。
-m, --masquerading: 使用NAT模式。
-w, --weight weight:
设置权重。权重是0~65535的整数。如果将某个真实服务器的权重设置为0,那么它不会收到新的连接,但是已有连接还会继续维持(这点和直接把某个真实服务器删除时不同的)。
-x, --u-threshold uthreshold:
设置一个服务器可以维持的连接上限。0~65535。设置为0表示没有上限。
-y, --l-threshold lthreshold:
设置一个服务器的连接下限。当服务器的连接数低于此值的时候服务器才可以重新接收连接。如果此值未设置,则当服务器的连接数连续三次低于uthreshold时服务器才可以接收到新的连接。(PS:笔者以为此设定可能是为了防止服务器在能否接收连接这两个状态上频繁变换)
--mcast-interface interface:
指定使用备服务器时候的广播接口。
--syncid syncid:
指定syncid,同样用于主备服务器的同步。
以下选项用于list命令:
-c, --connection:
列出当前的IPVS连接。
--timeout:
列出超时
--daemon:
--stats:
状态信息
--rate:
传输速率
--thresholds:
列出阈值
--persistent-conn:
坚持连接
--sor:
把列表排序。
--nosort:
不排序
-n, --numeric:
不对ip地址进行dns查询
--exact:
单位
-6:
如果fwmark用的是ipv6地址需要指定此选项。
其他注意事项:
Director: centos 6.8 VIP:192.168.1.111
DIP:192.168.229.133
RealServer1: centos6.8 RIP:192.168.229.132
RealServer2: centos6.8 RIP:192.168.229.134
安装ipvsadm:
[root@ShiYanLou LVS]# yum install ipvsadm –y
编辑脚本:/LVS/install.sh
#director设置 nat 防火墙 iptables -t nat -F #!/bin/bash VIP=192.168.1.111 DIP=192.168.229.133 RIP1=192.168.229.132 RIP2=192.168.229.134 # director服务器上开启路由转发功能: echo 1 > /proc/sys/net/ipv4/ip_forward # 关闭 icmp 的重定向 echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects echo 0 > /proc/sys/net/ipv4/conf/eth1/send_redirects # director设置 ipvsadm IPVSADM=‘/sbin/ipvsadm‘ $IPVSADM -C $IPVSADM -A -t $VIP:80 -s rr $IPVSADM -a -t $VIP:80 -r $RIP1:80 -m $IPVSADM -a -t $VIP:80 -r $RIP2:80 -m
vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 HWADDR=00:0C:29:46:3B:8C TYPE=Ethernet UUID=e2fa0e51-7240-4ef9-8572-bf82ef8bb6a8 ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=static IPADDR=192.168.229.132 NETMASK=255.255.255.0 GATEWAY=192.168.229.133 #配置网关为DIP
yum –y install httpd 标记网页: RealServer1:echo ”I am RealServer1 192.168.229.132”>/var/www/html/index.html RealServer2:echo “I am RealServer2 192.168.229.134”>/var/www/html/index.html
会轮询得到“I am RealServer1 192.168.229.132”“I am RealServer2 192.168.229.134”
注意:关闭Director的防火墙iptables,不然访问不成功。
Director: centos 6.8 VIP:eth0:0:192.168.229.111
DIP:eth0:192.168.229.133
RealServer1: centos6.8 RIP:eth0:192.168.229.132
VIP:lo:0:192.168.229.111
RealServer2: centos6.8 RIP:eth0:192.168.229.134
VIP:lo:0:192.168.229.111
脚本如下:
#! /bin/bash echo 1 > /proc/sys/net/ipv4/ip_forward ipv=/sbin/ipvsadm vip=192.168.229.111 rs1=192.168.229.132 rs2=192.168.229.134 ifconfig eth0:0 down ifconfig eth0:0 $vip broadcast $vip netmask 255.255.255.0 up route add -host $vip dev eth0:0 $ipv -C $ipv -A -t $vip:80 -s rr $ipv -a -t $vip:80 -r $rs1:80 -g $ipv -a -t $vip:80 -r $rs2:80 –g
脚本如下:
#!/bin/bash vip=192.168.229.111 ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up route add -host $vip lo:0 echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
会轮询得到“I am RealServer1 192.168.229.132” “I am RealServer2 192.168.229.134”
注意:关闭Director的防火墙iptables,不然访问不成功。
Director: centos 6.8 VIP:eth0:0:192.168.299.111
DIP:eth0:192.168.229.133
RealServer1: centos6.8 RIP:eth0:192.168.229.132
VIP:tunl0:192.168.229.111
RealServer2: centos6.8 RIP:eth0:192.168.229.134
VIP:tunl0:192.168.229.111
脚本如下:
#! /bin/bash echo 1 > /proc/sys/net/ipv4/ip_forward ipv=/sbin/ipvsadm vip=192.168.229.111 rs1=192.168.229.132 rs2=192.168.229.134 ifconfig eth0:0 down ifconfig eth0:0 $vip broadcast $vip netmask 255.255.255.0 up route add -host $vip dev eth0:0 iptables -t nat -F setenforce 0 $ipv -C $ipv -A -t $vip:80 -s rr $ipv -a -t $vip:80 -r $rs1:80 -i $ipv -a -t $vip:80 -r $rs2:80 -i
a、加载ipip模块
[root@ulife3test LVS]# modprobe ipip
b、配置VIP:
[root@ulife3test LVS]# cd /etc/sysconfig/network-scripts/ [root@ulife3test network-scripts]# cp ifcfg-lo ifcfg-tunl0 [root@ulife3test network-scripts]# vi ifcfg-tunl0 DEVICE=tunl0 IPADDR=192.168.229.111 NETMASK=255.255.255.0 ONBOOT=yes NAME=tunl0 [root@ulife3test network-scripts]# service network restart
c、关闭arp转发:
[root@ulife3test network-scripts]# echo ‘0‘>/proc/sys/net/ipv4/ip_forward [root@ulife3test network-scripts]# vi /etc/sysctl.conf #加入以下行 net.ipv4.conf.tunl0.arp_ignore = 1 net.ipv4.conf.tunl0.arp_announce = 2 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.tunl0.rp_filter = 0 net.ipv4.conf.all.rp_filter = 0 [root@ulife3test network-scripts]# sysctl -p #永久生效 net.ipv4.ip_forward = 0 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 net.ipv4.conf.tunl0.arp_ignore = 1 net.ipv4.conf.tunl0.arp_announce = 2 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.tunl0.rp_filter = 0 net.ipv4.conf.all.rp_filter = 0
d、关闭selinux
setenforce 0或者修改/etc/selinux/config 配置文件中SELINUX=disabled然后重启系统。
会轮询得到“I am RealServer1 192.168.229.132”“I am RealServer2 192.168.229.134”
注意:关闭Director的防火墙iptables,不然访问不成功。
标签:缺点 列表排序 proc 复制 均衡器 未使用 art ipv4 ipaddr
原文地址:https://www.cnblogs.com/klb561/p/9215667.html