[置頂] Nginx-1.6.2+Memcached-1.2.6+Tomcat7負載均衡實現Session共享


搭建所需要的相關軟件和JAR包以下:

Nginx:     nginx-1.6.2.rar

Memcached:   memcached-1.2.6-win32-bin.rar

Tomcat7:   apache-tomcat-7.0.56.rar

Tomcat JAR:   tomcat_lib.rar

前置服務器上: 安裝Nginx軟件實現負載均衡;

服務器A, B, C上: 安裝Memcached實現Session共享, Tomcat7;


步驟一:

Memcached軟件安裝:

解壓memcached-1.2.6-win32-bin.rar, 比如解壓到E盤, 在DOS下進入memcached-1.2.6-win32-bin目錄

E:\memcached-1.2.6-win32-bin\memcached -h       顯示memcached參數

參數說明:

-m <num> 允許最大內存用量, 單位M(默認:64MB)

-u <username> 綁定使用指定用於運行進程<username>

-d start    開始啟動Memcached服務

-l <ip_addr> 綁定地址(默認:所有都允許,無論內外網或者本機更換IP, 有安全隱患, 若設置為127.0.0.1就只能本機訪問)

-p <num> 設置TCP端口號(默認不設置為:11211)

-d install    安裝Memcached服務

-d uninstall   卸載Memcached服務

-d restart  重啟Memcached服務

 

E:\memcached-1.2.6-win32-bin\memcached -d install          安裝Memcached服務

E:\memcached-1.2.6-win32-bin\memcached -m 1024 -u root -d start -l 10.0.0.95 -p 11211    指定用量, 進程, IP, 端口, 並啟動Memcached

如果防火牆攔截了11211端口號, 請通過以下方法添加端口號, 以下是Windows 7添加方法:

step1、點擊控制面板
  
step2、選擇windows防火牆,點擊高級設置
  
step3、在彈出的“高級安全windows防火牆”點擊“入站規則”,在右側“操作”欄點擊“入站規則”下的“新建規則…”,此時會彈出一個窗口讓你設置。剩下的就非常傻瓜化了。
  
step4、彈出“新建入站規則向導”-規則類型-選中“端口”,點擊下一步。選擇規則應用的協議“TCP/UDP”如果是TCP你就選擇TCP,UDP就選擇UDP。再勾選“特定本地端口”在文本框輸入您想開放的端口號(例如1521)。
  
step5、點擊下一步,到“連接符合指定條件時應該進行什么操作?”選擇“允許連接”。點擊下一步到“配置文件”何時應用該規則,勾選“域”、“專用”、“公用”點擊下一步。
  
step6、配置規則名稱,隨便輸入你自己認為好記的規則名稱即可。

步驟二:

Tomcat7配置:

1. 解壓tomcat_lib.rar出來, 把所有jar文件, 復制到tomcat安裝目錄lib中;

2. 修改conf/server.xml文件, 找到Engine標簽, 添加jvmRoute屬性, 以下:

<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm95">
3. 修改conf/context.xml文件, 添加以下內容到Context標簽內, memcachedNodes這個屬性必須包含你所有運行的memcached節點, 每個節點的定義格式為<id>:<host>:<port>。
<Manager  
className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n95:10.0.0.95:11211,n31:10.0.0.31:11211,n39:10.0.0.39:11211"
sticky="false"
sessionBackupAsync="false"
lockingMode="uriPattern:/path1|/path2"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
copyCollectionsForSerialization="false"/>

步驟三:

Nginx軟件安裝:

解壓nginx-1.6.2.rar, 比如解壓到E盤, 在DOS下進入nginx-1.6.2目錄:

E:\nginx-1.6.2\start nginx          啟動Nginx;

E:\nginx-1.6.2\nginx -h                顯示Nginx參數

E:\nginx-1.6.2\nginx -s stop       停止Nginx

E:\nginx-1.6.2\nginx -s reload    重新加載nginx.conf配置文件

 

nginx.conf配置文件內容以下:

#啟動進程,通常設置成和cpu的數量相等
worker_processes 8;

#全局錯誤日志及PID文件
#error_log logs/error.log;
#error_log logs/error.log notice;
error_log logs/error.log info;

#pid logs/nginx.pid;

#工作模式及連接數上限
events {
#單個后台worker process進程的最大並發鏈接數
worker_connections 1024;
}


http {
#設定mime類型,類型由mime.type文件定義
include mime.types;
default_type application/octet-stream;

#設定日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log logs/access.log main;

#sendfile 指令指定 nginx 是否調用 sendfile 函數(zero copy 方式)來輸出文件,
#對於普通應用,必須設為 on,
#如果用來進行下載等應用磁盤IO重負載應用,可設置為 off,
#以平衡磁盤與網絡I/O處理速度,降低系統的uptime.
sendfile on;
#tcp_nopush on;

#連接超時時間
#keepalive_timeout 0;
keepalive_timeout 65;

#設定請求緩沖
include proxy.conf;
#開啟gzip壓縮
#include gzip.conf;

#設定負載均衡的服務器列表
upstream armyqin-pc.easternphoenix.com {
#weigth參數表示權值,權值越高被分配到的幾率越大
server 10.0.0.95:8088 weight=1;#服務器A
server 10.0.0.39:80 weight=1;#服務器B
server 10.0.0.31:80 weight=1;#服務器C

ip_hash;#ip_hash策略將同一IP的所有請求都轉發到同一應用服務器
}

#設定虛擬主機配置
server {
#偵聽80端口
listen 80;
#定義使用 armyqin-pc.easternphoenix.com訪問
server_name armyqin-pc.easternphoenix.com;

#默認請求
location / {
#定義服務器的默認網站根目錄位置
root html;
#定義首頁索引文件的名稱
index index.html index.htm index.shtml index.jsp;

proxy_passhttp://armyqin-pc.easternphoenix.com;
}

#啟用nginx status 監聽頁面
location /nginxstatus {
stub_status on;
access_log on;
auth_basic "nginxstatus";
auth_basic_user_file htpasswd;
}

# 定義錯誤提示頁面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}


步驟四:
新建一個cluster.jsp文件,編輯該文件內容如下:
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>  
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>Test</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<%
System.out.println(session.getId());
out.println("<br>SESSION ID:" + session.getId()+"<br>");
%>
</body>
</html>






注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com