Nginx+Redis+tomcat實現(xiàn)服務(wù)器集群和session共享
- 概念:
- 概念:反向代理web服務(wù)器,作?于服務(wù)器移盆,管理多個服務(wù)器币喧。
- 多進(jìn)程轨域,多個?作進(jìn)程,?個主進(jìn)程杀餐。
- ?的:單節(jié)點故障干发,實現(xiàn)負(fù)載均衡,load balance史翘,?阻塞枉长,解決?客戶量并發(fā)請求問題。
- 代理:
- 正向代理:作?于客戶端琼讽。
- 反向代理:作?在服務(wù)器端必峰,客戶端不知道反向代理服務(wù)器的存在。
- 單節(jié)點故障:
- ?并發(fā)請求下钻蹬,服務(wù)器只有?個吼蚁,如果服務(wù)器掛掉,單節(jié)點發(fā)?故障脉让,整個就不能正常運?了桂敛。
- 解決?案:配置服務(wù)器集群功炮。使? nginx ,通過ip 管理多個 tomcat服務(wù)器术唬。
模擬偽集群
解壓兩個tomcat薪伏,在serve.xml?件配置兩套不同的端?,8080粗仓,8005嫁怀,8009。
-
修改Nginx的nginx.conf配置?件借浊,實現(xiàn)負(fù)載均衡塘淑。
- 服務(wù)器集群配置
- nginx不能處理jsp??,交由tomcat處理蚂斤。
- 代碼參考:
#服務(wù)器集群配置 upstream jeffrey.com{ server 127.0.0.1:18080 weight=1; #服務(wù)器配置存捺,weight是權(quán)重,權(quán)重越?曙蒸,分配的概率越?捌治。 server 127.0.0.1:28080 weight=2; } #當(dāng)前的nginx配置 server { listen 80;#偵聽端?號 server_name localhost; #當(dāng)前服務(wù)的域名.如果是localhost:8080的請求,則交給jeffrey.com的集群來處理纽窟。 location / { proxy_pass http://jeffrey.com ; #與服務(wù)器集群的名稱?致 proxy_redirect default; } location = /50x.html { root html; } }
-
關(guān)閉nginx :
- nginx -s stop
- nginx -s quit
-
這里出現(xiàn)一個新的問題
- ?個服務(wù)器掛掉后肖油,nginx不會?刻判斷其死亡,?是等待臂港,但是死掉的服務(wù)器?的信息怎么辦森枪?
- ?個應(yīng)?通常有多個服務(wù)器,登錄成功后审孽,session只會在?臺存儲县袱,想要多臺服務(wù)器都識別到這個session,后端統(tǒng)?存儲瓷胧。
- 所以显拳,集群產(chǎn)?的新問題:session共享。
-
解決session共享
- session復(fù)制
- 后端統(tǒng)?存儲搓萧,后端統(tǒng)?找?個中間件將Session存起來即可杂数,這個中間件是數(shù)據(jù)庫redis或者緩存。此時瘸洛,tomcat作為客戶端揍移,redis作為服務(wù)端。
- 不要使?session反肋。
redis實現(xiàn)session共享
改寫tomcat底層
三個session的jar包復(fù)制到tomcat下的lib中那伐,commons-pool2-2.2.jar,jedis-2.5.2.jar,tomcat-redissession-manager-2.0.0.jar。
安裝redis server
-
tomcat修改conf/context.xml,新增
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" /> <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager" host="localhost" port="6379" database="0" maxInactiveInterval="60" />
- 啟動redis-server.exe
//啟動 redis-server redis.windows.conf //關(guān)閉 shutdown
- 啟動tomcat,啟動nginx罕邀;
-
nginx,tomcat,redis集群中畅形。redis處理了兩件事情,session共享诉探,緩存日熬。
- 緩存的問題,緩存穿透和擊穿肾胯。
-
緩存處理流程:
- 前臺請求竖席,后臺先從緩存中取數(shù)據(jù),取到直接返回結(jié)果敬肚。
- 取不到時從數(shù)據(jù)庫中取毕荐,數(shù)據(jù)庫取到更新緩存,并返回結(jié)果艳馒。
- 數(shù)據(jù)庫也沒取到憎亚,那直接返回空結(jié)果。