centos下搭建nginx+tomcat实现集群负载与session复制
第一章 測試環(huán)境說明
1.1 系統(tǒng)說明
系統(tǒng)均選用最小化安裝的centos 5.7
1.2 軟件說明
nginx-0.8.55
pcre-8.13
apache-tomcat-6.0.35?
jdk-6u31-linux-x64
nginx-upstream-jvm-route-0.1
1.3 規(guī)劃說明
客戶端通過訪問nginx做的負載均衡層去訪問后端的web運行層(tomcat),如下圖:
?
另外,關于session復制原理,簡單來說如下圖:
?
負載層:192.168.254.200
安裝:pcre、nginx、nginx-upstream-jvm-route-0.1
后端tomcat運行層:192.168.254.221、192.168.254.222
安裝:tomcat、jdk
第2章 ?安裝部署說明
2.1 負載均衡層安裝部署說明
2.1.1 依賴包安裝
yum install wget make gcc gcc-c++ ?-y
yum install pcre-devel openssl-devel patch -y
2.1.2 創(chuàng)建nginx運行帳號
useradd www -s /sbin/nologin -M
2.1.3 Pcre安裝
解壓pcre安裝包:tar xvf pcre-8.13.tar.gz?
cd pcre-8.13
編譯pcre:./configure --prefix=/usr/local/pcre
安裝:make && make install
2.1.4 Nginx安裝
解壓nginx和nginx-upstream
tar xvf nginx-upstream-jvm-route-0.1.tar.gz?
tar xvf nginx-0.8.55.tar.gz?
cd nginx-0.8.55
配置jvmroute路徑:
patch ?-p0 < ../nginx_upstream_jvm_route/jvm_route.patch?
編譯nginx:
./configure \
--user=www \
--group=www \
--prefix=/usr/local/nginx \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_gzip_static_module \
--pid-path=/var/run/nginx.pid \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--http-client-body-temp-path=/var/tmp/nginx/client_body_temp \
--http-proxy-temp-path=/var/tmp/nginx/proxy_temp ?\
--http-fastcgi-temp-path=/var/tmp/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/tmp/nginx/scgi_temp \
--add-module=/root/scripts/src/nginx_upstream_jvm_route/
安裝:
make && make install
2.1.5 Nginx配置文件修改
Nginx作為負載的配置文件修改很簡單,只需添加后端web服務器的ip及端口即可,修改運行帳號,下面配置文件中的紅色字體為本次測試環(huán)境的修改值;
user ?www www;
worker_processes 8;
#error_log ?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 51200;
events
{
?use epoll;
?worker_connections 2048;
}
http
{
? upstream backend {
? ? server 192.168.254.221:80 srun_id=real1; ?
? ? server 192.168.254.222:80 srun_id=real2; ?
? ? jvm_route $cookie_JSESSIONID|sessionid reverse;
? }
?
?include ? ? ? mime.types;
?default_type ?application/octet-stream;
?#charset ?gb2312;
?charset UTF-8;
?server_names_hash_bucket_size 128;
?client_header_buffer_size 32k;
?large_client_header_buffers 4 32k;
?client_max_body_size 20m;
?limit_rate ?1024k;
?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;
server
?{
? ?listen ? ? ? 80;
? ?server_name ?192.168.254.250;
? ?index index.jsp index.htm index.html;
? ?root ?/data/www/;
?
? ?location / ?{
? ? ?proxy_pass ?http://backend;
? ? ?proxy_redirect ? ?off;
? ? ?proxy_set_header ?X-Forwarded-For ?$proxy_add_x_forwarded_for;
? ? ?proxy_set_header ?X-Real-IP ?$remote_addr;
? ? ?proxy_set_header ?Host $http_host;
? ?}
? ?location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
? ?{
? ? ?expires ? ? ?30d;
? ?}
? ?location ~ .*\.(js|css)?$
? ?{
? ? ?expires ? ? ?1h;
? ?}
? ?location /Nginxstatus {
? ? ?stub_status on;
? ? ?access_log ? off;
? ?}
? log_format ?access ?'$remote_addr - $remote_user [$time_local] "$request" '
? ? ? ? ? ? ?'$status $body_bytes_sent "$http_referer" '
? ? ? ? ? ? ?'"$http_user_agent" $http_x_forwarded_for';
# ?access_log ?off;
? }
?
}
2.2 后端tomcat運行層部署說明
2.2.1 安裝jdk
創(chuàng)建jdk安裝目錄:
mkdir /opt/java
賦予執(zhí)行權限:
chmod 755 jdk-6u31-linux-x64.bin?
cd /opt/java
./jdk-6u31-linux-x64.bin?
修改環(huán)境變量:
cat >> /etc/profile.d/java.sh << "EOF"
export JAVA_HOME=/opt/java/jdk1.6.0_31
export CLASSPATH=$CLASSPATH:./:$JAVA_HOME/lib
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
EOF
配置環(huán)境變量生效:
source /etc/profile
2.2.2 安裝tomcat
解壓安裝包,并將tomcat復制到/usr/local目錄下,命名為tomcat;
tar xvf apache-tomcat-6.0.35.tar.gz?
cp -r apache-tomcat-6.0.35 /usr/local/tomcat
2.2.3 修改配置文件 (其他配置請參考集群配置)
2.2.3.1 修改server.xml文件
修改server.xml文件只需要修改下面兩點即可,因為是兩臺機器,故兩臺機器配置相同即可;
1、修改jvmRoute="real1"(自定義)
<Engine name="Catalina" defaultHost="localhost" jvmRoute="real1">
2、下面的代碼是從官方網(wǎng)站上找到的默認的,具體運用中需要將auto的配置改成本機ip:
?<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
? ? ? ? ? ? ? ? ?channelSendOptions="8">
? ? ? ? ? <Manager className="org.apache.catalina.ha.session.DeltaManager"
? ? ? ? ? ? ? ? ? ?expireSessionsOnShutdown="false"
? ? ? ? ? ? ? ? ? ?notifyListenersOnReplication="true"/>
? ? ? ? ? <Channel className="org.apache.catalina.tribes.group.GroupChannel">
? ? ? ? ? ? <Membership className="org.apache.catalina.tribes.membership.McastService"
? ? ? ? ? ? ? ? ? ? ? ? address="228.0.0.4"
? ? ? ? ? ? ? ? ? ? ? ? port="45564"
? ? ? ? ? ? ? ? ? ? ? ? frequency="500"
? ? ? ? ? ? ? ? ? ? ? ? dropTime="3000"/>
? ? ? ? ? ? <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
? ? ? ? ? ? ? ? ? ? ? address="auto"
? ? ? ? ? ? ? ? ? ? ? port="4000"
? ? ? ? ? ? ? ? ? ? ? autoBind="100"
? ? ? ? ? ? ? ? ? ? ? selectorTimeout="5000"
? ? ? ? ? ? ? ? ? ? ? maxThreads="6"/>
? ? ? ? ? ? <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
? ? ? ? ? ? ? <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
? ? ? ? ? ? </Sender>
? ? ? ? ? ? <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
? ? ? ? ? ? <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
? ? ? ? ? </Channel>
? ? ? ? ? <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
? ? ? ? ? ? ? ? ?filter=""/>
? ? ? ? ? <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
? ? ? ? ? <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
? ? ? ? ? ? ? ? ? ? tempDir="/tmp/war-temp/"
? ? ? ? ? ? ? ? ? ? deployDir="/tmp/war-deploy/"
? ? ? ? ? ? ? ? ? ? watchDir="/tmp/war-listen/"
? ? ? ? ? ? ? ? ? ? watchEnabled="false"/>
? ? ? ? ? <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
? ? ? ? ? <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
? ? ? ? </Cluster> ? ?
2.2.3.2 修改web.xml文件
配置web.xml文件只需要在末端web-app前面添加<distributable/>即可;
<welcome-file-list>
? ? ? ? <welcome-file>index.html</welcome-file>
? ? ? ? <welcome-file>index.htm</welcome-file>
? ? ? ? <welcome-file>index.jsp</welcome-file>
? ? </welcome-file-list>
<distributable/>
</web-app>
2.3 測試session復制
2.3.1 創(chuàng)建測試文件
分別在tomcat項目部署目錄下創(chuàng)建test文件夾,并創(chuàng)建index.jsp文件,文件內容如下:
<%@page language="java"%>
<html>
<body>
? ? ? ? <h1><font color="red">Session serviced by tomcat</font></h1>
? ? ? ? <table aligh="center" border="1">
? ? ? ? ? ? ? ? <tr>
? ? ? ? ? ? ? ? ? ? ? ? <td>Session ID</td>
? ? ? ? ? ? ? ? ? ? ? ? <td><%=session.getId() %></td>
? ? ? ? ? ? ? ? ? ? ? ? <% session.setAttribute("abc","abc");%>
? ? ? ? ? ? ? ? </tr>
? ? ? ? ? ? ? ? <tr>
? ? ? ? ? ? ? ? ? ? ? ? <td>Created on</td>
? ? ? ? ? ? ? ? ? ? ? ? <td><%= session.getCreationTime() %></td>
? ? ? ? ? ? ? ? </tr>
? ? ? ? </table>
</body>
<html>
2.3.2 Web測試session復制
瀏覽器中輸入:http://192.168.254.200/test/
即可查看當前負載tomcat測試頁面輸出:
?
關閉221的tomcat,并刷新頁面
?
如此則是測試完成。
?
總結
以上是生活随笔為你收集整理的centos下搭建nginx+tomcat实现集群负载与session复制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: I2C总线学习(四)--读写过程
- 下一篇: 怎么在用u盘安装系统 使用U盘安装操作系