nginx+tomcat負載均衡以及redis共享session綜合解決方案(By Centos 7)

文件準備

nginx: nginx-1.10.3.tar.gz

tomcat8: apache-tomcat-8.0.43.zip

redis: redis-3.2.8.tar.gz

ruby(當使用redis cluster時須要): ruby-2.4.1.tar.gz

TomcatRedisSessionManager(From GitHub): TomcatRedisSessionManager-1.1.1.zip

jdk :jdk-8u131-linux-x64.tar.gz

環境安裝

PS:建議將全部文件下載後上傳至/usr/local/src ;若無其餘說明,本教程全部操做均以/usr/local/src做爲起手目錄html

redis

tar -zxvf redis-3.2.8.tar.gz
cd redis-3.2.8
make

建議安裝後, 將redis移動到/usr/local/redis3.2或類似的好記的目錄,方便後續操做java

安裝後查看是否安裝成功linux

cd src
./redis-server ../redis.conf

具體參考: redis安裝|菜鳥教程nginx

nginx

yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel
wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
tar zxvf pcre-8.35.tar.gz
cd pcre-8.35
./configure
make && make install
tar -zxvf nginx-1.10.3.tar.gz
cd nginx-1.10.3
./confignre --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.35
make && make install

安裝完成後,進入sbin目錄, 輸入 nginx -s start 默認端口80,嘗試訪問c++

nginx源碼安裝較爲複雜,參考網上完整安裝教程: Nginx安裝配置 | 菜鳥教程git

tomcat

tar -zxvf apache-tomcat-8.0.43.zip
cd apache-tomcat-8.0.43
cd bin
./startup.sh

解壓即安裝,啓動後默認端口爲8080, 自行測試server是否正常開啓,若失敗,嘗試如下命令github

systemctl stop firewalld
systemctl stop iptabled

nginx+tomcat集羣搭建

複製一份tomcat8

mv apache-tomcat-8.0.43 /usr/local/tomcat8/8081
cp /usr/local/tomcat8/8081 /usr/local/tomcat8/8082

修改tomcat的啓動及關閉端口

更改配置文件

tomcat/conf/server.xml

更改關閉端口,例如8005->8015web

<Server port="8005" shutdown="SHUTDOWN">
.....

更改啓動端口,例如8080->8081redis

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

配置nginx

nginx.conf

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    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        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    
    upstream tomcatcluster{
        server 127.0.0.1:8081 weight=1;
        server 127.0.0.1:8082 weight=1;
    }

    server {
        listen       80;
        server_name  localhost;

        charset utf-8;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass http://tomcatcluster;
            proxy_redirect default;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }
}

其中核心是apache

upstream tomcatcluster{
server 127.0.0.1:8081 weight=1;
server 127.0.0.1:8082 weight=1;
}

定義一個upstream 標識爲tomcatcluster;
server:定義一個服務器
ip:port:指定URL
weight:權重, 越大

location / {
proxy_pass http://tomcatcluster;
proxy_redirect default;
}

http:// 後接upstream指定的標識 ,如 tomcatcluster

啓動nginx

進入nginx目錄, 好比個人/usr/local/nginx

cd /usr/local/nignx
cd sbin
./nginx -s start

啓動前可以使用nignx -t 檢驗配置文件是否錯誤.
瀏覽器訪問80端口, 若無心外, 則顯示tomcat的歡迎界面,因而爲tomcat添加項目

修改tomcat/webapps/ROOT

cd /usr/local/tomcat8/8081
cd webapps/ROOT
rm -rf *
vi index.jsp

輸入如下內容:

<html>
    <body>  
        <h1>This is tomcat 1 , sessionId: <%=session.getId()%></h1>
        <% session.setAttribute("aa","guddqs"); session.setAttribute("bb","bbgudqs"); %>
    </body> 
</html>

相似的修改8082, 要在jsp上區分出是哪一個tomcat服務

修改後,屢次刷新頁面, 輪次出現2個tomcat的頁面. 至此nginx+tomcat負載均衡搭建完畢

redis共享session for tomcat

PS: 本教程採用tomcat8, 並使用國外某大佬github項目, 對於tomcat7須要另外一個redis-session-manager.jar

準備文件

unzip TomcatRedisSessionManager-1.1.1.zip
cd TomcatRedisSessionManager-1.1.1
ls -l
total 740
-rw-r--r--. 1 root root  61829 Mar 19  2016 commons-logging-1.2.jar
-rw-r--r--. 1 root root 111892 Mar 19  2016 commons-pool2-2.4.1.jar
-rw-r--r--. 1 root root 533252 Feb 21  2016 jedis-2.8.0.jar
-rw-r--r--. 1 root root   1850 Nov 26 00:30 ReadMe.txt
-rw-r--r--. 1 root root    324 Nov 25 23:56 RedisDataCache.properties
-rw-r--r--. 1 root root  28807 Nov 26 00:49 TomcatRedisSessionManager-1.1.1.jar

其中4個jar包須要複製到tomcat的lib目錄下

cp commons-logging-1.2.jar /usr/local/tomcat/8081/lib
cp commons-pool2-2.4.1.jar /usr/local/tomcat/8081/lib
.......

RedisDataCache.properties須要複製到tomcat的conf下

cp RedisDataCache.properties /usr/local/tomcat/8081/conf

修改配置文件

context.xml

進入tomcat的conf目錄, 修改 context.xml文件
<Context> 節點下加入

<Valve className="com.r.tomcat.session.management.RequestSessionHandlerValve" />
<Manager className="com.r.tomcat.session.management.RequestSessionManager" />

RedisDataCache.properties

而後修改以前複製到conf下的RedisDataCache.properties文件,切記不可修改文件名

vi RedisDataCache.properties

單redis配置以下:

redis.hosts=127.0.0.1:6379

# Redis Password
redis.password=

# set true to enable redis cluster mode
redis.cluster.enabled=false

# Redis database (default 0)
#redis.database=0

# Redis connection timeout (default 2000)
#redis.timeout=2000

redis cluster模式配置文件以下:

redis.hosts=127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002,127.0.0.1:3003,127.0.0.1:3004,127.0.0.1:3005

# Redis Password
redis.password=

# set true to enable redis cluster mode
redis.cluster.enabled=true

# Redis database (default 0)
#redis.database=0

# Redis connection timeout (default 2000)
#redis.timeout=2000

PS: redis.password留空則等於無密碼

相似的修改8082下的tomcat配置文件, 複製jar包, RedisDataCache.properties

最後重啓2個tomcat, 訪問80端口, 刷新頁面, 觀察頁面顯示是否達到 2個不一樣的tomcat服務單具備相同的session id

小結

使用nginx反向代理到2個tomcat服務器, 僅需修改tomcat配置不一樣的端口,以及爲nginx.conf添加upstream配置並將反向代理指向upstream便可 而添加tomcat的session共享則利用了tomcat的提供的外部session存儲機制接口,而實現則使用了redis做爲儲存源.從而實現了session共享.

相關文章
相關標籤/搜索