当前位置:  技术问答>linux和unix

需要学习动态负载均衡.大家帮忙传授下.

    来源: 互联网  发布时间:2016-11-06

    本文导语:  大概情况是这样. 后台有多台分散的web服务器,需要一个统一的入口,这个统一的入口分发所有的http请求,将在这个统一的入口上做动态负载均衡,这台机器分发请求并回复.检测后台那些web服务器是否还能响应服务. 而这...

大概情况是这样.
后台有多台分散的web服务器,需要一个统一的入口,这个统一的入口分发所有的http请求,将在这个统一的入口上做动态负载均衡,这台机器分发请求并回复.检测后台那些web服务器是否还能响应服务.
而这个负载均衡需要一个免费的软件(硬件,或者收费软件暂不考虑,费用过高).

网络上搜索查询,初步了解了一下,大概软件实现负载均衡的方式有3种:
1.DNS:一个域名指向多个地址,通过刷新来取得空闲地址.(但是无法区分服务器)
2.代理服务器:一台服务器代理外部进来的数据,然后反向代理分配到内部服务器,每次代理都需要维护两个连接.
3.协议内部支持:(HTTP协议中的重定向能力)在HTTP请求和报头中有很多对负载平衡有用的信息,我们可以从这些信息中获知客户端所请求的URL和网页.

原理只能初步了解了,但是在软件方面的实现方式并不是非常清晰.
看到了一些文章关于Apache服务器的配置,实现不同内容进行分发,这样只能起到一个网络数据分流的作用.

所以直接去寻找对应的软件,
首先发现的是PCL,貌似是收费的.故暂不考虑.
然后就找到了LVS,貌似在linux上还是比较强大的,而且其论坛也比较健全.
然后其他的就是一些Enfuzion什么的.但是仍然非常迷茫.而且都是linux下的.


根据以上三种方式,大家能不能推荐下相关的不同操作系统windows,linux下的免费或者开源的软件,当然最好是每种方式都能来个软件推荐.
并且根据大家的经验,给点处理动态负载均衡的建议,以及各种方式之间的抉择.或者现在比较流行的处理方式.

|
利用集群技术实现Web服务器的负载均衡:LVS

集群和负载均衡的概念

  集群(Cluster)

  所谓集群是指一组独立的计算机系统构成的一个松耦合的多处理器系统,它们之间通过网络实现进程间的通信。应用程序可以通过网络共享内存进行消息传送,实现分布式计算机。

  负载均衡(Load Balance)

  网络的负载均衡是一种动态均衡技术,通过一些工具实时地分析数据包,掌握网络中的数据流量状况,把任务合理均衡地分配出去。这种技术基于现有网络结构,提供了一种扩展服务器带宽和增加服务器吞吐量的廉价有效的方法,加强了网络数据处理能力,提高了网络的灵活性和可用性。

  特点

  (1)高可靠性(HA)。利用集群管理软件,当主服务器故障时,备份服务器能够自动接管主服务器的工作,并及时切换过去,以实现对用户的不间断服务。

  (2)高性能计算(HP)。即充分利用集群中的每一台计算机的资源,实现复杂运算的并行处理,通常用于科学计算领域,比如基因分析、化学分析等。

 (3)负载平衡。即把负载压力根据某种算法合理分配到集群中的每一台计算机上,以减轻主服务器的压力,降低对主服务器的硬件和软件要求。

  LVS系统结构与特点

  1. Linux Virtual Server:简称LVS。是由中国一个Linux程序员章文嵩博士发起和领导的,基于Linux系统的服务器集群解决方案,其实现目标是创建一个具有良好的扩展性、高可靠性、高性能和高可用性的体系。许多商业的集群产品,比如RedHat的Piranha、 Turbo Linux公司的Turbo Cluster等,都是基于LVS的核心代码的。

  2. 体系结构:使用LVS架设的服务器集群系统从体系结构上看是透明的,最终用户只感觉到一个虚拟服务器。物理服务器之间可以通过高速的 LAN或分布在各地的WAN相连。最前端是负载均衡器,它负责将各种服务请求分发给后面的物理服务器,让整个集群表现得像一个服务于同一IP地址的虚拟服务器。

  3. LVS的三种模式工作原理和优缺点: Linux Virtual Server主要是在负载均衡器上实现的,负载均衡器是一台加了 LVS Patch的2.2.x版内核的Linux系统。LVS Patch可以通过重新编译内核的方法加入内核,也可以当作一个动态的模块插入现在的内核中。

  负载均衡器可以运行在以下三种模式下:

  (1)Virtual Server via NAT(VS-NAT):用地址翻译实现虚拟服务器。地址转换器有能被外界访问到的合法IP地址,它修改来自专有网络的流出包的地址。外界看起来包是来自地址转换器本身,当外界包送到转换器时,它能判断出应该将包送到内部网的哪个节点。优点是节省IP 地址,能对内部进行伪装;缺点是效率低,因为返回给请求方的流量经过转换器。

  (2)Virtual Server via IP Tunneling (VS-TUN):用IP隧道技术实现虚拟服务器。这种方式是在集群的节点不在同一个网段时可用的转发机制,是将IP包封装在其他网络流量中的方法。为了安全的考虑,应该使用隧道技术中的VPN,也可使用租用专线。 集群所能提供的服务是基于TCP/IP的Web服务、Mail服务、News服务、DNS服务、Proxy服务器等等.

  (3)Virtual Server via Direct Routing(VS-DR):用直接路由技术实现虚拟服务器。当参与集群的计算机和作为控制管理的计算机在同一个网段时可以用此法,控制管理的计算机接收到请求包时直接送到参与集群的节点。优点是返回给客户的流量不经过控制主机,速度快开销少。

  以四台服务器为例实现负载均衡:

  安装配置LVS

  1. 安装前准备:

  (1)首先说明,LVS并不要求集群中的服务器规格划一,相反,可以根据服务器的不同配置和负载状况,调整负载分配策略,充分利用集群环境中的每一台服务器。如下表:

  Srv Eth0 Eth0:0 Eth1 Eth1:0

  vs1 10.0.0.1 10.0.0.2 192.168.10.1 192.168.10.254

  vsbak 10.0.0.3 192.168.10.102

  real1 192.168.10.100

  real2 192.168.10.101

  其中,10.0.0.2是允许用户访问的IP。

  (2)这4台服务器中,vs1作为虚拟服务器(即负载平衡服务器),负责将用户的访问请求转发到集群内部的real1,real2,然后由real1,real2分别处理。 Client为客户端测试机器,可以为任意操作系统。

  (3)所有OS为redhat6.2,其中vs1 和vsbak 的核心是2.2.19, 而且patch过ipvs的包, 所有real server的Subnet mask 都是24位, vs1和vsbak 的10.0.0. 网段是24 位。

  2.理解LVS中的相关术语

  (1) ipvsadm :ipvsadm是LVS的一个用户界面。在负载均衡器上编译、安装ipvsadm。

  (2) 调度算法: LVS的负载均衡器有以下几种调度规则:Round-robin,简称rr;weighted Round-robin,简称wrr;每个新的连接被轮流指派到每个物理服务器。Least-connected,简称lc;weighted Least-connected,简称wlc,每个新的连接被分配到负担最小的服务器。

  (3) Persistent client connection,简称pcc,(持续的客户端连接,内核2.2.10版以后才支持)。所有来自同一个IP的客户端将一直连接到同一个物理服务器。超时时间被设置为360秒。Pcc是为https和cookie服务设置的。在这处调度规则下,第一次连接后,所有以后来自相同客户端的连接(包括来自其它端口)将会发送到相同的物理服务器。但这也会带来一个问题,因为大约有25%的Internet 可能具有相同的IP地址。

  (4) Persistent port connection调度算法:在内核2.2.12版以后,pcc功能已从一个调度算法(你可以选择不同的调度算法:rr、wrr、lc、wlc、 pcc)演变成为了一个开关选项(你可以让rr、 wrr、lc、wlc具备pcc的属性)。在设置时,如果你没有选择调度算法时,ipvsadm将默认为wlc算法。 在Persistent port connection(ppc)算法下,连接的指派是基于端口的,例如,来自相同终端的80端口与443端口的请求,将被分配到不同的物理服务器上。不幸的是,如果你需要在的网站上采用cookies时将出问题,因为http是使用80端口,然而cookies需要使用443端口,这种方法下,很可能会出现cookies不正常的情况。

  (5)Load Node Feature of Linux Director:让Load balancer 也可以处理users 请求。

  (6)IPVS connection synchronization。

  (7)ARP Problem of LVS/TUN and LVS/DR:这个问题只在LVS/DR,LVS/TUN 时存在。

|
回复太快!如果您是恶意刷楼,将会受到严厉惩罚!

郁闷!

3. 配置实例

  (1) 需要的软件包和包的安装:

  I. piranha-gui-0.4.12-2*.rpm (GUI接口cluster设定工具);

  II. piranha-0.4.12-2*.rpm;

  III. ipchains-1.3.9-6lp*.rpm (架设NAT)。

  取得套件或mount到光盘,进入RPMS目录进行安装:

  # rpm -Uvh piranha*

  # rpm -Uvh ipchains*

  (2) real server群:

  真正提供服务的server(如web server),在NAT形式下是以内部虚拟网域的形式,设定如同一般虚拟网域中Client端使用网域:192.168.10.0/24 架设方式同一般使用虚拟IP之局域网络。

  a. 设网卡IP

  real1 :192.168.10.100/24

  real2 :192.168.10.101/24

  b.每台server均将default gateway指向192.168.10.254。 192.168.10.254为该网域唯一对外之信道,设定在virtual server上,使该网域进出均需通过virtual server 。

  c.每台server均开启httpd功能供web server服务,可以在各real server上放置不同内容之网页,可由浏览器观察其对各real server读取网页的情形。

  d.每台server都开启rstatd、sshd、rwalld、ruser、rsh、rsync,并且从Vserver上面拿到相同的lvs.conf文件。

  (3) virtual server:

  作用在导引封包的对外主机,专职负责封包的转送,不提供服务,但因为在NAT型式下必须对进出封包进行改写,所以负担亦重。

  a.IP设置:

  对外eth0:IP:10.0.0.1 eth0:0 :10.0.0.2

  对内eth1:192.168.10.1 eth1:0 :192.168.10.254

  NAT形式下仅virtual server有真实IP,real server群则为透过virtual server.

  b.设定NAT功能

  # echo 1 >; /proc/sys/net/ipv4/ip_forward

  # echo 1 >; /proc/sys/net/ipv4/ip_always_defrag

  # ipchains -P forward MASQ

  c.设定piranha 进入X-window中 (也可以直接编辑/etc/lvs.cf )

  a).执行面板系统piranha

  b).设定“整体配置”(Global Settings) 主LVS服务器主机IP:10.0.0.2, 选定网络地址翻译(预设) NAT路径名称: 192.168.10.254, NAT 路径装置: eth1:0

  c).设定虚拟服务器(Virtual Servers) 添加编辑虚拟服务器部分:(Virtual Server)名称:(任意取名);应用:http;协议: tcp;连接:80;地址:10.0……0.2;装置:eth0:0; 重入时间:180 (预设);服务延时:10 (预设);加载监控工具:ruptime (预设);调度策略:Weighted least-connections; 持续性:0 (预设);持续性屏蔽: 255.255.255.255 (预设); 按下激活:实时服务器部分:(Real Servers);添加编辑:名字:(任意取名); 地址: 192.168.10.100; 权重:1 (预设) 按下激活

  另一架real server同上,地址:192.168.10.101。

  d). 控制/监控(Controls/Monitoring) 控制:piranha功能的激活与停止,上述内容设定完成后即可按开始键激活piranha.监控器:显示ipvsadm设定之routing table内容 可立即更新或定时更新。

  (4)备援主机的设定(HA)

  单一virtual server的cluster架构virtual server 负担较大,提供另一主机担任备援,可避免virtual server的故障而使对外服务工作终止;备份主机随时处于预备状态与virtual server相互侦测

  a.备份主机:

  eth0: IP 10.0.0.3

  eth1: IP 192.168.10.102 同样需安装piranha,ipvsadm,ipchains等套件

  b.开启NAT功能(同上面所述)。

  c.在virtual server(10.0.0.2)主机上设定。

  a).执行piranha冗余度 ;

  b).按下“激活冗余度”;

  冗余LVS服务器IP: 10.0.0.3;HEARTBEAT间隔(秒数): 2 (预设)

  假定在…秒后进入DEAD状态: 5 (预设); HEARTBEAT连接埠: 539 (预设)

  c).按下“套用”;

  d).至“控制/监控”页,按下“在当前执行层添加PULSE DEAMON” ,按下“开始”;

  e).在监控器按下“自动更新”,这样可由窗口中看到ipvsadm所设定的routing table,并且动态显示real server联机情形,若real server故障,该主机亦会从监视窗口中消失。

  d.激活备份主机之pulse daemon (执行# /etc/rc.d/init.d/pulse start)。

  至此,HA功能已经激活,备份主机及virtual server由pulse daemon定时相互探询,一但virtual server故障,备份主机立刻激活代替;至virtual server 正常上线后随即将工作交还virtual server。

  LVS测试

  经过了上面的配置步骤,现在可以测试LVS了,步骤如下:

  1. 分别在vs1,real1,real2上运行/etc/lvs/rc.lvs_dr。注意,real1,real2上面的/etc/lvs 目录是vs2输出的。如果您的NFS配置没有成功,也可以把vs1上/etc/lvs/rc.lvs_dr复制到real1,real2上,然后分别运行。确保real1,real2上面的apache已经启动并且允许telnet。

 2. 测试Telnet:从client运行telnet 10.0.0.2, 如果登录后看到如下输出就说明集群已经开始工作了:(假设以guest用户身份登录)

  [guest@real1 guest]$——说明已经登录到服务器real1上。

  再开启一个telnet窗口,登录后会发现系统提示变为:

  [guest@real2 guest]$——说明已经登录到服务器real2上。

  3. 测试http:从client运行iexplore http://10.0.0.2

  因为在real1 和real2 上面的测试页不同,所以登录几次之后,显示出的页面也会有所不同,这样说明real server 已经在正常工作了。




文中举例是老了点,只要对你有用就好了




软件解决方案缺点也较多,因为每台服务器上安装额外的软件运行会消耗系统不定量的资源,越是功能强大的模块,消耗得越多,所以当连接请求特别大的时候,软件本身会成为服务器工作成败的一个关键;软件可扩展性并不是很好,受到操作系统的限制;由于操作系统本身的Bug,往往会引起安全问题。
  
    硬件负载均衡解决方案是直接在服务器和外部网络间安装负载均衡设备,这种设备我们通常称之为负载均衡器,由于专门的设备完成专门的任务,独立于操作系统,整体性能得到大量提高,加上多样化的负载均衡策略,智能化的流量管理,可达到最佳的负载均衡需求。
  
    负载均衡器有多种多样的形式,除了作为独立意义上的负载均衡器外,有些负载均衡器集成在交换设备中,置于服务器与Internet链接之间,有些则以两块网络适配器将这一功能集成到PC中,一块连接到Internet上,一块连接到后端服务器群的内部网络上。
  
    一般而言,硬件负载均衡在功能、性能上优于软件方式,不过成本昂贵。 

|
以前了解过apacke+jk+tomcat搞的负载均衡,

关注中ing........

|
Apache就可以做负载均衡啊,通过配置不同的worker就行了。

参考我的文章,我亲自测试过的。tomcat自己也提供了集群的支持
Apache+Tomcat负载均衡和集群的尝试

|


可以根据自己的网络环境进行调配

|
Apache可以做负载均衡,tomcat做集群的要考虑SESSION复制.

|
session复制问题其实没有想像中那么重要。

普通应用系统用apache做个分流就足够了。

|
可以看一下squid的资料

|
轻量级的负载均衡软件用pound比较好,甚至更小巧的pen。
对于squid的负载均衡也可以研究一下,确实比较强大。

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请网通的朋友,和沈阳的朋友进,有个兄弟需要帮忙!
  • 我需要朋友们的帮忙
  • 那里能下载或者买到kylix,如果购买需要多少钱?急,请帮忙.
  • 需要精度达到1~2ms的延时,请大家帮忙
  • 有没有需要在国庆节期间帮忙做网管、系统维护工作的?
  • [各位大侠帮忙]编写脚本,在sqlplus中实现一个功能,需要交互,如何自动实现,详见正文
  • 我没有玩过linux,但现在有一个bat文件需要转换为sh文件,恳请各位高手帮忙!(在线等待)
  • 关于B/S结构的客户端打印的问题,求教各位 各位大虾,我用servlet和jsp作了一套b/s的系统,现在客户端需要打印,怎样才能实现?帮帮忙啊,小弟再此先谢过了!
  • 需要一些资料,请大家帮忙,有分拿~
  • webMail 帮忙测试,谢谢(需要源代码的给我发email)
  • 一朋友需要mobileset3 (for jbuilder),我开贴子联系他!(希望大家帮忙up, 都有分,多谢了)谢谢大家!!!
  • 高分急求:UNIX环境下查找字符串的问题 (给出文件路径,和需要查找的字符串)工作急需,恳求各位高手帮忙!!!!
  • LINUX的服务器, 需要一个懂PHP和服务器的高手帮忙
  • win7, win8安装docker需要了解的概念
  • 请问装完JBuilder后要做JSP还需要什么配置?需要Apache?
  • PHP编程需要注意地方总结
  • asp需要服务器装iis,那jasp服务端需要装什么软件?
  • 软件项目版本控制需要注意的几点
  • 运行JSP、SERVLET需要那些配置?需要如何设置?请各位指点。
  • Android开发需要的几点注意事项总结
  • 请问如果要按自己需要修改linux内核源代码需要那些准备知识
  • OpenStack中compute介绍和compute实例需要注意的问题
  • 弱弱的问题^_^在VA中怎么编译调试Servlet程序啊?需要安装什么环境?除了VA还需要什么
  • memset分配的空间用完以后需要进行释放吗? 如果需要释放,怎么释放呢? ---阿菜
  • 基于c中使用ftruncate()前需要fflush(),使用后需要rewind()的深入探讨
  • 现在在嵌入式系统中需要使用iconv系列函数,都需要用到什么库(.so)
  • spec中打patch是否需要按顺序
  • 这个程序需要在哪些方面做个修改
  • sql语法中什么类型的值需要用单引号‘’修饰?
  • 交换式以网需要CSMA/CD吗?
  • 我刚装好,是不是需要配制环境变量?求教。


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3