简介
本文档介绍在思科策略套件(CPS)中恢复subversion(SVN)同步的过程。
先决条件
要求
Cisco 建议您了解以下主题:
注意:Cisco建议您必须拥有对CPS CLI的超级用户权限。
使用的组件
本文档中的信息基于以下软件和硬件版本:
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
背景信息
Apache SVN是CPS中使用的版本创建和修订控制系统。它维护所有CPS策略配置,并且拥有可用于创建、更新和删除文件的存储库。每次对服务器上的文件进行更改时,SVN都会维护文件差异,并且每次更改都会生成一个修订号。
通常,大多数与SVN的交互是通过策略生成器(PB)执行的。
换句话说,CPS通过使用SVN或颠覆在SVN数据库中存储策略配置数据。提供图形用户界面(GUI),用于查看和编辑名为Policy Builder(PB)的SVN数据库(DB),该数据库通过外部接口、虚拟IP(VIP)和策略导向器(PD)连接到pcrfclient/操作与维护(OAM)虚拟机。
两个pcrfclients的SVN DB中的配置数据必须在任一时间点同步。
CPS包括pcrfclient节点的主用和备用高可用性(HA)模式部署,其中一个节点作为主用节点运行,另一个节点作为备用节点运行。
问题
在某些情况下,CPS中pcrfclient节点之间的SVN可能不同步,然后需要使其同步。
在某些情况下,大多数情况下,在策略发布后,在仲裁切换vip时或即使无法访问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.从Cluster Manager或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 ~]#