1. 程式人生 > >nginx+tomcat+redis負載均衡,實現session共享

nginx+tomcat+redis負載均衡,實現session共享

session共享

實驗環境:
系統: centos 7.4  3.10.0-327.el7.x86_64
docker: 18.03.0-ce
docker-compose:docker-compose version 1.21.0
redis: 4.0.9
nginx: 1.12.2
tomcat:8.5.30
jdk:1.8.161

基礎理論

session 統一方案:
1、單機的session會話保持機制如nginx的ip-hash,如果單個機器下線,那麽session將會全部丟失
2、session共享,如tomcat集群,多個應用服務器共享同步session,單臺機器下線,根據負載均衡原理,調度器會遍歷尋找可用節點,不足在於,只能是同一種中間件如tomcat集群。並且session復制會帶來性能損失,session內容通過廣播同步給成員,會造成網絡流量瓶頸。

3、session服務器 如memcached/redis ,應用服務器接受請求後會將session保存cache db中,當應用服務器出現問題,調度器會遍歷所有節點,沒發現都沒有這個session時會去成cached db中查找,如果找到就復制到本機,這樣就能實現session共享和高可用。
實驗使用 session服務器的方式

tomcat:
Tomcat的工作模式3種:獨立Servlet,進程內servlet,進程外servlet。
Tomcat是一個基於組件的服務器,他的構建組件都是可以配置的,其中最外層的組件是Catalina Servlet容器,其他組一定要按照一定的格式要求配置在這個頂層的容器中。

  Tomcat各個組件是在$CATLINA_HOME/conf/server.xml文件中配置的。
tomat是一個servlet容器,來處理http請求。在平時的使用中我們都會再瀏覽器中輸入http地址來訪問服務資源,比如格式http://host[":"port][abs_path] ,這裏我們將它做為中間件使用

nginx
nginx負載均衡實現方式: 分別是

  • 輪詢,
  • 加權輪詢,
  • least-conn, 最小連接
  • ip-hash,
  • fail,
  • url-hash

mysql主從理論

  • 1、主從建立連接後
  • 2、從庫會生成一個IO線程 一個SQL線程,
  • 3、IO線程會去請求主庫的二進制日誌並將日誌記錄到本地的 中繼日誌中
  • 4、主庫會生成一個log dump線程 用來給從庫的IO線程傳遞二進制日誌
  • 5、從庫的SQL線程會解析中繼日誌生成具體操作,最終實現主從的操作一致數據一致。
    理論待繼續完善, 實驗拓撲如下

2、拓撲

技術分享圖片
為了更好的理解安裝,軟件都直接使用源碼安裝的方式

3、安裝

3.1、docker安裝

需要先了解一下基本原理: docker基礎,第四節安裝
?docker組成:docker daemon, docker client, 鏡像,倉庫,容器
客戶端通過api連接服務端,本地命令執行服務端執行完之後返回給客戶端,鏡像可以直接從dockerhub中下載,鏡像可以生成容器,容器可以打包成鏡像,倉庫可以保存鏡像。如圖
技術分享圖片

3.2、nginx安裝

nginx+tomcat+redis負載均衡,實現session共享