1. 程式人生 > 其它 >Nginx+Tomcat+Redis負載均衡Session共享實現超級簡單(CentOS6.9系統 Java版本)

Nginx+Tomcat+Redis負載均衡Session共享實現超級簡單(CentOS6.9系統 Java版本)

第一步Nginx+Tomcat 實現負載均衡的測試

  •  相關軟體環境

軟體名稱

版本號

版本說明

Java

1.7

linux版本

Tomcat 8081

7.x

linux版本

Tomcat 8082

7.x

linux版本

Redis

3.2.9

linux版本

Nginx

1.12.0

linux版本

CentOS

6.9

----------

MySql

系統自帶

----------

連結: https://pan.baidu.com/s/1i5U3srj 密碼: hkda 這個是centos網盤地址。其他的在博文底部有給出下載地址

  • 軟體版本環境截圖
  • 實踐測試環境說明

使用的是VMware Workstation 掛載了CentOS6.9版本的虛擬機器。這個版本的虛擬機器裡面自帶了mysql,所以不需要下載安裝。

Java 安裝教程 http://www.cnblogs.com/haoliansheng/p/5832979.html

Redis 安裝教程 http://jingyan.baidu.com/article/6dad507510ea07a123e36e95.html

Tomcat在安裝好Java之後再解壓即可。為了做Nginx負載均衡。需要2個Tomcat。本人分別為8081 8082埠做2個Tomcat。需要修改server.xml 只截取了部分內容

  <Server port="8015" shutdown="SHUTDOWN"><!--這裡需要修改tomcat的關閉埠 預設是8005-->
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className="org.apache.catalina.core.JasperListener" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>
  <Service name="Catalina">
   <!--這裡需要修改tomcat的訪問埠 預設是8080-->
    <Connector port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <!--這裡需要修改tomcat的代理埠 8443不用更改-->
    <Connector port="7009" protocol="AJP/1.3" redirectPort="8443" />

修改完即可。啟動Tomcat 8081 & 8082  cd到bin目錄下  執行 ./startup.sh 即可 想看啟動相關內容 則執行 ./catalina.sh 命令截圖如下

那麼現在就可以訪問Tomcat了。左圖8081 右圖 8082 部署了2個相同的專案。

  • 接下來可以Nginx的安裝了。

有可能需要安裝一些庫  命令如下

yum -y install pcre-devel openssl openssl-devel
yum install gcc gcc-c++ ncurses-devel perl
yum install -y zlib-devel

tar解壓nginx。進入到nginx目錄

輸入 make 命令。等待執行完成後。輸入make install 。基本到這裡就安裝完成。那麼來啟動一下。驗證nginx是否成功。nginx預設埠為80

  • 配置Nginx 以達到負載均衡的效果。5種配置方式

序號

方式名稱

方式說明(1 2 3實踐測試過)

1

輪詢

預設配置 upstream xsdemo{   server 192.168.110.128:8081;   server 192.168.110.128:8082;   }

2

weight(權重)

正向代理 設定權重 upstream xsdemo{   server 192.168.110.128:8081 weight=10;   server 192.168.110.128:8082 weight=10;   }

3

ip_hash

每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端伺服器,可以解決session(並不是共享session解決)的問題。   upstream xsdemo{  ip_hash; server 192.168.110.128:8081 weight=10;   server 192.168.110.128:8082 weight=10;   }

4

fair

按後端伺服器的響應時間來分配請求,響應時間短的優先分配

5

url_hash

按訪問url的hash結果來分配請求,使每個url定向到同一個後端伺服器,後端伺服器為快取時比較有效

  • 博文采用第一種測試。修改nginx的配置檔案 nginx.conf 大概在33行上下。upstream是固定寫法後面的 xsDemo可以自定義。但是要與下面的localtion proxy_pass http://xsDemo http://後面的對應。區分大小寫。儲存以後。重啟nginx。如果tomcat沒啟動。則先啟動tomcat後再啟動nginx
upstream xsDemo {
	server 192.168.110.128:8081;
	server 192.168.110.128:8082;
	}
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
	     proxy_pass http://xsDemo;
        }
  • 看下效果 第一次是8081 再重新整理8082 來回重新整理來回切換。這就是輪詢配置方式的負載均衡
  • 使用ip_hash 可以解決session的問題。但是隻能做唯一伺服器訪問。這樣不算是負載均衡。所以這裡不再做測試給演示看。可以自行測試。

-----------------------------------------------------------------------

第二步接做Redis+Session共享。

  • 上面有Redis的安裝經驗網址。自行檢視即可。為了測試方便。允許遠端訪問虛擬機器的redis。修改配置檔案redis.conf 大概在55行左右。修改bind 後面的ip為 0.0.0.0 即可
Port           : 6379
Config file    : /etc/redis/6379.conf
Log file       : /var/log/redis_6379.log
Data dir       : /var/lib/redis/6379
Executable     : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli
方便測試開啟遠端訪問。並沒有設定密碼。修改6379.conf即可。增加密碼驗證 44行上下
# requirepass foobared 取消註釋 修改foobared為您自己要設定的密碼即可。
允許任何ip訪問設定 55行上下  bind 127.0.0.1 修改為  bind 0.0.0.0 即可。修改這些之前建議停止redis。
  • 需要第三方jar來支援session共享

tomcat-redis-session-manager1.2.jar

https://github.com/jcoleman/tomcat-redis-session-manager 連結: https://pan.baidu.com/s/1nw4SWcx 密碼: j8yv

commons-pool2-2.0.jar

連結: https://pan.baidu.com/s/1nw4SWcx 密碼: j8yv

jedis-2.7.2.jar

連結: https://pan.baidu.com/s/1nw4SWcx 密碼: j8yv

以上3個jar。需要放在tomcta的lib資料夾下面。切記是tomcat的lib下面。不是專案的lib下面。注意pool這個jar。如果有衝突會啟動失敗。所以要檢查好

  • 還需要修改context.xml檔案 切記tomcat關閉哦 context.xml檔案存在於tomcat的conf資料夾下
<?xml version='1.0' encoding='utf-8'?>
<Context>
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />  
  <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"  
   host="192.168.110.128"  
   port="6379"  
   password="xiaoshuai" 如果設定了密碼則在這裡配置上
   database="0"  redis預設16個database 第一個是0 最後一個是15
   maxInactiveInterval="60" />  
</Context>
  • 到此。配置全部完成。然後再次啟動tomcat 8081 & 8082 再啟動nginx
  • 看圖是不是真的session共享了

第一次登入到title為8888的tomcat伺服器

第二次重新整理頁面不需要重新登入。但是title變成了9999的tomcat伺服器

  • 這樣就實現了輪詢訪問伺服器。並且session共享。使用者不需要再次重新登入了。
  • 看下redis裡面的session是否和瀏覽器的一致

這樣整個簡單測試Nginx+Tomcat+Redis負載均衡Session共享實現 就已經完成了。

覺得好。可以打賞哦。是本作者親測的。所以肯定都是執行有結果的。

-----------------------------------------------------------------------

關於Nginx+Keepalived搭建高可用負載均衡環境(HA)的博文。請點選這裡https://my.oschina.net/xshuai/blog/917097