天天看點

應用直接中斷連接配接導緻資料被鎖(生産故障)

這是一個由應用重新開機連接配接直接而導緻資料被鎖的問題。

系統大緻結構

應用直接中斷連接配接導緻資料被鎖(生産故障)

基本情況:

整個架構為了統一管理db連接配接,共享連接配接。

應用通過loadbalance連接配接db通路層。

db通路層後端代理若幹db。

應用到loadbalance以mysql協定通信。

db通路層到db以JDBC方式通信。

故障: 某些資料庫中的表資料相當長一段時間被鎖,導緻應用某些場景失敗。

故障分析:應用開啟一個事務的set autocommit=0指令是從app-lb-db通路層-db,期間如果某個事務還未執行完,而app強行中斷連接配接,就會導緻app-lb的連接配接斷開,而lb并不直接斷開後端的連接配接,即lb-db通路層-db的連接配接不會斷,進而導緻db不會發生復原操作。而且此事務對某些記錄加了鎖,于是就會發生某些資料被鎖。直到db通路層檢測出該連接配接超過了idle時間才會關閉,并發送復原指令給db。

解決問題:

① lb在前端連接配接關閉時要同時關閉同會話的後端連接配接,并且db通路層要監聽lb的連接配接,一旦關閉則要做復原操作。

②去掉lb,提供用戶端loadbalance,應用一旦關閉連接配接db通路層也要關閉連接配接。

========廣告時間========

<a href="http://blog.csdn.net/wangyangzhizhou/article/details/74080321">為什麼寫《Tomcat核心設計剖析》</a>

=========================

歡迎關注:

應用直接中斷連接配接導緻資料被鎖(生産故障)