疑難排解復寫 troubleshooting-replication
此頁面提供如何疑難排解復寫問題的資訊。
問題 problem
復寫(非反向復寫)由於某些原因而失敗。
解決方法 resolution
復寫失敗的原因有很多。 本文會說明分析這些問題時可能會採取的方法。
按一下[啟動]按鈕時,是否會觸發復寫? 如果NOT,則執行下列動作:
- 前往
/crx/explorer並以admin身分登入。 - 開啟「內容總管」
- 檢視節點
/bin/replicate或/bin/replicate.json是否存在。 如果節點存在,則刪除它並儲存。
復寫是否在復寫代理程式佇列中排入佇列?
移至/etc/replication/agents.author.html檢查此專案,然後按一下復寫代理程式以檢查。
如果一個代理程式佇列或幾個代理程式佇列卡住:
-
佇列是否顯示 已封鎖 狀態? 如果存在,則發佈執行個體是否未執行或無回應? 檢查發佈執行個體看看它有什麼問題。 也就是說,檢查記錄檔,並檢視是否發生OutOfMemory錯誤或某些其他問題。 如果速度很慢,則進行對話串傾印並加以分析。
-
佇列狀態是否顯示佇列為作用中 — # pending? 復寫工作可能卡在等待發佈執行個體或Dispatcher回應的通訊端讀取中。 這可能表示發佈執行個體或Dispatcher處於高負載或卡在鎖定中。 在此情況下,從作者進行對話串傾印並發佈。
- 在執行緒傾印分析器中開啟來自作者的執行緒傾印,檢查它是否顯示復寫代理程式的sling事件工作卡在socketRead中。
- 在執行緒傾印分析器中從發佈開啟執行緒傾印,並分析可能導致發佈執行個體未回應的原因。 您應該會看到名稱中有POST
/bin/receive的執行緒。 這是從作者接收復寫的執行緒。
如果所有代理程式佇列都卡住
-
由於存放庫損毀或某些其他問題,可能無法在/var/replication/data下序列化特定內容片段。 如需相關錯誤,請檢視logs/error.log 。 若要清除錯誤的復寫專案,請執行下列動作:
- 前往
https://<host>:<port>/crx/de並以管理員使用者身分登入。 - 按一下頂端功能表中的「工具」。
- 按一下放大鏡按鈕。
- 選取「XPath」作為「型別」。
- 在[查詢]方塊中輸入此查詢
/jcr:root/var/eventing/jobs//element(*,slingevent:Job) order by @slingevent:created - 按一下「搜尋」。
- 在結果中,排名最前的專案是最新的Sling事件工作。 按一下每個復寫,然後尋找符合佇列頂端所顯示內容的停滯復寫。
- 前往
-
Sling事件框架工作佇列可能有問題。 嘗試在
/system/console中重新啟動org.apache.sling.event套件。 -
可能是工作處理已關閉。 您可以在Sling事件標籤中的Felix主控台下檢視它。 檢查是否顯示 — Apache Sling事件(作業處理已停用!)
- 如果是,請檢查Felix主控台中「設定」索引標籤下的Apache Sling工作事件處理常式。 可以取消勾選「啟用工作處理」核取方塊。 如果勾選後仍顯示「工作處理已停用」,則檢查
/apps/system/config下是否有任何覆蓋正在停用工作處理。 請嘗試使用布林值true為jobmanager.enabled建立osgi:config節點,並重新檢查啟動是否開始,以及佇列中是否有其他工作。
- 如果是,請檢查Felix主控台中「設定」索引標籤下的Apache Sling工作事件處理常式。 可以取消勾選「啟用工作處理」核取方塊。 如果勾選後仍顯示「工作處理已停用」,則檢查
-
DefaultJobManager組態可能也會進入不一致的狀態。 當有人透過OSGi主控台手動修改「Apache Sling工作事件處理常式」設定(例如,停用並重新啟用「啟用工作處理」屬性並儲存設定)時,就會發生這種情況。
- 此時,儲存在
crx-quickstart/launchpad/config/org/apache/sling/event/impl/jobs/DefaultJobManager.config的DefaultJobManager組態進入不一致的狀態。 即使「Apache Sling作業事件處理常式」屬性將「作業處理已啟用」顯示為已勾選狀態,當使用者導覽至「Sling事件」標籤時,會顯示訊息 — 「作業處理已停用」且復寫無法運作。 - 若要解決此問題,請導覽至OSGi主控台的「設定」頁面,並刪除「Apache Sling工作事件處理常式」設定。 然後重新啟動叢集的主節點,讓設定回到一致的狀態。 這應該會修正問題,並讓復寫可以重新開始運作。
- 此時,儲存在
建立replication.log
有時候,在DEBUG層級將所有的復寫記錄檔設定為新增到個別的記錄檔中會很有幫助。 執行方法:
-
前往
https://<host>:<port>/system/console/configMgr並以管理員使用者身分登入。 -
尋找Apache Sling Logging Logger Factory,並按一下工廠設定右側的 + 按鈕以建立執行個體。 這會建立新的記錄日誌程式。
-
設定設定如下:
- 記錄層級:
DEBUG - 記錄檔路徑:
logs/replication.log - 類別:
com.day.cq.replication
- 記錄層級:
-
如果您懷疑此問題與Sling事件/工作有任何關係,您也可以在
categories:org.apache.sling.event下新增此Java;套件。
暫停復寫代理程式佇列 pausing-replication-agent-queue
有時候,暫停復寫佇列以減輕作者系統的負載,而不停用它可能是合適的。 目前,這只能透過暫時設定無效連線埠的駭客攻擊來完成。 從5.4開始,復寫代理程式佇列中會有暫停按鈕,但有一些限制:
- 狀態不會持續存在。 也就是說,如果您重新啟動伺服器或回收復寫組合,就會回到執行狀態。
- 暫停會閒置較短的一段時間(沒有其他執行緒復寫的活動後出現1小時)。 這是因為Sling中的某項功能可避免閒置執行緒。 檢查工作佇列執行緒是否長時間未使用。 如果是,它會開始清理週期。 由於清理週期,它會停止執行緒,因此會遺失暫停的設定。 由於作業持續存在,它會起始新的執行緒來處理佇列,沒有暫停組態的詳細資訊。 因此,佇列會進入執行狀態。
使用者啟動時不會復寫頁面許可權 page-permissions-are-not-replicated-on-user-activation
不會復寫頁面許可權,因為這些許可權儲存在授予存取權的節點下,而不是儲存在使用者中。
一般而言,頁面許可權不應從作者復寫至發佈,預設情況下也不應如此。 這是因為在這兩個環境中,存取許可權應該不同。 因此,Adobe建議您在publish上設定ACL (與編寫分開)。
將名稱空間資訊從作者復寫到發佈時封鎖復寫佇列 replication-queue-blocked-when-replicating-namespace-information-from-author-to-publish
嘗試將名稱空間資訊從製作執行個體復寫到發佈執行個體時,有時復寫佇列會被封鎖。 發生此狀況是因為復寫使用者沒有jcr:namespaceManagement許可權。 若要避免此問題,請確定:
- 復寫使用者(在Transport tab>User下設定)也存在於發佈執行個體上。
- 使用者在安裝內容的路徑具有讀取和寫入許可權。
- 使用者在存放庫層級具有
jcr:namespaceManagement許可權。 您可以授與許可權,如下所示:
- 以管理員身分登入CRX/DE (
https://<host>:<port>/crx/de/index.jsp)。 - 按一下「存取控制」標籤。
- 選取存放庫。
- 按一下新增專案 (加號圖示)。
- 輸入使用者的名稱。
- 從許可權清單中選取
jcr:namespaceManagement。 - 按一下「確定」。