通過資料庫來實現tomcat集群

2021-08-31 15:42:28 字數 1610 閱讀 4020

前段時間一直在學習tomcat的集群,tomcat5已經配置成功了,無奈到了tomcat6上,總是不成功,出現的問題是乙個tomcat無法發現另外乙個tomcat,今天又在網上看了下,發現了乙個新的方法來實現集群。

集群無非就是實現兩個關鍵點,乙個是負載的均衡,乙個是session的複製。

負載的均衡通過apache很容易分配,前面也有介紹,就不細說了。

tomcat6的session複製,按照官網上說的tomcat5配置成功了,到了6就總是不成功。

下面說下新方法

1.編輯context.xml檔案,新增

2.建立乙個資料庫來儲存session

此兩處的引數說明如下:

drivername和connectionurl就不說了

sessiontable是指定資料庫的表名

sessionidcol指定儲存sessionid的欄位名稱

sessiondatacol指定儲存session資料的欄位名稱

sessionvalidcol指定儲存session是否失效的欄位名稱

sessionmaxinactivecol指定儲存session失效時間的欄位名稱

sessionlastaccessedcol指定儲存session最後訪問時間的欄位名稱

然後,將另外乙個tomcat的配置檔案配置成和以上相同,即可實現tomcat的session共享

最後一點,不要忘記將mysql的資料庫連線jar包拷貝到兩個tomcat的lib目錄下

集群完成,經過測試,關掉乙個tomcat,另外乙個tomcat仍然可以獲取到以前的session,但是,有一點是我擔心的,session的建立和銷毀會不會對資料庫產生太大的壓力?

另外在關閉和重啟tomcat時, tomcat 會試圖 serialize存在的session資源. 如果 sessions中相關的物件沒有實現 serializable 介面, 就會出現cannot serialize session attribute *** for 異常.

如果你不想看到該異常, 也不想儲存session. 那麼你可以在專案部署描述檔案中(如. test.xml,)(instead of just exploding the war) 的 tags中間 加上 :

這樣 tomcat 在關閉的時候就不會儲存session資源了.

如果你確實擔心資料庫的壓力,那麼可以使用將資料庫的引擎改為記憶體表,但是記憶體表不支援blob,所以你得盡量少寫一些session資料,然後使用varbinary

60000為位元組長度,大約為50kb。

如果你的應用向session中寫入的資料過多,你得考慮下。

通過以上,你的tomcat已經集群了,但是在應用層面上,依然有一些問題,需要來解決。

主要有以下幾個方面

1.集群的伺服器檔案如何同步?

你可以考慮用nfs來實現

2.集群的應用如果使用了快取,那麼快取如何同步?

這個目前我沒有好的辦法,或者你可以將不對一些資料使用快取

3.如果你的應用使用了quartz,那麼定時任務會被執行多次

這個新版本的quartz實現集群了,不過配置有些複雜,或者你可以單獨用乙個應用來跑quartz

目前我們自己寫了乙個基於時間戳的定時方案,但尚未經過集群環境的測試,不好放出來給大家使用。

通過資料庫引擎來加速MySQL資料庫

如果你是個賽車手,並且按一下按鈕就能夠立即更換引擎而不需要把車開到車庫裡去換,那會是什麼感覺呢?mysql資料庫為開發人員所做的就好像是按按鈕換引擎 它讓你選擇資料庫引擎,並給你一條簡單的途徑來切換它。mysql的自帶引擎肯定是夠用了,但是在有些情況下,其他的引擎可能要比手頭所用更適合完成任務。如果...

HeePHP通過資料庫讀取資料

從資料庫讀取資料 讀取多條記錄 讀取所有記錄 list table users all 根據條件讀取多條記錄 list table product where color red select 根據條件讀取多條記錄後分頁 list table product where size l page 讀取...

select下拉列表實現通過資料庫查詢來設定預設值

查詢網上各種資料要不比較難理解,要麼有問題,現有一種簡單通俗的理解方法 思路 讀取資料庫資料1,資料2需用到select選擇選單,但是又想每次檢視是都顯示讀資料庫的預設資訊 demo tr id tr td td td td td td td select id select option valu...