原文:http://blog.csdn.net/zht666/article/details/38515147css
如下內容是參考原文修改後的html
測試環境linux centOS 6java
在一臺真實windows機上裝了兩臺虛擬機node
192.168.1.249 linux
192.468.1.248nginx
每臺虛擬機都裝了2個tomcatc++
由於nginx已是安裝好的了,因此沒有按照原博客安裝,沒有驗證是否正確。web
tomcat也是安裝好的,我在每一臺服務器上都安裝了2個tomcat,第二個tomcat是複製的第一個tomcat,windows
要編輯環境變量:vi /etc/profile瀏覽器
而後再修改第二個tomcat的server.xml中的端口號,要與第一個tomcat的端口號不能同樣,否則端口衝突起不來服務。
最後再修改tomcat/bin/catalina.sh找到下面粉紅字,
# OS specific support. $var _must_ be set to either true or false.
在下面增長以下代碼
export CATALINA_BASE=$CATALINA_2_BASE
export CATALINA_HOME=$CATALINA_2_HOME
能夠參考http://www.cnblogs.com/shihaiming/p/5896283.html
Nginx官網:http://nginx.org/
下載最新穩定版本。在安裝Nginx以前,須要先安裝gcc、 openssl、 pcre和zlib軟件庫。
1.1安裝gcc、gcc-c++
安裝命令:
#sudo yum install gcc
# sudo yum install gcc-c++
1.2安裝openssl
openssl官網:http://www.openssl.org/
安裝版本:openssl-1.0.1i.tar.gz
安裝命令:
#tar -zxvf openssl-1.0.1i.tar.gz
#cd openssl-1.0.1i
#sudo ./config --prefix=/usr/local/openssl-1.0.1i #prefix指定安裝目錄
#sudo make
#sudo make install
【注意】:此處使用的是config命令,而不是日常的configure命令
安裝完成後,到/usr/local/下查看是否安裝成功。若是安裝出錯,須要從新加壓縮,從新安裝。
1.3安裝pcre
pcre官網:http://www.pcre.org/
安裝版本:pcre-8.35.tar.gz
安裝命令:
#tar -zxvf pcre-8.35.tar.gz
#cd pcre-8.35
#sudo ./configure --prefix=/usr/local/pcre-8.35 #prefix指定安裝目錄
#sudo make
#sudo make install
安裝完成後,到/usr/local/下查看是否安裝成功。若是安裝出錯,須要從新加壓縮,從新安裝。
【注意】:若是沒有安裝c++編譯器,這個軟件的安裝會報錯!
1.4安裝zlib
zlib官網:http://www.zlib.net/
安裝版本:zlib-1.2.8.tar.gz
安裝命令:
#tar -zxvf zlib-1.2.8.tar.gz
#cd zlib-1.2.8
#sudo ./configure --prefix=/usr/local/zlib-1.2.8 #prefix指定安裝目錄
#sudo make
#sudo make install
安裝完成後,到/usr/local/下查看是否安裝成功。若是安裝出錯,須要從新加壓縮,從新安裝。
1.5安裝Nginx
安裝版本:nginx-1.6.1.tar.gz
安裝命令:
#tar -zxvf nginx-1.6.1.tar.gz
#cd nginx-1.6.1
#sudo ./configure
--prefix=/usr/local/nginx-1.6.1 #prefix指定安裝目錄
--with-openssl=/home/zht/src/openssl-1.0.1i #指的是openssl源碼路徑
--with-pcre=/home/zht/src/pcre-8.3.5 #指的是pcre的源碼路徑
--with-zlib=/home/zht/src/zlib-1.2.8 #指的是zlib 的源碼路徑
--with-http_ssl_module
#sudo make
#make install
安裝完成後,到/usr/local/下查看是否安裝成功。若是安裝出錯,須要從新加壓縮,從新安裝。
1.5.1 配置Nginx
配置文件目錄:/usr/local/nginx-1.6.1/conf/nginx.conf
cd /usr/local/nginx-1.6.1/conf
vi nginx.conf
修改後的配置文件以下:
在#gzip on;後面加入upstream
#gzip on;
upstream tomcat {
# ip_hash;
server 192.168.1.249:8080 weight=1;
server 127.0.0.1:8082 weight=1;
server 192.168.1.248:8081 weight=1;
server 192.168.1.248:8083 weight=1;
}
server {
listen 8088;
server_name localhost;
location / {
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 http_404;
root /usr/share/nginx/html;
index index.html index.htm ;
proxy_pass http://tomcat;
proxy_connect_timeout 10;
proxy_read_timeout 10;
proxy_send_timeout 10;
}
}
此處nginx配置的listen堅挺端口是8088,那麼等配置好後訪問nginx就是192.168.1.249:8088,這樣就會顯示nginx歡迎頁
在與tomcat集羣配好後在訪問192.168.1.249:8088,會顯示tomcat的首頁,
要是測試集羣是否正常,在每一個tomcat的webapps目錄下建個test目錄,將測試用的index.jsp放在此目錄下便可,此時訪問http://192.168.1.249:8088/test/
就會顯示index.jsp內容。以上說的192.167.1.249是我nginx安裝目錄所在,本身測試時要根據本身實際的nginx所在服務器的ip來訪問。
效果以下圖:
訪問測試用tomcat的webapps目錄下的test/index.jsp的頁面
upstream tomcat{ # 負載均衡站點的名稱爲tomcat,能夠本身取
# ip_hash; # 可選,根據來源IP方式選擇web服務器,省略的話按默認的輪循方式選擇web服務器
server 127.0.0.1:8080 weight=1; # web服務器的IP地址及tomcat發佈端口, #weigth參數表示權值,權值越高被分配到的概率越大
server 127.0.0.1:8082 weight=1;
server 192.168.1.248:8081 weight=1;
server 192.168.1.248:8083 weight=1;
}
說明:紅色字體的tomcat這個名稱隨便命名,但在location中proxy_pass ,http://後面的名稱要一致
weigth參數表示權值,權值越高被分配到的概率越大
location 中加入有下劃線的代碼
location / {
root /usr/share/nginx/html;
index index.html index.htm;
proxy_pass http://tomcat; # 負載均衡指向的發佈服務tomcat
proxy_redirect default;
proxy_connect_timeout 10; #跟代理服務器鏈接的超時時間,必須留意這個time out時間不能超過75秒,當一臺服務器當掉時,過10秒轉發到另一臺服務器。
}
proxy_pass http://tomcat; #是必需要加的
proxy_connect_timeout 10; #這個參數是鏈接的超時時間。 我設置成10,表示是10秒後超時會鏈接到另一臺服務器
#其餘參數本身選吧。
Memcached官網:http://memcached.org/
安裝memcached須要先安裝libevent,libevent官網:http://libevent.org/
本次安裝版本:
memcached-1.4.31.tar.gz
libevent-2.0.22-stable.tar.gz
2.1安裝livevent
查看是否已安裝:# rpm qa | grep libevent
若是已安裝且版本低於1.3,則先經過:
# rpm -e libevent --nodeps 進行卸載。
# tar zxvf libevent-2.0.22-stable.tar.gz
# cd libevent-2.0.22-stable
# sudo ./configure --prefix=/usr/local/libevent-2.0.22-stable #prefix指定安裝路徑
# sudo make
# sudo make install
安裝完成後,到prefix指定的目錄下,看看是否存在libevent-2.0.22-stable目錄,以下圖所示。
圖片中版本是2.0.21,由於重命名弄錯了,實際版本仍是2.0.22
2.2安裝Memcached
# tar zxvf memcached-1.4.31.tar.gz
# cd memcached-1.4.31
sudo ./configure --prefix=/usr/local/memcached-1.4.31 --with-libevent=/usr/local/libevent-2.0.22-stable
# sudo make
# sudo make install
2.2.1檢查看裝狀況
安裝完成後,到prefix指定的目錄下查看是否有memcached-1.4.31目錄,以下圖所示。
2.2.2查看memcached和libevent版本信息
首先定位到Memcached的bin目錄下:
# cd /usr/local/memcached-1.4.31/bin
執行命令:
# sudo ./memcached -i
2.2.3啓動memcached
# sudo ./memcached -d -v -p 12000 -m 512 -u root
解釋:-d表示以守護進程方式運行memcached;-v表示輸出浸膏和錯誤信息;-p指定監聽的端口號;-m指定能使用的最大內存,單位MB;-u指定運行memcached的帳戶。
紅色的12000這個參數很是重要,在tomcat的context.xml中配置memcache時memcachedNodes必需要與其一致,否則啓動tomcat時報錯,拒絕連接。
若是在同一臺服務器上安裝多個memcached時,此數字不能同樣,這個數字自有定義,只要沒被佔用。
使用# ps -ef | grep memcached查看進程。
到tomcat的安裝目錄lib中,加入:須要的jar包
每一個tomcat的lib下都要加入這些jar
Tomcat六、Tomcat七、Tomcat8使用不一樣msm支持包:memcached-session-manager-tc6-1.6.5.jar、memcached-session-manager-tc7-1.6.5.jar、memcached-session-manager-tc8-2.0.0.jar,
只可選一,安裝tomcat的版本下載該jar,不然啓動報錯。
配置tomcat. 在tomcat安裝目錄下的context.xml文件中加入:
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:127.0.0.1:12000"
sticky="false"
requestUriIgnorePattern=".*\.(png|gif|jpg|css|js|ico|jpeg|htm|html)$"
sessionBackupAsync="false"
sessionBackupTimeout="100"
copyCollectionsForSerialization="false" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"/>
說明:紅色字體n1表示memcached服務器節點的名稱,12000表示該節點的端口號,此端口號與啓動memcached時的端口號要一致
有人說:也可在server.xml配置文件的<Host>...<Host>中添加配置
<Context docBase="webapps" path="" reloadable="true">
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:127.0.0.1:12000"
sticky="false"
requestUriIgnorePattern=".*\.(png|gif|jpg|css|js|ico|jpeg|htm|html)$"
sessionBackupAsync="false"
sessionBackupTimeout="100"
copyCollectionsForSerialization="false" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"/>
</Context>
這個我沒試
【參數說明】:
docBase:與<Host>中的appBase一致,網站部署目錄。
memcachedNodes:memcached服務器信息,此屬性是必須的。這個屬性必須包含你全部運行的memcached節點。每一個節點的定義格式爲<id>:<host>:<port>,多個服務器之間用空格或半角逗號隔開,如:
n1:127.0.0.1:12001 n2:127.0.0.1:12002 n3:127.0.0.1:12003
若是你設置單個memcache節點<id>是可選的,因此它容許設置爲<host>:<port>,如:memcachedNodes="localhost:11211"
打開server.xml文件,在<Engine>節點的中添加jvmRoute="jvm1",這個是用於指定Tomcat集羣的路由。Tomcat2設置成jvmRoute="jvm2",Tomcat3設置成jvmRoute="jvm3",依次類推。
注意: sticky模式時,要配置jvmroute參數,每臺tomcat的jvmroute參數都不能同樣
在tomcat目錄的/conf/server.xml
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
測試JSP代碼以下:index.jsp
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Tomcat+memcached共享session測試</title>
</head>
<body>
SessionID:<%=session.getId()%>
<BR>
SessionIP:<%=request.getServerName()%>
<BR>
SessionPort:<%=request.getServerPort()%>
<BR>
這裏是服務器192.168.1.249
<BR>
tomcat端口是8080
</body>
</html>
上面的紅色字體根據實際的tomcat服務配置來寫,方便看是否集羣且session共享成功。
下面是我測試的效果:
千萬要記住:瀏覽器輸的地址是nginx服務的地址,不是某一個tomcat的地址,由於是nginx來作的負載均衡,由nginx來分配具體訪問哪一個服務。
要在每個tomcat中webapps下新建一個test目錄,把index.jsp放進去。
由圖能夠看到,三個Tomcat的SessionID都是同樣的:BBE70447F8121E0A011CB3879FBF17A7-n1.jvm1 ,
-n1是memcached服務器的節點名稱,jvm1 是我在其中一個tomcat的server.xml中<Engine>節點的中添加jvmRoute="jvm1 ",這個是用於指定Tomcat集羣的路由,能夠不寫,寫的話就會在sessionid裏顯示。
只要不關閉瀏覽器,無論怎麼刷新,SessionID都是不變了。由此能夠,三個Tomcat經過memcached實現了Session信息共享。