搭建Nginx(負載均衡)+Redis(Session共享)+Tomcat集群


一、環境搭建


 

Linux下Vagrant搭建Tomcat7、Java7

 

二、Nginx的安裝配置與測試


 

  *虛擬機下轉至root

sudo -i

  1)下載並解壓(目前官網最新版本)

創建安裝目錄:mkdir /usr/local/soft && cd /usr/local/soft
命令下載Nginx壓縮包:wget http://nginx.org/download/nginx-1.9.15.tar.gz
解壓壓縮包:tar zxvf nginx-1.9.15.tar.gz

  2)嘗試安裝Nginx

root@precise64:/usr/local/soft/nginx-1.9.15# ./configure 

  在最后提示:

./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.

  能看到PCRE的字眼,說明Nginx是依賴其它一些模塊的,Nginx共依賴以下三個包:

1.gzip 模塊需要 zlib 庫 ( 下載: http://www.zlib.net/ )
2.rewrite 模塊需要 pcre 庫 ( 下載: http://www.pcre.org/ )
3.ssl 功能需要 openssl 庫 ( 下載: http://www.openssl.org/ )

  依賴包安裝順序依次為:opensslzlibpcre, 最后安裝Nginx包

  3)下載並安裝openssl

命令下載openssl壓縮包:wget https://www.openssl.org/source/openssl-1.0.1t.tar.gz
解壓壓縮包:tar zxvf openssl-1.0.1t.tar.gz
安裝:cd
openssl-1.0.1t && ./config && make && make install
在最后可能會提示你:
  sh: 1: make: not found
  The program 'make' is currently not installed.  You can install it by typing:
  apt-get install make
按照提示:apt-get install make
再次安裝:
./config && make && make install

  4)下載並安裝zlib

下載zlib壓縮包:wget http://zlib.net/zlib-1.2.8.tar.gz
解壓:tar zxvf zlib-1.2.8.tar.gz 
安裝:cd zlib-1.2.8/ && ./configure && make && make install

  5)下載並安裝PCRE

下載PCRE:wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.37.tar.gz
解壓:tar zxvf pcre-8.37.tar.gz
安裝:cd
pcre-8.37 && ./config
可能會提示你:
  configure: error: You need a C++ compiler for C++ support.
安裝C++:
apt-get install g++(網速有限沒有嘗試)
再次安裝:
./configure && make && make install

  6)再次嘗試安裝Nginx

安裝命令:cd nginx-1.9.15/ && ./configure && make && make install
提示信息:
|| mkdir -p '/usr/local/nginx/logs'
test -d '/usr/local/nginx/html' \
|| cp -R html '/usr/local/nginx'
test -d '/usr/local/nginx/logs' \
|| mkdir -p '/usr/local/nginx/logs'
make[1]: Leaving directory `/usr/local/soft/nginx-1.9.15'
表示安裝成功並安裝至:/usr/local/nginx/

  7)測試開啟Nginx

嘗試啟動:cd /usr/local/nginx/sbin/ && ./nginx
可能會提示:
  error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory
搜索該文件:whereis libpcre.so.1
提示:libpcre.so: /lib64/libpcre.so.0 /usr/local/lib/libpcre.so /usr/local/lib/libpcre.so.1
 或 
libpcre.so: /usr/local/lib/libpcre.so.1 /usr/local/lib/libpcre.so
添加:
ln -s /usr/local/lib/libpcre.so.1 /lib64
 或:
ln -s /usr/local/lib/libpcre.so.1 /lib
再次嘗試啟動:
./nginx

  打開瀏覽器,跳轉至Vagrant配置的IP地址(沒有端口號),顯示如下即成功

 

三、配置Tomcat集群


  1)復制出兩個Tomcat

復制:cp -r Tomcat-7 ./Tomcat7-2
重命名:mv Tomcat-7 Tomcat7-1
查看:ls
bin  etc  games  include  lib  man  nginx  sbin  share  soft  src  ssl  Tomcat7-1  Tomcat7-2

  2)修改其中一個Tomcat的 server.xml

打開配置文件:vim conf/server.xml
  • <Server port="8005"shutdown="SHUTDOWN"> 改為 8006

  • <Connector port="8080"protocol="HTTP/1.1" 改為 8081

  • <Connector port="8009"protocol="AJP/1.3" 改為 8010

 保存::wq

  3)添加測試頁面

創建應用文件夾:
mkdir /usr/local/Tomcat7-1/webapps/www mkdir /usr/local/Tomcat7-2/webapps/www
添加測試頁面:
vim /usr/local/Tomcat7-1/webapps/www/index.jsp
  

<%@ pagelanguage="java" %>

<html>

  <head><title>TomcatA</title></head>

  <body>

   <h1style="color: red;">Tomcat A</h1>

    <tablealign="centre"border="1">

      <tr>

        <td>Session ID</td>

        <td><%= session.getId() %></td>

      </tr>

      <tr>

        <td>Created on</td>

        <td><%= session.getCreationTime() %></td>

     </tr>

    </table>

  </body>

</html>

sessionID:<%=session.getId()%>

<br>

SessionIP:<%=request.getServerName()%>

<br>

SessionPort:<%=request.getServerPort()%>

<%

out.println("This is Tomcat Server A");

%>

復制測試頁面:cp /usr/local/Tomcat7-1/webapps/www/index.jsp /usr/local/Tomcat7-2/webapps/www/

  4)分別啟動兩個Tomcat

啟動服務:/usr/local/Tomcat7-1/bin/startup.sh
可能提示:-bash: /usr/local/Tomcat7-1/bin/startup.sh: Permission denied
解決:cd /usr/local/Tomcat7-1/bin &&
chmod u+x *.sh
再次嘗試啟動服務:./startup.sh

  瀏覽器打開IP:8080/www/index.jsp 與 IP:8081/www/index.jsp,顯示如下

 

 

四、用Nginx實現集群的負載均衡


 

  1)修改Nginx配置文件

打開配置文件:vim /usr/local/nginx/conf/nginx.conf
在http { 內添加:
 #Tomcat
 upstream zhengbin {
   server 192.168.33.10:8080 max_fails=1 fail_timeout=10s;
  server 192.168.33.10:8081 max_fails=1 fail_timeout=10s;
  }
在http { 的
server { 的 location / { 內添加:
  proxy_pass http://zhengbin;
保存配置::wq

 

  2)重啟Nginx

重新加載命令:/usr/local/nginx/sbin/nginx -s reload
查看更多命令:nginx/sbin/nginx -h

  現在瀏覽器打開http://IP/www/,同樣顯示TomcatA或TomcatB,嘗試不斷刷新,兩個頁面會交替顯示,即成功

  但發現SessionID並不相同,接下來通過Redis來實現Session的共享(同步)

 

五、安裝配置Redis並實現Session共享


 

  1)安裝測試Redis

安裝:sudo apt-get install redis-server
測試:redis-server
提示:
[8206] 13 May 00:47:49 # Opening port: bind: Address already in use
測試:
  • redis-cli
  • redis 127.0.0.1:6379> exit

  • 說明安裝成功

 注意:
  redis-cli shutdown 為關閉連接
  再次連接時顯示:
    
Could not connect to Redis at 127.0.0.1:6379: Connection refused
    not connected> exit
 重新讀取配置:redis-server /etc/redis/redis.conf
 再次連接:
  
  redis-cli
    redis 127.0.0.1:6379> exit

  2)下載相關jar

1.下載commons-pool,建議下載1.6,2.4.2沒有測試成功
2.下載tomcat-redis-session-manager,我用的jdk7所以用的是-7.jar
3.下載jedis作為java的redis客戶端,建議用2.1.0,最新版本沒有測試成功
最后將三個jar分別放在兩個Tomcat的 /lib 中

  3)配置Tomcat

修改配置文件:vim /usr/local/Tomcat7-1/conf/context.xml 
在<Context>節點中,添加以下內容:
  <Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />
   <Manager className="com.radiadesign.catalina.session.RedisSessionManager"
      host="127.0.0.1"
      port="6379"
      database="0"
      maxInactiveInterval="60"/>
復制:cp /usr/local/Tomcat7-1/conf/context.xml /usr/local/Tomcat7-2/conf/

  4)啟動測試

1.啟動Nginx:/usr/local/nginx/sbin/nginx

2.啟動Redis:redis-server
3.啟動Tomcat:/usr/local/Tomcat7-1/bin/startup.sh && /usr/local/Tomcat7-2/bin/startup.sh 

  瀏覽器打開http://IP/www/index.jsp

  發現即使兩個Tomcat在切換,但各自的SessionID是相同的

到此配置全部完成

 

感謝以下博主的精彩博文,雖然坑較多。。內容重復較多。。


 

nginx+redis+tomcat實現session共享 *Session處的解決方法沒有測試成功

Redis相關

最終Session解決參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM