实验说明:负载均衡,从字面意义来理解是多个后台服务器来支撑一个访问的服务正常运行,也就是说单个重负载的节点分担到多台设备上并行处理,减小用户等待的相应时间,也就是咱们说的集群技术,但负载均衡不等于群集,这种技术主要针对企业中WEB服务器和FTP服务器等关键应用html
实验原理:linux
LVS的全称Linux vitual system,
LVS工做在一台server上提供Directory(负载均衡器)的功能,自己并不提供服务,只是把特定的请求转发给对应的realserver(真正提供服务的主机),从而实现集群环境中的负载均衡。
LVS的核心组件ipvs工做在kernel中,是真正的用于实现根据定义的集群转发规则把客户端的请求转发到特定的realserver。而另外一个组件ipvsadm是工做在用户空间的一个让用户定义ipvs规则的工具。故咱们只要在server上装了ipvsadm软件包就能够定义ipvs规则,而在linux kernel的2.6版本以后kernel是直接支持ipvs的。算法
lvs 三种模型 (NAT DR TUN)vim
NAT 的架构的特色 服务器
工做原理:基于NAT机制实现。当用户请求到达director以后,director将请求报文的目标地址(即VIP)改为选定的realserver地址,同时将报文的目标端口也改为选定的realserver的相应端口,最后将报文请求发送到指定的realserver。在服务器端获得数据后,realserver将数据返给director,而director将报文的源地址和源端口改为VIP和相应端口,而后把数据发送给用户,完成整个负载调度过程。
特色:
1,全部的realserver和director要在同一个网段内
2,RIP是私有地址,仅用于集群节点之间进行通讯
3,director同时处理请求和应答数据包
4,realserver的网关要指向DIP
5,能够实现端口映射
6,readlserver能够是任意操做系统
7,director极可能成为系统性能瓶颈网络
TUN架构的优缺点 架构
工做原理:这种方法经过ip隧道技术实现虚拟服务器。当用户请求到达director以后,director将请求报文的目标地址(即VIP)改为选定的realserver地址.而后,调度器采用ip隧道技术将用户请求发送到某个realserver,而这个realserver将直接相应用户的请求,再也不通过director。此外,对realserver的地域位置没有要求。和director在不在同一网段均可以。
特色:
1,realserver和director能够不在一个物理网络中,能够跨越互联网
2,RIP必定不能是私有地址(由于要用到隧道传输)
3,director仅处理入站请求
4,realserver的网关不能指向DIP
5,不支持端口映射
6,支持ip隧道功能的操做系统才能做为realserver负载均衡
DR架构的优缺点(生产环境用的最多) ide
工做原理:基于直接路由来实现。当用户请求到达director以后,director将请求报文的目标地址(即VIP)改为选定的realserver地址,还要改写请求报文的mac地址,将请求发送到指定mac的realserver,而realserver将响应直接返回给客户端,不通过director。这个方式是三种调度中性能最好的,也是咱们生产环境中使用最多的。
特色:
1,集群节点和director必须在一个物理网络内
2,RIP可使用公网地址或私有地址
3,director仅处理入站请求
4,集群节点网关不指向director,故出站不通过director
5,不支持端口映射
6,大多数操做系统能够做为realserver,要支持隔离arp广播
7,director服务器的压力比较小工具
实验环境:RHEL5.5
实验所需安装包:http安装包 位于光盘server目录内 ipvsadm-1.24-10.i386.rpm 位于光盘Cluster目录内
实验前的准备:建立5台机器 分别为ROUTER LVS RS1 RS2 client 所有关闭防火墙!!
实验拓扑图以下
如图 要实现客户机访问
客户机访问http服务时是经过LVS服务器由两台服务器提供服务,客户机访问时只须要输入一个虚拟出来的IP地址就能够访问到了
在client中IP配置以下:
客户机的做用只起到访问服务而且验证做用 因此不作过多配置
ROUTER IP配置以下:
eth0网卡IP配置
eth1网卡IP配置
其余配置:
echo 1 > /proc/sys/net/ipv4/ip_forward 开启网卡转发功能
LVS的IP配置
LVS的其余设置:
rpm -ivh /mnt/Cluster/ipvsadm-1.24-10.i386.rpm 安装包后就能够试用ipvsadm命令了
ifconfig eth0:1 192.168.19.250 开启一个虚拟网卡地址
ipvsadm -A -t 192.168.19.250:80 -s rr //详看 man ipvsadm
ipvsadm -a -t 192.168.19.250:80 -r 192.168.19.3 –g
ipvsadm -a -t 192.168.19.250:80 -r 192.168.19.4 –g
至此LVS配置完成
RS1的IP配置
RS1的其余配置
安装HTTP服务
rpm -ivh /mnt/Server/httpd-2.2.3-43.el5.i386.rpm
vim /var/www/html/index.html
i am rs1
保存退出
ifconfig lo:1 192.168.19.250 netmask 255.255.255.255 broadcast 192.168.19.255 up
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
经过设置arp_ignore使RS服务器忽略收到的ARP广播,使网络中虽然LVS和RS所有配置了VIP,可是客户端在使用ARP查找目标服务器时,只有LVS能回应ARP广播,RS沉默。
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
经过设置 arp_announce的值来决定RS处理完LVS转给它来自客户端的请求后数据包的封装。2是忽略源IP,只选择一个合理的源IP来封装,因此会忽略192.168.19.3这个本应该封装的eth0地址,而是将VIP封装为源地址(将受到的数据包的源和目标对换)。保证了数据包的合法性和有效性
RS2的IP配置
其余配置:
安装HTTP服务
rpm -ivh /mnt/Server/httpd-2.2.3-43.el5.i386.rpm
vim /var/www/html/index.html
i am rs2
保存退出
ifconfig lo:1 192.168.19.250 netmask 255.255.255.255 broadcast 192.168.19.255 up
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
至此,全部配置已经完成,用client测试效果
让咱们再看看LVS服务器上数据流向
关于LVS的算法有
1 rr算法,如上述实验所作,缺点是数据包的流向是平均分配的,不能作一些须要输入用户名和密码的网站,固然 hao123仍是能够用这种算法实现的,当群中有的机器性能好,有的性能坏,坏的扛不住
2 wrr基于权重的rr算法,缺点是新加的RS不会分担旧RS的负载。
如RS1 负载100
RS2 负载100
RS3(new) 1 RS3永远比旧RS少负担100
3 lc 最少连接新加入的RS会主动承担负载,lvs会将新的请求所有分给新RS,直到新RS的负载和旧的大体相等的时候在分发
4 wlc基于权重的lc
5 lblc 尽量让同一个访问分到同一个RS上,CDN经常使用,能够提升命中
6 sh 基于源IP的hash算法,保证同一个源IP的请求分到同一台RS上。主要用在会话链接中,如输入帐号密码,若是用rr,两次请求就会切换到不一样的RS上,就会须要从新输入帐号密码,除非用cookice。
dh基于目标IP的hash算法