本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
疑難排解錯誤:等待資料集名稱解除鎖定時逾時
本頁說明當您看到環境中的另一個應用程式正在鎖定共用資料集時,如何解決錯誤。
-
引擎: AWS 藍色時代
-
組件:布魯薩姆
如果您在使用 AWS Blu Age 引擎的 AWS 大型主機現代化應用程式的 Amazon CloudWatch 日誌中看到此錯誤,並且在具有高可用性模式的環境中執行,則表示另一個應用程式正在共用資料集上鎖。通常情況下,如果其他應用程式當機或以其他方式失敗且未解除鎖定,就會發生這種情況。
尋找失敗的應用程式,並檢查它是否使用錯誤訊息中提到的相同資料集。檢查應用程式是否在具有高可用性模式的執行階段環境中執行。引發逾時例外狀況的應用程式無法繼續,並會顯示Failed
狀態。
常見原因
應用程式example-app-1
嘗試鎖定寫入作業example-record-1
的記錄。此作業會在擁有的資料集example-dataset-1
上建立鎖定example-record-1
,也會建立鎖定example-record-1
本身。現在,example-app-2
另一個應用程序嘗試鎖定相同的記錄example-record-1
。資料集和記錄已鎖定,因此請example-app-2
等待鎖定釋放。如果example-app-1
當機,資料集上的保留鎖定example-dataset-1
仍然存在,這會導example-app-2
致取消其寫入嘗試並引發逾時例外狀況。這種死結情況可以防止所有應用程序到達example-dataset-1
。
解析度
若要立即解決此情況,您可以強制釋放鎖定。為了防止 future 發生類似情況,您可以配置兩個控制 Blusam auto 修復機制的參數。
強制鎖定釋放
Blusam 鎖定管理器使用 Amazon ElastiCache (RedisOSS)在應用程序之間提供共享鎖。若要解除中的鎖定 ElastiCache,請使用 Redis CLI 公用程式。您無法刪除個別記錄鎖定。您必須移除擁有資料集中的所有鎖定。請完成下列步驟:
-
ElastiCache 使用以下命令 Connect 到您的:
redis-cli -h
hostname
-pport
您可以在 ElastiCache 控制台中找到您 ElastiCache 的詳細信息,位於 https://console.aws.amazon.com/elasticache/
。 -
輸入您的密碼。
-
輸入您要執行的命令,如下所示:
Command 用途 KEYS *
獲取所有現有的密鑰。
KEYS *
YOUR_DATASET_NAME
取得資料集鎖定金鑰。
DEL
THE_RETURNED_KEY
刪除資料集鎖定。
FLUSHDB
清理整個 Redis 的。
警告
Redis 快取中的所有資料都會遺失。如果 Redis 用於其他目的,例如處理 http 會話,則可能不想使
FLUSHDB
用。
配置布魯桑自 auto 修復機制
Blusam 鎖定管理器包括一個 auto 修復機制,以防止數據集或記錄死鎖。您可以在應用程式定義 (application-main.yml
) 中調整下列參數,以配置 auto 修復機制:
-
locksDeadTime
: 是指應用程序可以保持鎖的最長時間。當這段時間過去時,鎖定聲明過期並立即釋放。locksDeadTime
值以毫秒為單位,預設值為 1000。 -
locksCheck
:定義用於檢查鎖定的 Blusam 鎖定管理員策略。所有 Blusam 鎖定 ElastiCache 都有時間戳,並且有到期時間。locksCheck
參數值決定是否移除過期的鎖定。-
off
:任何時候都不會執行任何檢查。可能會發生死結。(不建議使用) -
reboot
:在大型主機現代化執行階段環境中執行的 AWS 大型主機現代化應用程式執行個 AWS 體啟動或重新啟動時,會執行檢查。所有過期的鎖定都會立即釋放。(預設值) -
timeout
:在大型主機現代化執行階段環境中執行的 AWS 大型主機現代化應用程式執行個 AWS 體啟動或重新啟動時,或在嘗試鎖定資料集期間逾時到期時,會執行檢查。過期的鎖定會立即釋放。
-
如需 AWS Blu Age 應用程式之應用程式定義的詳細資訊,請參閱AWS 藍光時代的應用程序定義。
布魯薩姆鎖管理器
在使用高可用性模式的 AWS 大型主機現代化執行階段環境中, AWS Blu Age 應用程式可能會部署多次。對於處理 Blusam 資料集的應用程式,可能會發生並行存取問題。Blusam 鎖管理器確保數據完整性,並通過使用應用程序之間提供共享鎖來管理對記錄和數據集的讀寫訪問。 ElastiCache這種機制允許多個應用程序同時讀取記錄,並確保一次只有一個應用程序寫入記錄。
寫鎖
若要更新或刪除特定記錄,應用程式必須先鎖定擁有該記錄的資料集,然後鎖定記錄本身。鎖定記錄時,會釋放資料集鎖定,同一資料集中的其他記錄可供使用。更新或刪除作業完成時,會釋放保留的記錄鎖定。一次只有一個應用程式可以更新記錄,如果定義的應用程式原則允許等待釋放,則會封鎖其他應用程式讀取或寫入,直到釋放鎖定為止。
讀取鎖
只要記錄或資料集上沒有寫入鎖定,多個應用程式就可以同時讀取相同的記錄。若要鎖定寫入作業的記錄,必須釋放所有讀取鎖定。
注意
Blusam 鎖定管理器使用相同的鎖定機制處理來自給定應用程序中的多個線程的訪問。