web负载均衡[转]

1,jboss

前面我们对Jboss的负载均衡的安装和基本知识进行了叙述,想必大家已经把程序安装好了。那么现在来介绍一下配置的具体内容。首先我们来看一下 JBOSS实现负载均衡的方案。包括和其他软件的绑定使用,以及自带负载均衡模块的使用这两种方案。那么现在让我们从下文中具体了解一下。

  负载均衡

  Jboss的负载均衡目前有两种方案,一是使用apache的mod_jk,二是使用jboss自带的负载均衡模块。下面分别讲解这两种配置。

  mod_jk的配置

  (1)、请确认%apache%\modules下已经有mod_jk-1.2.25-httpd-2.2.4.so文件。

  (2)、修改%apache%\conf\httpd.conf在文件末尾添加:Include conf/mod_jk2.conf

  (3)、在%apache%\conf下新建文件mod_jk2.conf文件内容如下:

以下是引用片段:
# Load mod_jk module. Specify the filename 
  # of the mod_jk lib you've downloaded and  
 # installed in the previous section 
  LoadModule jk_module modules/mod_jk-1.2.25-httpd-2.2.4.so 
  # Where to find workers.properties 
  JkWorkersFile conf/workers2.properties  
 # Where to put jk logs  JkLogFile logs/mod_jk.log   
# Set the jk log level [debug/error/info]  JkLogLevel info  
 # Select the log format  JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "   
# JkOptions indicate to send SSL KEY SIZE,  JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories   
# JkRequestLogFormat set the request format 
  JkRequestLogFormat "%w %V %T"  JkMount  
/* loadbalancer 其中JkMount  
/* loadbalancer的意思是,把所有的请求都发给loadbalancer处理。可以通过修改url来控制发送某些request。 

  (4)、在%apache%\conf下新建文件workers2.properties其内容为:

以下是引用片段:
worker.list=loadbalancer,server1,server2 
# Define the first node... 
  worker.server1.port=8009 worker.server1.host=192.168.0.1  
 worker.server1.type=ajp13 worker.server1.lbfactor=1 
  worker.server1.local_worker=1  worker.server1.cachesize=10   
# Define the first node...   
worker.server2.port=8009 worker.server2.host=192.168.0.2 
  worker.server2.type=ajp13 worker.server2.lbfactor=1 worker.server2.local_worker=1 worker.server2.cachesize=10   
# Now we define the load-balancing behaviour 
  worker.loadbalancer.type=lb worker.loadbalancer.balance_workers=server1,server2   
worker.loadbalancer.sticky_session=1 

   其中对于node的命名规则是worker.节点名.xxxx。所以上述文件定义了两个节点:server1和server2。8009端口是 jboss默认的ajp端口,另外需要注意的是worker.server2.lbfactor参数,它是节点的负载加权,它的值越大,获得负载的机会就 越大。可以根据node的硬件性能进行调整。worker.loadbalancer.sticky_session参数是指定是否使用粘性 session。所有需要负载均衡的节点,都必须在worker.loadbalancer.balanced_workers参数中列举出来。请记住所 有node的名称和它对应着哪台机器,后面的配置中会使用。尝试启动apache:%apache\bin\apache.exe,正常情况下没有任何提 示。如果你使用的jk是2.0的,那么配置文件的写法完全不同,由于mod_jk2已经停止开发,所以apache并没有提供任何讲解,对于配置文件的编 写也没有任何指导。 

  (5)Jboss自带均衡器的配置

  将文件 夹%jboss%\docs\examples\varia\loadbalancer\loadbalancer.sar拷贝到%jboss% \server\all\deploy下,并且修改loadbalancer.sar\loadbalancer.sar\META-INF \jboss-service.xml,在<host>标签中类出所有节点,在<sticky-session>标签中指定是否 使用粘性session。配置完成。该均衡器的缺点是负载能力相对不高,配置参数太少,比如无法指定不同节点的负载加权,所以后面都以mod_jk为例, 不再讲解jboss自带的负载均衡器的内容。负载均衡的配置基本完成,启动jboss,其中过程中会列出DefaultPatition中所有的节 点:run.bat -c all。任何节点的关闭与启动都会在cluster中广播,比如加如一个新节点后,其他节点会得到以下提示:

  (6)、Jboss负载均衡的session sticky配置

   apache应该会以粘性session的方式分发请求。部署一个应用测试一下,你会发现粘性session没有起作用。因为我们还没有给jboss配 置jvm路由( jvmRoute),apache就无法知道究竟哪些session是属于哪个节点的。我们继续往下:

  修改server1机器上的jboss的配置文件:%jboss%\server\default\deploy\jboss-web.deployer\ META-INF\ jboss-service.xml

  在110行有:<attribute name="UseJK">false</attribute>,将它改为true。值得注意的是在这行标签上面有一段注释,要求你在server.xml中必须有:

以下是引用片段:
Engine name="jboss.web" jmvRoute="Node1" defaultHost="localhost"

  请注意这里有一个气死人不偿命的小bug,jboss的官方文档把 jvmRoute写成了jmvRoute,就是v和m两个字母的颠倒让我郁闷了三天,翻遍了jboss.com和theserverside.com。都是直接拷贝的错,吐血吐到脱水啊。

  下面需要修改server1上的%jboss%\server\default\deploy\jboss-web.deployer\ server.xml,在32行左右有:

以下是引用片段:
<Engine name="jboss.web" defaultHost="localhost">

  给它增加一个jvmRoute属性:

以下是引用片段:
<Engine name="jboss.web" defaultHost="localhost" jvmRoute="server1">

   请注意,jvmRoute的值必须和mod_jk中的节点名字正确对应,否则无法正确路由。Cluster中的所有节点都应该做相应的配置。Jboss 的配置完成了,下面需要在你的web应用中修改配置文件,让它支持集群。在WEB-INF\web.xml中加入属 性:<distributable/>Ok,基于用户的cluster完成了,每个用户会绑定都某个节点上进行交互。这种绑定是如何完成的 呢?原来apache把客户分发到节点后,该节点会在用户的session id后面加上此节点的路由名称,变成这个样子:

以下是引用片段:
Efdfxxd98daja87daj76da2dka**,server1

  有了这个标志,就能分辨该session属于哪个节点。 

  (7)、session replication配置

   下面要做的是基于request的cluster,也就让各个节点之间互相复制session状态。有两种复制模式,同步与异步。使用同步的方 式,jboss会把session复制的操作和对request的响应放到一个应用事务(application  transaction),session复制完成后才去处理request。异步复制则发送session复制的消息后马上处理 request,session复制则会稍有延迟。但是在多框架的web页面中,这样的集群方式会有问题。由于frame在同一时间发出多个 request,会造成一些混乱,这也是采用基于用户的集群方式的原因之一。JBoss 4.0.2中采用了Jboss  cache来实现session复制,实际上就是一个分布式缓存,由于session id中包含了jvm  route,所以能够分辨session属于哪个节点。Session的更新类似于hibernate中的乐观锁,有了更新之后就让session的版本 号增加,其他节点通过对比版本号来决定是否同步session状态。

  配置session replication首先需要编辑

   %jboss% server\all\deploy\jbossweb-tomcat55.sar\META-INF\  jboss-service.xml,88行左右有:  <attribute  name="SnapshotMode">instant</attribute>  这就是刚才提到的复制模式,instant为立即复制,如果设为interval  那么系统会在延迟一段时间再进行复制,时间长度在<attribute  name="SnapshotInterval">2000</attribute>中指定,单位是毫秒。单独配置这一个地方还不够, 在%jboss% server\all\deploy\ tc5-cluster-service.xml中有:<attribute  name="CacheMode">REPL_ASYNC</attribute>

  这里才真正决定复制是同步的还是异步的,可以指定为REPL_ASYNC(异步)或者REPL_SYNC(同步)。

   之后Jboss负载均衡的配置在这个文件下面一点,还有一个config标签,里面指定了各个节点在进行session复制的时候如何通信,有udp和 tcp两种可选,如果使用udp方式,那么应该将udp的lookback属性指定为true,因为windows上有一个叫做media  sense的东西会影响udp multicast。注意如果你不了解multi  address的ip规则,请不要随便修改mcast_addr的值。如果采用tcp方式的话,应该指定bind_addr的值为本机ip,并且在 TCPPING标签的initial_hosts属性中列出所有节点,格式是"机器名[端口号]",比如在我们的例子中,就应该这样配置tcp(以其中一 个节点为例):

以下是引用片段:
<config>  
<TCP bind_addr="172.16.0.116" start_port="7810" loopback="true"/>  
<TCPPING initial_hosts="172.16.0.116[7810],172.16.32.88[7810]" port_range="3" timeout="3500" num_initial_members="3" up_thread="true" down_thread="true"/>  
 <MERGE2 min_interval="5000" max_interval="10000"/> 
 <FD shun="true" timeout="2500" max_tries="5" up_thread="true" down_thread="true" /> 
 <VERIFY_SUSPECT timeout="1500" down_thread="false" up_thread="false" /> 
 <pbcast.NAKACK down_thread="true" up_thread="true" gc_lag="100"  retransmit_timeout="3000"/> 
 <pbcast.STABLE desired_avg_gossip="20000" down_thread="false" up_thread="false" /> 
 <pbcast.GMS join_timeout="5000" join_retry_timeout="2000" shun="false" print_local_addr="true" down_thread="true" up_thread="true"/> <pbcast.STATE_TRANSFER up_thread="true" down_thread="true"/>  
 </config> 

  JBoss的 clustering版主建议尽量使用udp。不过在Sobey内部,建议使用tcp方式,经测试可能有不明物体在影响udp通信,导致Timeout异 常。在%jboss%\ server\all\deploy\  cluster-service.xml中也有关于udp和tcp的配置信息,在4.0以前版本的jboss中,会以这个文件为主配置,4.0以后都以 tc5-cluster-service.xml为主配置。

  Jboss的配置完成了,最后需要在web应用中增加配置信息,控制session复制的粒度。在WEB-INF\jboss-web.xml中增加以下内容:

以下是引用片段:
<replication-config> 
 <replication-trigger>SET_AND_NON_PRIMITIVE_GET</replication-trigger> 
 <replication-granularity>SESSION</replication-granularity> 
 </replication-config> 

  其中replication-trigger是指定哪些操作引发session的版本更新,它的取值有:

   SET_AND_GET    SET_AND_NON_PRIMITIVE_GET  SET  replication-granularity是复制粒度,可以取session或attribute。如果取为attribute有可能导致复制失 败,这是目前版本的jboss cache的一个bug,等待修正。

  部署项目,测试,如果配置没有问题,可以 在%jboss%\0server\all\log\server.log中发现类似于这样的信息:  DEBUG  [org.jboss.web.tomcat.tc5.session.JBossCacheManager] check to see if  needs to store and replicate session with id  Im9-qpuaXppMS+xXwE3M+Q**.server1

  DEBUG  [org.jboss.web.tomcat.tc5.session.ClusteredSession]  processSessionRepl(): session is dirty. Will increment version from: 20  and replicate.

  在Jboss负载均衡中Session replication配置的成功率比较低,情况也很复杂,请仔细操作。


2,tomcat

前题准备:

至少2个tomcat、1个apache、 mod_jk(如果apache的module中有,就不用去官网下了)

端口配置

apache端口 8889(该死的80屏蔽了半天,停了几个都busy,直接改掉80端口)

tomcat1   SHUTDOWN:8085   ip:8080   ajp:8009

tomcat2   SHUTDOWN:8285   ip:8280   ajp:8209

 

实行步骤

1在apache的conf中 建立 workers.properties 配置文件,内容如下

worker.list = controller,tomcat1,tomcat2  #server 列表
#========tomcat1========
worker.tomcat1.port=8009         
#ajp13 端口号,在tomcat下server.xml配置,默认8009
worker.tomcat1.host=localhost  
#tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor =   
#server的加权比重,值越高,分得的请求越多

#========tomcat2========
worker.tomcat2.port=8209     
#ajp13 端口号,在tomcat下server.xml配置,默认8009
worker.tomcat2.host=localhost  
#tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor = 

#server的加权比重,值越高,分得的请求越多
#========controller,负载均衡控制器========
worker.controller.type=lb
worker.controller.balanced_workers=tomcat1,tomcat2   #指定分担请求的tomcat
worker.controller.sticky_session=1

 

2.在apache的conf中 建立  mod_jk.conf 配置文件

内容如下:

#加载mod_jk Module(这里因为我安装的apache中的module下已经有mod_jk了
LoadModulejk_module modules/mod_jk.so

#指定 workers.properties文件路径
JkWorkersFile conf/workers.properties
#指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器
JkMount /*.jsp controller

 

3在apache中的conf中httpd.conf配置文件最后导入mod_jd.conf配置文件,

内容如下

Include conf/mod_jk.conf

 

整个负载配置完成,变动的主要是apache下面的3个配置文件,有2个是新增的

 
 

 测试

我在2个tomcat的root下都弄了个1.jsp

<%
 System.out.println("++++++++++++++++++++=");
%>

启动2个tomact

访问apache整合的地址http://127.0.0.1:8889/1.jsp(因为我把一直busy的80端口改为8889了)

多访问几次看tomact运行如下

 

可以看出2个tomact都均衡运行

这里只是在win7下模拟,正常情况下,一般是在linux环境下,同理把只是要下载linux下的mo_jk.so,tar.gz包,安装肯定也要安装linux下的apache,等下次弄个linux环境再测试下

3,was

1、F5组网规划
(1)组网拓朴图(具体到网络设备物理端口的分配和连接,服务器网卡的分配与连接)
(2)IP地址的分配(具体到网络设备和服务器网卡的IP地址的分配)
(3)F5上业务的VIP、成员池、节点、负载均衡算法、策略保持方法的确定
2、F5配置前的准备工作
(1)版本检查
f5-portal-1:~# b version 
Kernel:
BIG-IP Kernel 4.5PTF-07 Build18 
(2)时间检查--如不正确,请到单用户模式下进行修改
f5-portal-1:~# date
Thu May 20 15:05:10 CST 2004 
(3)申请license--现场用的F5都需要自己到F5网站上申请license
3、F5 的通用配置
(1)在安全要求允许的情况下,在setup菜单中可以打开telnet及ftp功能,便于以后方便维护
(2)配置vlan unique_mac选项,此选项是保证F5上不同的vlan 的MAC地址不一样。在缺省情况下,F5的各个vlan的MAC地址是一样的,建议在配置时,把此项统一选择上。可用命令ifconfig –a来较验 
具体是system/Advanced Properties/vlan unique_mac
(3) 配置snat  any_ip选项选项,此选项为了保证内网的机器做了snat后,可以对ping的数据流作转换。Ping是第三层的数据包,缺省情况下F5是不对 ping的数据包作转换,也就是internal vlan的主机无法ping external  vlan的机器。(注意:还可以采用telnet来验证。) 
具体是system/Advanced Properties/snat any_ip
4、F5 的初始化配置
建议在对F5进行初始时都用命令行方式来进行初始化(用Web页面初始化的方式有时会有问题)。登录到命令行上,运行config或setup命令可以进行初始化配置。初次运行时会提示一些license的信息。
default:~# config 
5、F5双机切换监控配置(有F5双机时需要)
(1)在web页面中选择相应的vlan,在arm failsafe选择则可。Timeout为从F5收不到包的时间起,经过多长时间就发生切换。此配置不能同步,需要在F5的主备机上同时配置。每个vlan都可以配置vlan arm failsafe。
具体在Network下
(2)在web页面中选择system,在redundant properties中把gateway failsafe选择则可。Router是需要监控的地址。此配置不能同步,需要在F5的主备机上同时配置。一套F5上只能配置一个gateway failsafe
具体在system/redundant properties/gateway failsafe
6、F5 MAC masquerade配置
Mac Masquerading是F5的Shared IP Address (Floating)的MAC地址,F5如果不配置此项,则shared IP Address的MAC地址与每台F5的vlan self IP Address的MAC地址是一样的。
一般服务器是以shared IP Address为网关,在两台F5上都配置了Mac Masquerade(相同的MAC地址),这样当F5发生切换后,服务器上shared IP address的MAC不变,保证了业务的不中断
具体在Network下
7、F5的pool配置
(1)在配置工具Web页面的导航面板中选择“Pools”中的“Pools”标签,点击“ADD”按钮添加服务器池(Pool)。
(2)在池属性(Pool Properties)中的“Load Balancing Method”表格中选择负载均衡策略,通常采用默认策略:“Round Robin” 
(3)在“Resouces”表格中的“Member Address”文本框输入成员IP地址,在“Service”文本框中输入服务端口,点击“>>”添加到“Current Members”当前成员列表中。
(4)添加所有组成员,点击“Done”完成配置。 
(5)在“Pools”中的“Pool Name”列选中特定池,然后池属性页面中选择“Persistence”标签。 
(6)在“Persistence Type”表格中选定会话保持类型。点击“Apply”应用配置。 
8、F5的virtual server配置
(1)在配置工具Web页面的导航面板中选择“Virtual Servers”中的“Virtual Servers”标签,点击“ADD”按钮添加虚拟服务器。 
(2)在“Add Virtual Server”窗口的“Address”文本框中输入虚拟服务器IP地址,并在“Service”文本框中输入服务端口号或在下拉框中选择现有的服务名称,点击“Next”执行下一步。 
(3) 在“Add Virtual Server”窗口的“Configure Basic Properties”页面中点击“Next”执行下一步。  在“Add Virtual Server”窗口的“Select Physical  Resources”页面中点击单选按钮“Pool”,并在下拉框中选择虚拟服务器对应的负载均衡池。 
(4)按“Done”完成创建虚拟服务器。 
9、F5的monitor的配置
(1)在配置工具Web页面的导航面板中选择“Monitor”中的“Monitors”标签,点击“ADD”按钮添加监控
(2)根据需要选择相关关联类型:“Node Associations”标签、Node Address Associations”标签、Service Associations”标签。
(3)被选关联标签中,在“Choose Monitor”表格中选择监控名称,点击“>>”按钮添加到“Monitor Rule”监控规格文本框中。监控规则可以为一条或多条。
(4)选择监控规则后,在对应节点的“Associate Current Monitor Rule”复选框中选中。如果欲删除监控关联,则选中对应节点的“Delete Existing Assocation”复选框。
(5)点击“Apply”关联监控
10、F5的SNAT配置
(1)在配置工具Web页面的导航面板中选择“NATs”中的“SNATs”标签,点击“ADD”按钮添加SNAT地址。 
(2) 在“Add SNAT”窗口中“Translation Address”的“IP”文本框中输入SNAT IP地址,并在“Origin  List”的“Origin Address”文本框中输入节点IP地址或在“Origin  VLAN”下拉框中选择VLAN名称,点击“>>”加入“Current List”列表。 
(3)按“Done”完成添加SNAT IP地址。 
11、F5主备机同步及切换校验
具体在system/Redundant Properties/synchonize Config...
12、业务的校验
F5主备机切换的校验
F5主备机业务运行的校验
其中1~6是基本配置,7~10业务配置,11~12校验
二、F5负载均衡器的维护

1、F5节点及应用的检查
通过“System -> Network Map”页面查看节点及应用状态
绿色:节点或虚拟服务器为“UP”
红色:节点或虚拟服务器状态为“Down”
灰色:节点或虚拟服务器被禁用
2、日志的检查
(1)当天日志:从web上查看logs中的system log、bigip log、monitor log,看日志中是否有异常。 
(2)7天内的日志
系统日志文件 - /var/log/messages消息, 系统消息
BIG-IP 日志文件 - /var/log/bigip
“External” BIG-IP events
Monitor 日志文件 - /var/log/bigd
“Internal” BIG-IP Events
3DNS 日志文件 - /var/log/3dns
3DNS Information
用gzcat、more、vi命令打开
3、F5流量的检查
(1)业务上的基本维护主要是在F5上查看F5分发到各节点的connect是否负载均衡,一般不应有数量级的差别
(2)通过WEB->pool-> pool statistics中查看connection项中的total和current项,不应有明显的数量级的差别
(3)F5 qkview命令
执行qkview,执行完成后将输出信息保存在文件“/var/tmp/-tech.out”中,供高级技术支持用
(4)F5 tcpdump命令
TCPDUMP是Unix系统常用的报文分析工具,TCPDUMP经常用于故障定位,如会话保持失效、SNAT通信问题等
tcpdump [ -adeflnNOpqRStvxX ] [ -c count ] [ -F file ]
[ -i interface ] [ -m module ] [ -r file ]
[ -s snaplen ] [ -T type ] [ -w file ]
[ -E algo:secret ] [ expression ]

是不是用F5做负载均衡器比用edge容易丢session,我 们这里的环境是WAS6.0.2for redhat  linux。两台机器做cluster,cluster中有四个成员,匀设置了Memory-to-Memory的内存复制功能。每台机器上两个。前端没 用用edge,而是用F5做的负载均衡器,出现session丢失现象。 

不知道是不是和F5有关系,还是WAS本身少了那些配置没做,谢谢! 


f5里有设置可以保持会话亲缘性。默认是不保持的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
负载均衡高可用web集群是一种常见的架构模式,旨在提高应用程序的可用性和性能。它通常由多个服务器节点组成,这些节点共同处理来自客户端的请求,并通过负载均衡器分配负载。以下是实现负载均衡高可用web集群的一般步骤: 1. 配置负载均衡器:选择一个适合的负载均衡算法(如轮询、最少连接等),并将负载均衡器配置为监听特定的端口和协议。常见的负载均衡器有Nginx、HAProxy等。 2. 设置服务器节点:建立多个服务器节点来处理客户端请求。这些节点可以是物理服务器或虚拟机,并且最好位于不同的物理位置或云服务提供商中,以增加可用性。 3. 配置健康检查:负载均衡器可以通过定期发送请求来检查服务器节点的健康状况。如果节点无法响应或出现错误,负载均衡器将停止将请求发送给该节点,并将流量移到其他健康的节点上。 4. 同步会话状态:如果应用程序具有会话状态(例如用户登录信息),则需要确保会话状态在多个服务器节点之间同步。这可以通过使用共享会话存储(如数据库或缓存)来实现。 5. 优化静态内容:将静态内容(如图片、CSS和JavaScript文件)存储在专门的静态文件服务器上,以减轻动态请求对负载均衡器和应用服务器的压力。 6. 监视和扩展:设置监视系统来实时监控整个集群的性能和健康状况。根据负载情况和性能指标,可以动态地扩展集群规模,增加服务器节点数量。 通过以上步骤,您可以实现一个具有负载均衡和高可用性的web集群,提供可靠且高性能的服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值