목차

소개

SVN UUID 불일치

PCRFClient VM에서 SVN 동기화를 확인합니다.

SVN 저장소 동기화 수정

SVN 동기화 다시 초기화

스크립트

check_svn_sync.sh

svn_uuid_mismatch.sh

소개

이 문서에서는 PCRFClient01과 PCRFClient02 간에 SVN(Subversion Control) 저장소를 동기화하는 방법에 대해 설명합니다.

SVN UUID 불일치

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를 달성할 수 있습니다.

PCRFClient VM에서 SVN 동기화를 확인합니다.

UUID는 두 PCRFClient VM에서 동일하지 않으므로 다음 명령을 입력합니다.

svn info http://pcrfclient01/repos/configuration

svn info http://pcrfclient02/repos/configuration

참고:이러한 명령을 사용하면 PCRFClient01 및 PCRFClient02 VM의 정확한 호스트 이름을 지정해야 합니다.또한 check_svn_sync.sh 스크립트를 사용하여 SVN 저장소가 PCRFClient VM 간에 동기화되었는지 확인할 수도 있습니다.이 스크립트는 이 문서의 끝에 제공됩니다.

이러한 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 저장소 동기화를 확인하는 방법에 대해 설명합니다.이 섹션에서는 SVN 동기화를 수정하는 방법에 대해 설명합니다.PCRFClient01이 기본 이고 PCRFClient02가 보조 이고 PCRFClient02 SVN 저장소가 동기화되지 않았다고 가정합니다.

PCRFClient02 SVN 저장소를 PCRFClient01과 동기화하려면 다음 단계를 완료하십시오.

1. PCRFClient01에서 SVN 동기화 작업을 비활성화합니다.
crontab -e

Comment this cron job entry:

/usr/bin/svnsync sync http:// pcrfclient02/repos-proxy-sync

참고:여기서 PCRFClient02는 PCRFClient02 VM의 고객 호스트 이름입니다.

2. PCRFClient02에 로그인하여 "/etc/httpd/conf.d/subversion.conf"을 편집하고 다음 굵은 텍스트로 업데이트합니다.
<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>

3. PCRFClient02 VM에서 HTTPD 서비스를 재시작하려면 이 명령을 입력합니다.
service httpd restart

4. PCRFClient01에서 SVN 데이터를 동기화하려면 이 명령을 입력합니다.SVN 저장소 동기화는 수정 버전의 수와 크기에 따라 시간이 걸릴 수 있습니다.
/usr/bin/svnsync sync http://pcrfclient02/repos-proxy-sync

참고:여기서 PCRFClient02는 PCRFClient02 VM의 고객 호스트 이름입니다.

잠금 오류가 보고되면 이 명령을 입력한 다음 svnsync 명령을 다시 시도합니다.

/usr/bin/svn propdel svn:sync-lock --revprop -r 0 http:// pcrfclient02/repos-proxy-sync

오류가 계속 표시되면 Reinitialize SVN Synchronization(SVN 동기화 다시 초기화)으로 진행합니다.

5. PCRFClient01 및 PCRFClient02에서 SVN 저장소의 수정 번호가 동일한지 확인하려면 PCRFClient VM에서 SVN 동기화 확인에 언급된 check_svn_sync.sh 스크립트 또는 CLI 명령을 사용합니다.

6. PCRFClient01에서 SVN 동기화 작업을 활성화합니다.
crontab -e

/usr/bin/svnsync sync http://pcrfclient02/repos-proxy-sync

SVN 동기화 다시 초기화

SVN 저장소 동기화 수정 섹션의 4단계에서 오류가 발생한 경우에만 이 단계를 수행합니다.이전 섹션에서 오류가 발생하지 않으면 이러한 단계를 무시할 수 있습니다.

참고:이 단계를 수행하기 전에 Cisco 기술 지원 팀에 문의하십시오.

1. SVN 동기화를 다시 초기화하기 전에 먼저 hasproxy 컨피그레이션에서 svn_proxy에서 PCRFClient02를 비활성화합니다.

1. 이 예에서는 대기 lb(lb02)로 이동하여 "/etc/haproxy/haproxy.cfg"을 수정하고 여기에 표시된 굵게 표시된 줄을 주석 처리합니다.
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

2. 이 예에서 lb01(active lb)로 이동하여 HA 장애 조치를 수행하려면 다음 명령을 입력합니다.
/etc/init.d/heartbeat restart

3. "hauproxy/memcached/VIP"가 다른 lb(이 예에서는 lb02)로 이동되었는지 확인합니다.

4. 대기 lb(현재 lb01이 대기 상태)로 이동하여 "/etc/haproxy/haproxy.cfg"을 수정하고 굵은 줄을 주석 처리합니다.
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

5. 활성 lb(현재 lb02가 활성 상태)로 이동하여 HA 장애 조치를 수행하려면 다음 명령을 입력합니다.
/etc/init.d/heartbeat restart

6. "hauproxy/memcached/VIP"가 다른 lb(이 예에서는 lb01)로 이동되었는지 확인합니다.

2. PCRFClient02에서 SVN 저장소 디렉토리를 다시 초기화하려면 다음 명령을 입력합니다.
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

3. PCRFClient02의 경우 "/var/www/svn/repos/hook/" 경로에 "pre-revprop-change"라는 파일을 다음 데이터로 만듭니다.
#!/bin/sh

#/var/www/svn/repos/hooks/pre-revprop-change

exit 0

4. PCRFClient02에서 이전에 만든 파일의 권한을 변경하고 HTTPD 서비스 재시작을 수행하려면 다음 명령을 입력합니다.
chmod 700 /var/www/svn/repos/hooks/pre-revprop-change

chown apache:apache /var/www/svn/repos/hooks/pre-revprop-change

service httpd restart

5. PCRFClient01에서 SVN 데이터 동기화를 수행하려면 다음 명령을 입력합니다.
/usr/bin/svnsync init http://pcrfclient02/repos-proxy-sync

http:// pcrfclient01/repos-proxy-sync

/usr/bin/svnsync sync http:// pcrfclient02/repos-proxy-sync

참고:PCRFClient01 및 PCRFClient02 대신 설정에 따라 PCRFClient01 및 PCRFClient02의 적절한 호스트 이름을 제공합니다.

6. SVN 리포지토리가 동기화되었는지 확인하려면 PCRFClient VM에서 SVN 동기화 확인 단계를 완료합니다.

7. hproxy 컨피그레이션의 SVN 프록시에서 PCRFClient02를 활성화합니다.기본적으로, 1단계에서 언급한 줄의 주석 처리를 제거합니다.

1. 이 예에서 lb02(standby lb)로 이동하여 "/etc/haproxy/haproxy.cfg"을 수정하고 굵은 줄의 주석 처리를 제거합니다.
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

2. "hauproxy/memcached/VIP"가 다른 lb(이 예에서는 lb02)로 이동되었는지 확인합니다.
/etc/init.d/heartbeat restart

3. "hauproxy/memcached/VIP"가 다른 lb(이 예에서는 lb02)로 이동되었는지 확인합니다.

4. 대기 lb(현재 lb01이 대기 상태)로 이동하여 "/etc/haproxy/haproxy.cfg"을 수정하고 여기에 표시된 굵은 줄의 주석 처리를 제거합니다.
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

5. 활성 lb(nowlb02가 활성)로 이동하여 HA 장애 조치를 완료하려면 다음 명령을 입력합니다.
/etc/init.d/heartbeat restart

6. "hasproxy/memcached/VIP"가 다른 lb(이 예에서는 lb01)로 이동되었는지 확인합니다.

8. PCRFClient01에서 SVN 동기화 작업을 활성화합니다.
crontab -e/usr/bin/svnsync sync http://pcrfclient02/repos-proxy-sync

스크립트

check_svn_sync.sh

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

svn_uuid_mismatch.sh

개별 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