首页 > 代码库 > linux(ubuntu12.04)下搭建负载均衡和tomcat集群
linux(ubuntu12.04)下搭建负载均衡和tomcat集群
上一篇博客我们搭建了nginx+tomcat的服务器配置,可是实现静态和动态分离,但是只有一个tomcat。
所以,接下来在我们的机器上搭建多个tomcat,首先我们先复制一份以前的tomcat(我的tomcat是在/usr/local/下),执行命令
cp /usr/local/tomcat1 /usr/local/tomcat2应为要两个不同的tomcat使用不同的环境变量,所以我们需要修改/etc/profile的文件配置信息
sudo gedit /etc/profile然后修改成这样
JAVA_HOME=/usr/java/jdk1.7.0_71 CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib:$JAVA_HOME/bin export JAVA_HOME CLASSPATH # tomcat1 CATALINA_BASE=/usr/local/tomcat1 CATALINA_HOME=/usr/local/tomcat1 export CATALINA_BASE CATALINA_HOME # tomcat2 CATALINA_2_BASE=/usr/local/tomcat2 CATALINA_2_HOME=/usr/local/tomcat2 export CATALINA_2_BASE CATALINA_2_HOME TOMCAT_HOME=/usr/local/tomcat1 export TOMCAT_HOME TOMCAT_2_HOME=/usr/local/tomcat2 export TOMCAT_2_HOME最后一步我们需要修改tomcat2里面的配置文件。首先我们修改tomcat2/bin下面的startup.sh和shutdown.sh 添加一下内容
export JAVA_HOME=/usr/java/jdk1.7.0_71 export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib:$JAVA_HOME/bin export CATALINA_HOME=$CATALINA_2_HOME export CATALINA_BASE=$CATALINA_2_BASE然后进去tomcat2/server.xml中修改一下几个地方
<Server port="8005" shutdown="SHUTDOWN"> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
把8005->8006,8080->8081,8009->8010就好了(具体端口由自己定就行了)
然后进入tomcat1/bin,tomcat2/bi下面执行
./startup.shok
用浏览器进去localhost:8080和localhost:8081看看把,两个tomcat就已经搭建成功了
-------------------------------------------------------------------------------------------------接下来实现负载均衡---------------------------------------------------------------------------------------------------------
NGINX负载的几种方式
nginx 的 upstream目前支持 4 种方式的分配
1)、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2)、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
2)、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
3)、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
4)、url_hash(第三方)‘
我们使用最简单的ip_hash来实现,而且还可以解决session问题,本来想用memcached来解决session问题,但是这几天一直不顺,快玩死了。先用着这个把,
ip_hash其实上不能够完全解决ip问题,因为有很多用户我ip随时都可能在变动,ip_hash这个名字你就知道,是通过hash散列的原理将用户的ip散列到指定的tomcat上,自然而然的想当然的解决了session问题,最好是用memcached存取来实现session共享好吧,下面看我的nginx.conf的配置:
#运行nginx所在的用户名和用户组http://zyjustin9.iteye.com/blog/2017237,http://freeloda.blog.51cto.com/2033581/1288553 #user www www; #启动进程数 worker_processes 8; #全局错误日志及PID文件 error_log /usr/local/nginx/logs/nginx_error.log crit; pid /usr/local/nginx/nginx.pid; #Specifies the value for maximum file descriptors that can be opened by this process. worker_rlimit_nofile 65535; #工作模式及连接数上限 events { use epoll; worker_connections 65535; } #设定http服务器,利用它的反向代理功能提供负载均衡支持 http { #设定mime类型 include mime.types; default_type application/octet-stream; include /usr/local/nginx/conf/proxy.conf; #charset gb2312; #设定请求缓冲 server_names_hash_bucket_size 128; client_header_buffer_size 32k; large_client_header_buffers 4 32k; #client_max_body_size 8m; sendfile on; tcp_nopush on; keepalive_timeout 60; tcp_nodelay on; # fastcgi_connect_timeout 300; # fastcgi_send_timeout 300; # fastcgi_read_timeout 300; # fastcgi_buffer_size 64k; # fastcgi_buffers 4 64k; # fastcgi_busy_buffers_size 128k; # fastcgi_temp_file_write_size 128k; # gzip on; # gzip_min_length 1k; # gzip_buffers 4 16k; # gzip_http_version 1.0; # gzip_comp_level 2; # gzip_types text/plain application/x-javascript text/css application/xml; # gzip_vary on; #limit_zone crawler $binary_remote_addr 10m; upstream tomcat{ # 负载均衡站点的名称为tomcat,可以自己取 ip_hash; # 可选,根据来源IP方式选择web服务器,省略的话按默认的轮循方式选择web服务器 server 127.0.0.1:8080; # web服务器的IP地址及tomcat发布端口 server 127.0.0.1:8081; } server { listen 80; # 站点侦听端口80 server_name localhost; # 站点名称 location / { root html; index index.html index.htm; proxy_pass http://tomcat; # 负载均衡指向的发布服务tomcat } } }这样就ok啦,在两个tomcat下面建立两个一样的项目,index.jsp文件
<html> <head><title>essun.node1</title></head> <body> <h1><font color="blue">111111111111</font></h1> <table align="centre" border="1"> <tr> <td>Session ID</td> <% session.setAttribute("essun.org","essun.org"); %> <td><%= session.getId() %></td> </tr> <tr> <td>Created on</td> <td><%= session.getCreationTime() %></td> </tr> </table> <p> </body> </html>
tomcat下面的项目的jsp是一样的最好能够把改成node2,然后你就可以访问http://localhost/UE2/index.jsp(项目我随便建的)
就可以看见不同的ip会映射到不同的tomcat上面去,但是这样其实不是完全的解决了session共享和负载均衡,还需要继续研究memcached
linux(ubuntu12.04)下搭建负载均衡和tomcat集群