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共享實現 就已經完成了。
覺得好。可以打賞哦。是本作者親測的。所以肯定都是執行有結果的。