이 문서에서는 PCRFClient01과 PCRFClient02 간에 SVN(Subversion Control) 저장소를 동기화하는 방법에 대해 설명합니다.
PB(Policy Builder)의 모든 정책 컨피그레이션은 SVN 리포지토리로 저장됩니다.따라서 고가용성(HA)을 유지하려면 두 PCRFClient VM(Virtual Machine) 모두에서 동일한 SVN UUID(Universal Unique Identifier)를 가져야 합니다. 그러나 Cisco CPS(Policy Suite) 버전 7.X는 PCRFClient VM 전체에서 동일한 UUID를 가지고 있지 않습니다.즉, 상위 CPS 버전은 동일한 UUID를 갖습니다.Cisco 버그 ID CSCuu85319라는 개선 버그가 입력되었습니다. 두 PCRFClient0X VM에 동일한 개정 번호가 있는 경우 HA를 달성할 수 있습니다.
UUID는 두 PCRFClient VM에서 동일하지 않으므로 다음 명령을 입력합니다.
svn info http://pcrfclient01/repos/configuration
svn info http://pcrfclient02/repos/configuration
이러한 QNS(Quantum Network Suite) 오류 로그를 확인할 수 있습니다.이러한 오류 메시지는 svn_uuid_mismatch.sh 스크립트로 확인할 수 있습니다.이 스크립트는 이 문서의 끝에 제공됩니다.
==qns-1.log==
2015-06-10 00:51:15,058 [pool-4-thread-1] WARN
c.b.r.impl.ReferenceDataManager - SVN directory failed in updating
2015-06-10 01:51:44,050 [pool-4-thread-1] WARN
c.b.r.impl.ReferenceDataManager - SVN directory failed in updating
2015-06-10 03:52:41,061 [pool-4-thread-1] WARN
c.b.r.impl.ReferenceDataManager - SVN directory failed in updating
==Service-qns-1.log==
svn: Repository UUID '70e98d90-b9c7-4c5b-a3db-681dd68c62a6'
doesn't match expected UUID 'ed2f2f76-f588-443e-9bb8-3fb05abd903b'
svn: Repository UUID '70e98d90-b9c7-4c5b-a3db-681dd68c62a6'
doesn't match expected UUID 'ed2f2f76-f588-443e-9bb8-3fb05abd903b'
svn: Repository UUID '70e98d90-b9c7-4c5b-a3db-681dd68c62a6'
doesn't match expected UUID 'ed2f2f76-f588-443e-9bb8-3fb05abd903b'
아래 그림과 같이 UUID가 VM 간에 다른 것을 확인할 수 있지만 버전은 동일해야 합니다.두 PCRFClient VM의 SVN 버전이 모두 동일한 경우 SVN 저장소 동기화가 있는 다음 고가용성을 갖게 됩니다.
===PCRFClient01===
[root@pcrfclient01 ~]# svn info http://pcrfclient01/repos/configuration
Path: configuration
URL: http://pcrfclient01/repos/configuration
Repository Root: http://pcrfclient01/repos
Repository UUID: ed2f2f76-f588-443e-9bb8-3fb05abd903b
Revision: 392 <<<< revision number
Node Kind: directory
Last Changed Author: broadhop
Last Changed Rev: 392
Last Changed Date: 2015-06-01 15:52:12 -0600 (Mon, 01 Jun 2015)
===PCRFClient02===
[root@pcrfclient01 ~]# svn info http://pcrfclient02/repos/configuration
Path: configuration
URL: http://pcrfclient02/repos/configuration
Repository Root: http://pcrfclient02/repos
Repository UUID: 70e98d90-b9c7-4c5b-a3db-681dd68c62a6
Revision: 392 <<<< revision number
Node Kind: directory
Last Changed Author: broadhop
Last Changed Rev: 392
Last Changed Date: 2015-06-01 15:52:12 -0600 (Mon, 01 Jun 2015)
이전 섹션에서는 SVN 저장소 동기화를 확인하는 방법에 대해 설명합니다.이 섹션에서는 SVN 동기화를 수정하는 방법에 대해 설명합니다.PCRFClient01이 기본 이고 PCRFClient02가 보조 이고 PCRFClient02 SVN 저장소가 동기화되지 않았다고 가정합니다.
PCRFClient02 SVN 저장소를 PCRFClient01과 동기화하려면 다음 단계를 완료하십시오.
crontab -e
Comment this cron job entry:
/usr/bin/svnsync sync http:// pcrfclient02/repos-proxy-sync
<Location /repos-proxy-sync>
DAV svn
SVNPath /var/www/svn/repos
Order deny,allow
Deny from all
Allow from pcrfclient01 <<< # customer host name of PCRFClient01 VM
</Location>
service httpd restart
/usr/bin/svnsync sync http://pcrfclient02/repos-proxy-sync
잠금 오류가 보고되면 이 명령을 입력한 다음 svnsync 명령을 다시 시도합니다.
/usr/bin/svn propdel svn:sync-lock --revprop -r 0 http:// pcrfclient02/repos-proxy-sync
오류가 계속 표시되면 Reinitialize SVN Synchronization(SVN 동기화 다시 초기화)으로 진행합니다.
crontab -e
/usr/bin/svnsync sync http://pcrfclient02/repos-proxy-sync
SVN 저장소 동기화 수정 섹션의 4단계에서 오류가 발생한 경우에만 이 단계를 수행합니다.이전 섹션에서 오류가 발생하지 않으면 이러한 단계를 무시할 수 있습니다.
listen svn_proxy lbvip02:80
mode http
balance roundrobin
option httpchk
option httpclose
option abortonclose
server pcrfclient01 pcrfclient01:80 check
#server pcrfclient02 pcrfclient02:80 check backup
/etc/init.d/heartbeat restart
listen svn_proxy lbvip02:80
mode http
balance roundrobin
option httpchk
option httpclose
option abortonclose
server pcrfclient01 pcrfclient01:80 check
#server pcrfclient02 pcrfclient02:80 check backup
/etc/init.d/heartbeat restart
tar -czf /var/tmp/repos.tar.gz /var/www/svn/repos
mkdir -p /var/www/svn/repos
rmdir /var/www/svn/repos
/usr/bin/svnadmin create /var/www/svn/repos
chown -R apache:apache /var/www/svn/repos
#!/bin/sh
#/var/www/svn/repos/hooks/pre-revprop-change
exit 0
chmod 700 /var/www/svn/repos/hooks/pre-revprop-change
chown apache:apache /var/www/svn/repos/hooks/pre-revprop-change
service httpd restart
/usr/bin/svnsync init http://pcrfclient02/repos-proxy-sync
http:// pcrfclient01/repos-proxy-sync
/usr/bin/svnsync sync http:// pcrfclient02/repos-proxy-sync
listen svn_proxy lbvip02:80
mode http
balance roundrobin
option httpchk
option httpclose
option abortonclose
server pcrfclient01 pcrfclient01:80 check
server pcrfclient02 pcrfclient02:80 check backup
/etc/init.d/heartbeat restart
listen svn_proxy lbvip02:80
mode http
balance roundrobin
option httpchk
option httpclose
option abortonclose
server pcrfclient01 pcrfclient01:80 check
server pcrfclient02 pcrfclient02:80 check backup
/etc/init.d/heartbeat restart
crontab -e/usr/bin/svnsync sync http://pcrfclient02/repos-proxy-sync
PCRFClient VM 간의 SVN 동기화를 확인하려면 CPS 시스템에 이 스크립트를 넣으십시오.
#!/bin/bash
a=$(svn info http://pcrfclient01/repos/configuration | grep -i Revision | grep -o '[0-9]*')
b=$(svn info http://pcrfclient02/repos/configuration | grep -i Revision | grep -o '[0-9]*')
if [ "$a" == "$b" ]; then
echo -e "SVN repository Synchronization:\e[0;32m PASS \e[0m"
echo -e "PCRFClient01 SVN repository revision number is : \e[1;33m $a \e[0m"
echo -e "PCRFClient02 SVN repository revision number is : \e[1;33m $b \e[0m"
else
echo -e "SVN repository Synchronization :\e[0:31m FAIL \e[0m"
echo -e "PCRFClient01 SVN repository revision number is : \e[1;33m $a \e[0m"
echo -e "PCRFClient02 SVN repository revision number is : \e[1;33m $b \e[0m"
fi
개별 QNS VM에서 SVN UUID 관련 오류 메시지를 모니터링하려면 CPS 시스템에 이 스크립트를 넣으십시오.
#!/bin/bash
for HN in `hosts.sh |grep qns`;
do echo -e "\e[1;32m $HN\e[0m";
echo -e "\e[1;33m===qns-1.log===\e[0m"
ssh $HN grep -wh "SVN directory failed" 2>/dev/null /var/log/broadhop/qns-1.log | tail -10;
echo -e "\e[1;33m===service-qns-1.log===\e[0m"
ssh $HN grep -wh "match expected UUID" 2>/dev/null /var/log/broadhop/service-qns-1.log | tail -10;
done