狮子的雄心,骆驼的耐力,孩子的执著!
分类: Java
2010-12-03 18:10:35
一.Session的复制
二.如何将请求发送到正常的服务器
针对以上问题,可以使用群集和负载均衡来解决,整体架构如下:
中间由一台服务器做负载均衡(Load Balancer),它将所有请求,根据一定的负载均衡规则发送给指定的群集服务器(Cluster),群集服务器拥有着相同的状态和相同的应用程序,并且他们的Session是相互复制的,这样,不管访问哪台服务器都具有相同的结果,即使一台服务器崩溃掉以后,可以由其他集群服务器继续负责应用程序的运行。
我们假设有如下场景,一台负载均衡服务器负责请求的均衡,群集服务器A和群集服务器B组成一个群集,当某个群集服务器崩溃后,另外一台继续负责应用程序的运行。
一. 配置Tomcat
修改Tomcat配置文件server.xml
1.群集服务器A的端口号与B不冲突,即使Server Port,Connector,Coyote/JK2 AJP Connector的端口号唯一
2.在Host元素下增加以下内容:
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="8">
notifyListenersOnReplication="true"/>
在web.xml文件中
二. 配置Tomcat
与群集服务器A配置基本相同,唯一不同的地方就是server.xml文件中
className="org.apache.catalina.cluster.tcp.ReplicationListener"
tcpListenAddress="
tcpListenPort="4002"
tcpSelectorTimeout="100"
tcpThreadCount="6"/>
tcpListenAddress应为本机地址,如果两台群集服务器在一台机器上,则端口号要不同
注意:B的其他端口不要与A冲突。
三. 群集服务器具体配置结果
配置参数 |
群集服务器 A |
群集服务器B |
|
9005 |
10005 |
Connector |
9080 |
10080 |
Coyote/JK2 AJP Connector |
9009 |
10009 |
Cluster mcastAddr |
228.0.0.4 |
228.0.0.4 |
Cluster mcastPort |
45564 |
45564 |
tcpListenAddress |
本机IP地址 |
本机IP地址 |
Cluster tcpListenPort |
4001 |
4002 |
Mcast* 用于广播,所有群集服务器需要填写相同的配置
tcpListen* 本机的IP,群集服务器启动时,会将自己的IP和端口号广播出去,其他群集服务器收到后,响应广播发出者。
四. 测试群集
启动群集服务器A,再启动群集服务器B会显示群集服务器的信息,表示群集服务器配置成功
五. 配置负载均衡服务器Apache
现在虽然群集已经有了相同的状态,但需要不同的IP地址才能访问到服务器A与B,现在我们配置一台负载均衡服务器来实现统一的入口访问,和负载的均衡。
下载Apache服务器
修改httpd.conf文件
将以下Module的注释去掉
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_proxy_http.so
并增加以下元素
ProxyRequests Off
ProxyPass /helloworld balancer://mycluster stickysession=jsessionid nofailover=On
BalancerMember http://
BalancerMember http://
SetHandler balancer-manager
Order Deny,Allow
Deny from all
Allow from all
SetHandler server-status
Order Deny,Allow
Deny from all
Allow from all
其中
ProxyPass /helloworld balancer://mycluster stickysession=jsessionid nofailover=On
BalancerMember http://
BalancerMember http://
ProxyPass为代理转发的Url,即将所有访问/helloworld的请求转发到群集balancer://mycluster
BalancerMember为群集的成员,即群集服务器A或B,负载均衡服务器会根据均衡规则来将请求转发给BalancerMember。
Nginx 0.8.16 负载均衡
upstream service {
server 10.10.13.145:8081;
server 10.10.13.145:10080;
}
location /helloworld/ {
index index.jhtml index.html login_page.jhtml;
proxy_pass ;
proxy_set_header Host $host;
client_max_body_size 100m;
client_body_buffer_size 128k;
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 6000;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
配置好后,启动Apahce或者Nginx服务器,访问localhost/hellworld就会看到群集服务器中应用返回的结果。恭喜你,负载均衡和群集已经配置成功了。