簡介
本檔案介紹在思科原則套件(CPS)中復原subversion(SVN)同步的程式。
必要條件
需求
思科建議您瞭解以下主題:
附註:思科建議您必須具有對CPS CLI的超級使用者訪問許可權。
採用元件
本文中的資訊係根據以下軟體和硬體版本:
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
背景資訊
Apache SVN是在CPS中使用的版本建立和修訂控制系統。它維護所有CPS策略配置,並且擁有可用於建立、更新和刪除檔案的儲存庫。每次對伺服器上的檔案進行更改時,SVN都會維護檔案差異,並且每次更改都會生成一個修訂號。
通常,大多數與SVN的互動是通過策略生成器(PB)執行的。
換句話說,CPS通過使用SVN或subversion在SVN資料庫中儲存策略配置資料。它提供圖形使用者介面(GUI),用於檢視和編輯名為Policy Builder(PB)的SVN資料庫(DB),該資料庫通過外部介面、虛擬IP(VIP)和策略導向器(PD)連線到pcrfclient/操作和維護(OAM)虛擬機器。
兩個pcrfclients的SVN DB中的配置資料必須在任一時間點保持同步。
CPS包括pcrfclient節點的主用和備用高可用性(HA)模型部署,其中一個節點作為主用節點運行,另一個節點作為備用節點運行。
問題
在某些情況下,CPS中pcrfclient節點之間的SVN可能會不同步,然後需要使其同步。
在某些情況下,大多數情況下是在發佈策略後,當仲裁伺服器切換時,或者即使無法訪問SVN伺服器,也會在目標儲存庫上建立SVN鎖定。
然後SVN同步將過期,可在中看到 /var/log/httpd/svnsync.log
在受影響的pcrfclient中。建立這些鎖時,CPS診斷輸出會顯示SVN同步錯誤。從群集管理器或pcrfclient運行此命令以檢查SVN同步狀態。
[root@installer ~]# diagnostics.sh --svn
CPS Diagnostics HA Multi-Node Environment
----------------------------
Checking svn sync status between pcrfclient01 & 02...
svn is not sync between pcrfclient01 & pcrfclient02...[FAIL]
Corrective Action(s): Run ssh pcrfclient01 /var/qps/bin/support/recover_svn_sync.sh
在pcrfclient節點之間恢復SVN同步的過程
方針1
在沒有建立SVN鎖時使用此方法。
步驟1.登入到診斷中所示的各個pcrfclient節點,並運行此命令以在主用和備用pcrfclient節點之間同步SVN。
/var/qps/bin/support/recover_svn_sync.sh
如果SVN同步成功,則命令輸出:
[root@dc1-pcrfclient01 ~]# /var/qps/bin/support/recover_svn_sync.sh
=================================================================
[Thu Aug 25 09:10:44 UTC 2022] [INFO] /var/qps/bin/support/recover_svn_sync.sh script is running from console
-----sync betweeen pcrfclient01 & pcrfclient02 --------------------
[Thu Aug 25 09:10:47 UTC 2022] [INFO] Doing SVN sync between pcrfclient01 and pcrfclient02...
[Thu Aug 25 09:11:06 UTC 2022] [INFO] SVN are already in sync between pcrfclient01 and pcrfclient02
[Thu Aug 25 09:11:07 UTC 2022] [INFO] SVN UUID are matched between pcrfclient01 and pcrfclient02
[Thu Aug 25 09:11:07 UTC 2022] [INFO] SVN sync completed successfully for pcrfclient01 & pcrfclient02
[root@dc1-pcrfclient01 ~]#
如果此命令無法同步SVN並拋出與目標或映象儲存庫中的SVN鎖定相關的此錯誤,則轉到方法2。此方法涉及SVN竊取鎖定。
步驟2.從群集管理器或pcrfclient運行此命令,以驗證SVN同步狀態。
[root@installer ~]# diagnostics.sh --svn
CPS Diagnostics HA Multi-Node Environment
---------------------------
Checking svn sync status between pcrfclient01 & pcrfclient02...[PASS]
[root@installer ~]#
方針2
如果在目標儲存庫或映象儲存庫中建立SVN鎖定,則可以使用此方法。
步驟1.按照診斷中的說明登入到相應的pcrfclient節點並運行此命令。
Command syntax:
svnsync synchronize file:///var/svn/repos-mirror http://svn.example.com/repos
Sample command:
/usr/bin/ssh -k qns@pcrfclient01 -t '' '/usr/bin/svnsync info http://pcrfclient02/repos-proxy-sync'
[root@dc1-pcrfclient01 ~]# /usr/bin/ssh -k qns@pcrfclient01 -t '' '/usr/bin/svnsync info http://pcrfclient02/repos-proxy-sync'
Source URL: http://pcrfclient01/repos-proxy-sync
Source Repository UUID: f1937c9d-1688-463a-9d4e-db944d9aafb1
Last Merged Revision: 170
[root@dc1-pcrfclient01 ~]#
2.運行此命令可竊取目標或映象儲存庫上的SVN鎖。
/usr/bin/ssh -k qns@pcrfclient01 -t '' '/usr/bin/svnsync sync --steal-lock http://pcrfclient02/repos-proxy-sync'
附註:此命令會使svnsync在必要時盜取它在目標或映象儲存庫上使用的鎖,以確保對儲存庫的獨佔訪問。僅當目標儲存庫或映象儲存庫中存在鎖定且已知為過時時(即確定沒有其他訪問儲存庫的svnsync進程時)才必須使用此選項。
3.運行此命令以在主用和備用pcrfclient節點之間同步SVN。
[root@dc1-pcrfclient01 ~]# /var/qps/bin/support/recover_svn_sync.sh
=================================================================
[Thu Aug 25 09:10:44 UTC 2022] [INFO] /var/qps/bin/support/recover_svn_sync.sh script is running from console
-----sync betweeen pcrfclient01 & pcrfclient02 --------------------
[Thu Aug 25 09:10:47 UTC 2022] [INFO] Doing SVN sync between pcrfclient01 and pcrfclient02...
[Thu Aug 25 09:11:06 UTC 2022] [INFO] SVN are already in sync between pcrfclient01 and pcrfclient02
[Thu Aug 25 09:11:07 UTC 2022] [INFO] SVN UUID are matched between pcrfclient01 and pcrfclient02
[Thu Aug 25 09:11:07 UTC 2022] [INFO] SVN sync completed successfully for pcrfclient01 & pcrfclient02
[root@dc1-pcrfclient01 ~]#
2.從群集管理器或pcrfclient運行此命令,以驗證SVN同步狀態。
[root@installer ~]# diagnostics.sh --svn
CPS Diagnostics HA Multi-Node Environment
---------------------------
Checking svn sync status between pcrfclient01 & pcrfclient02...[PASS]
[root@installer ~]#