本站点中止更新,请访问:blog.coocap.comhtml
不了解负载均衡高可用的童鞋,强烈建议先看keepalived+nginx高可用负载均衡:java
传送门(求粉):http://www.cnblogs.com/mrlinfeng/p/6146866.htmlnode
lvs不过多介绍,能看到这里的应该都了解了。linux
先介绍环境和各个服务器角色:</br> 这里统一使用的是linux centOS6.5 32位系统,内核版本:2.6.32-431.el6.i686 lvs服务器称为DirectorServer,简称DS,主机为DS-Master,ip为192.168.200.129,备机为DS-Slave,ip为192.168.200.130 </br> 后端真实服务器称为RealServer,简称RS,各有一台tomcat web服务器,ip为192.168.200.128,192.168.200.131 </br> 虚拟IP(Virtual IP 简称VIP)为192.168.200.88nginx
最终架构图: web
ok,如今开始干活。算法
搭建RS环境
这个太简单,没压力,搞两个linux虚拟机嘛,而后装java嘛,而后上传tomcat解压嘛,搞一个web项目jsp页面嘛,发布访问以下便可:apache
固然,还有一个131的同样,不说了后端
搭建DS环境
-
首先两台DS须要安装LVS,包括两部分,IPVS模块和IPVSadm管理模块。tomcat
-
IPVS模块在linux内核2.6及以上已经有了不须要安装,查看linux内核版本的命令是:
uname -a
</br> 若是你的linux版本在2.6以上,那么是已经安装IPVS的,若是不是2.6版本以上的,那就本身安装吧,固然建议是安装更新的linux了,由于我不知道怎么安装IPVS模块。。。。。</br> 经过这个命令能够查看IPVS是否安装:
modprobe -l | grep ipvs
</br> 如图,说明是有IPVS模块的</br> -
安装IPVSadm管理模块,使用yum命令:
yum -y install ipvsadm
</br> 安装完后使用--help命令检查是否安装成功:ipvsadm --help
</br> 出现以下图一大波的各类用法及说明安装成功</br> -
安装完lvs以后,两台DS安装keepalived(这个在文章开头传送门处的教程中有详细keepalived安装方法)</br> 下载如下两个rpm包,区分32位64位,64位的去下载64位的包</br> keepalived-1.2.13-5.el6_6.i686.rpm</br> openssl-1.0.1e-30.el6.8.i686.rpm</br> 注意:openssl包要求必须是openssl-1.0.1e或以上才行</br> 将rpm包上传到两台DS,进入上传的目录,而后运行如下命令安装</br>
rpm –Uvh --nodeps ./openssl-1.0.1e-30.el6.8.i686.rpm
</br>rpm –Uvh --nodeps ./keepalived-1.2.13-5.el6_6.i686.rpm
</br> 安装完毕,在/etc/keepalived/目录下有个文件 keepalived.conf便是本台服务器keepalived的核心配置文件了: -
配置keepalived</br> 这里须要配置DS-Master的keepalived.conf和DS-Slave的keepalived.conf</br> 编辑器里很差贴配置文件,在keepalived配置文件夹中有两个配置并有说明。</br> 截个图吧:</br> 这是DS-Master配置(看配置说明):
这是DS-Slave配置,基本同样,红色圈出部分不同:
-
配置完成keepalived以后检查:</br> 启动两台keepalived,启动keepalived服务命令:
keepalived service start
</br> 查看绑定虚拟IP:ip addr
</br> 如图所示,主机eth0网卡绑定VIP192.168.200.88,此时备机没有绑定,假设主机中止keepalived,那么备机就会立刻绑定VIP,自行验证便可</br></br> 至此,咱们keepalived搭建完成,DS环境搭建完毕。
配置RS
在两台RS上选择一个目录(我是在/sbin/),建立脚本realserver.sh以下(两台同样),注意红色圈出处修改成本身的VIP:
固然,建立完后记得给执行权限:chmod a+x /sbin/realserver.sh
而后,运行两台RS的tomcat,而且执行两台RS的realserver.sh脚本:/sbin/realserver.sh start
</br>
如今访问VIP便可访问到项目了。
测试
-
高可用的测试</br> 中止DS-Master即主机lvs的keepalived服务,能够看到VIP会绑定在备机上,而后启动主机keepalived服务,VIP又会绑回到主机上,这个测试简单,本身测一下便可。
-
负载均衡测试</br> 玩过nginx的都知道,若是是使用其默认的轮询机制的话,刷新一下页面,就会变换一下被轮询的RS服务器,即刷新页面会在128和131之间来回切换,可是lvs不会,他会在必定时间内进行切换。这里我也是郁闷了好久。一开始我觉得是配置文件中persistence_timeout这个参数的缘由,固然这里设置的话确实会影响,他会保证在必定时间内同一IP的链接被分配到同一台RS上,可是我注释以后仍是在必定时间内在一台服务器上。这多是lvs本身的机制吧,也没有找到缘由。</br> 这里测试负载均衡的话我是用了一个测试工具:apache-jmeter</br> 运行bin目录下的jmeter.bat,而后简述一下测试过程,我也是现学了一下,模拟测试一下web访问。
jmeter界面以下,新建一个线程组
而后线程数输入个100,循环次数输入个100,这应该是模拟100并发访问,且永远循环一直访问(固然tomcat会受不了内存溢出的,这里是为了说明lvs能把全部请求都轮询到两个tomcat上,因此请无视,或者能够线程数为100,循环次数为2,请求间隔设置长一点时间如100进行观察)
而后新建HTTP请求
界面按以下填写
而后,运行,启动
这时再看lvs负载状况,在DS主机上使用命令:
ipvsadm -l --stats
</br> 获得以下所示图此时VIP88负载RS128和131,能够看到访问数是同样的都是343
DS备机上查看结果为
由于没有通过备机lvs进行负载,因此没有链接数都为0
主机再次查看
屡次查看会发如今这两台RS之间的访问数要么相同,要么相差1,这是符合RR轮询算法的,负载均衡并无问题。
这时咱们再把主机keepalived停掉,那么备机lvs会接管,页面上仍然能够访问虚拟IP到两个RS服务器。主机停掉以后,ipvsadm -l --stats查看发现链接数再也不增长,而此时备机使用该命令查看发现由0开始进行负载,说明lvs服务器切换成功,一段时间后再把主机keepalived重启,发现备机链接数不动了,而主机又开始增长。。。
说明这个高可用与负载均衡搭建没有问题。
lvs负载均衡算法和机制补充(网上资料)
这块很核心,建议多学习一下</br> 轮询算法</br> 1.轮询调度</br> 调度器经过外部请求的顺序轮流的分配到集群中的真实服务器上,对每台服务器都是均等的。可是这样调度器不会考虑服务器上实际的链接数和系统负载,致使服务器处理请求慢,系统负载增大。</br> 2.加权轮叫</br> 调度器经过一个算法根据真实服务器的不一样处理能力来分配访问请求,这样能够保证服务器的处理能力。</br> 3.最少链接</br> 调度器将访问请求自动的分配到已创建链接最少的服务器上,若是在集群中每台服务器的性能差很少的话,则这种算法能够较好的均衡负载。</br> 4.加权最少链接</br> 主要用于集群中服务器性能差别大的状况下,调度器能够优化负载性能,具备较高权值的服务器能够将承受较大的活动链接。</br> 5.基于局部性的最少链接</br> 主要是针对目标IP地址的负载均衡,将请求的目标IP地址找到离其最近的服务器进行使用,若是服务器不存在或者满载的话,就会继续寻找下一个服务器。</br> 6.带复制的基于局部性的最少链接</br> 主要是针对目标IP地址的负载均衡,根据请求的目标IP地址找出该地址所对应的服务器,若是服务器不存在或者满载的话,就会继续寻找下一个服务器。当服务器有一段时间没有被修改,则会从最忙的服务器组中删除。</br> 7.目标地址散列</br> 根据请求的目标IP地址从静态分配的散列表中超出对应的服务器,若是找到可用的服务器且没有满载,则返回空。</br> 8.源地址散列</br> 根据请求的源IP地址从静态分配的散列表中超出对应的服务器,若是找到可用的服务器且没有满载,则返回空。</br>
简单介绍一下,超详细介绍看这里: http://www.linuxvirtualserver.org/zh/lvs4.html
lvs工做机制</br> 1.DR机制 <网上找的图,懒得画了>
请求由 LVS 接受,由真实提供服务的服务器(RealServer, RS)直接返回给用户,返回的时候不通过 LVS。 DR 模式下须要 LVS 和绑定同一个 VIP(RS 经过将 VIP 绑定在 loopback 实现)。 一个请求过来时,LVS 只须要将网络帧的 MAC 地址修改成某一台 RS 的 MAC,该包就会被转发到相应的 RS 处理,注意此时的源 IP 和目标 IP 都没变,LVS 只是作了一下移花接木。 RS 收到 LVS 转发来的包,链路层发现 MAC 是本身的,到上面的网络层,发现 IP 也是本身的,因而这个包被合法地接受,RS 感知不到前面有 LVS 的存在。 而当 RS 返回响应时,只要直接向源 IP(即用户的 IP)返回便可,再也不通过 LVS。 DR 模式是性能最好的一种模式。但因其是修改MAC的,因此没法作端口映射,因此这里在配置keepalived时VIP端口与RS端口必须一致(这里搞死我了,一开始端口不同,老出不来)
2.NAT机制
NAT(Network Address Translation)是一种外网和内网地址映射的技术。 NAT 模式下,网络报的进出都要通过 LVS 的处理。LVS 须要做为 RS 的网关。 当包到达 LVS 时,LVS 作目标地址转换(DNAT),将目标 IP 改成 RS 的 IP。RS 接收到包之后,仿佛是客户端直接发给它的同样。 RS 处理完,返回响应时,源 IP 是 RS IP,目标 IP 是客户端的 IP。 这时 RS 的包经过网关(LVS)中转,LVS 会作源地址转换(SNAT),将包的源地址改成 VIP,这样,这个包对客户端看起来就仿佛是 LVS 直接返回给它的。客户端没法感知到后端 RS 的存在。
3.FULL-NAT机制
不管是 DR 仍是 NAT 模式,不可避免的都有一个问题:LVS 和 RS 必须在同一个 VLAN 下,不然 LVS 没法做为 RS 的网关。 这引起的两个问题是: 一、同一个 VLAN 的限制致使运维不方便,跨 VLAN 的 RS 没法接入。 二、LVS 的水平扩展受到制约。当 RS 水平扩容时,总有一天其上的单点 LVS 会成为瓶颈。 Full-NAT 由此而生,解决的是 LVS 和 RS 跨 VLAN 的问题,而跨 VLAN 问题解决后,LVS 和 RS 再也不存在 VLAN 上的从属关系,能够作到多个 LVS 对应多个 RS,解决水平扩容的问题。 Full-NAT 相比 NAT 的主要改进是,在 SNAT/DNAT 的基础上,加上另外一种转换,转换过程以下:
在包从 LVS 转到 RS 的过程当中,源地址从客户端 IP 被替换成了 LVS 的内网 IP。 内网 IP 之间能够经过多个交换机跨 VLAN 通讯。 当 RS 处理完接受到的包,返回时,会将这个包返回给 LVS 的内网 IP,这一步也不受限于 VLAN。 LVS 收到包后,在 NAT 模式修改源地址的基础上,再把 RS 发来的包中的目标地址从 LVS 内网 IP 改成客户端的 IP。 Full-NAT 主要的思想是把网关和其下机器的通讯,改成了普通的网络通讯,从而解决了跨 VLAN 的问题。采用这种方式,LVS 和 RS 的部署在 VLAN 上将再也不有任何限制,大大提升了运维部署的便利性。
4.TUN机制
采用NAT模式时,因为请求和响应的报文必须经过调度器地址重写,当客户请求愈来愈多时,调度器处理能力将成为瓶颈。为了解决这个问题,调度器把请求的报文经过IP隧道转发到真实的服务器。真实的服务器将响应处理后的数据直接返回给客户端。这样调度器就只处理请求入站报文,因为通常网络服务应答数据比请求报文大不少,采用VS/TUN模式后,集群系统的最大吞吐量能够提升10倍。
VS/TUN的工做流程图以下所示,它和NAT模式不一样的是,它在LB和RS之间的传输不用改写IP地址。而是把客户请求包封装在一个IP tunnel里面,而后发送给RS节点服务器,节点服务器接收到以后解开IP tunnel后,进行响应处理。而且直接把包经过本身的外网地址发送给客户不用通过LB服务器。
原理图过程简述:
-
客户请求数据包,目标地址VIP发送到LB上。
-
LB接收到客户请求包,进行IP Tunnel封装。即在原有的包头加上IP Tunnel的包头。而后发送出去。
-
RS节点服务器根据IP Tunnel包头信息(此时就又一种逻辑上的隐形隧道,只有LB和RS之间懂)收到请求包,而后解开IP Tunnel包头信息,获得客户的请求包并进行响应处理。
-
响应处理完毕以后,RS服务器使用本身的出公网的线路,将这个响应数据包发送给客户端。
lvs与nginx比较
这一块建议看一下,网上查询便可。
四层与七层负载均衡
四层负载均衡:</br> 经过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器与请求客户端创建TCP链接,而后发送Client请求的数据。</br>
七层负载均衡:</br> 也称内容交换,也就是主要经过报文中的真正有意义的应用层内容,再加上负载均衡设备设置的服务器选择方式,决定最终选择的服务器。
由上图可知: 在四层负载设备中,把client发送的报文目标地址(原来是负载均衡设备的IP地址),根据均衡设备设置(lvs的不一样负载均衡机制)的选择web服务器的规则选择对应的web服务器IP地址,这样client就能够直接跟此服务器创建TCP链接并发送数据。
七层负载均衡服务器起了一个代理服务器的做用,咱们知道创建一次TCP链接要三次握手;而client要访问webserver要先与七层负载设备进行三次握手后创建TCP链接,把要访问的报文信息发送给七层负载均衡;而后七层负载均衡再根据设置的均衡规则选择特定的webserver,而后经过三次握手与此台webserver创建TCP链接,而后webserver把须要的数据发送给七层负载均衡设备,负载均衡设备再把数据发送给client;因此,七层负载均衡设备起到了代理服务器的做用。
本站点中止更新,请访问:blog.coocap.com
学习参考资料连接
http://blog.csdn.net/ioy84737634/article/details/44916241
http://blog.csdn.net/zwz1984/article/details/45194377
http://www.jizhuomi.com/software/351.html
http://www.aixchina.net/Article/39457
http://lovelace.blog.51cto.com/1028430/1550188
本站点中止更新,请访问:blog.coocap.com