目錄

簡介

必要條件

需求

採用元件

背景資訊

問題

在pcrfclient節點之間恢復SVN同步的過程

方針1

方針2

簡介

本檔案介紹在思科原則套件(CPS)中復原subversion(SVN)同步的程式。

必要條件

需求

思科建議您瞭解以下主題：

- Linux

- CPS

附註：思科建議您必須具有對CPS CLI的超級使用者訪問許可權。

採用元件

本文中的資訊係根據以下軟體和硬體版本：

- CPS 20.2

- 整合運算系統(UCS)-B

本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除（預設）的組態來啟動。如果您的網路運作中，請確保您瞭解任何指令可能造成的影響。

背景資訊

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 ~]#