内容

概要

SVN UUID の不一致

PCRFClient VM 間での SVN 同期の確認

SVN リポジトリの同期の修正

SVN の同期の再初期化

スクリプト

check_svn_sync.sh

svn_uuid_mismatch.sh

概要

このドキュメントでは、PCRFClient01 と PCRFClient02 間で Subversion control（SVN）リポジトリを同期する方法について説明します。

SVN UUID の不一致

ポリシー ビルダー（PB）のすべてのポリシー設定は、SVN リポジトリとして保存されます。したがって高可用性（HA）にするには、PCRFClient の仮想マシン（VM）の両方で、同じ SVN ユニバーサル ユニーク ID（UUID）をもつ必要があります。 ただし、Cisco Policy Suite（CPS）バージョン 7.X では、PCRFClient VM 間で同じ UUID を持っていません。つまり、より高い CPS バージョンには同じ UUID があります。拡張バグCisco Bug ID CSCuu85319が入力されました。両方のPCRFClient0X VMで同じリビジョン番号を持っている場合は、HAを実現できます。

PCRFClient VM 間での SVN 同期の確認

PCRFClient VM 間で UUID が同じではないため、次のコマンドを入力します。

svn info http://pcrfclient01/repos/configuration

svn info http://pcrfclient02/repos/configuration

注：これらのコマンドと共に、PCRFClient01 と PCRFClient02 VM の正確なホスト名を提供する必要があります。また、SVN リポジトリが PCRFClient VM 間で同期されているかどうかを確認するため、check_svn_sync.sh スクリプトも使用できます。このスクリプトは、この項目の末尾に記載されています。

これらの Quantum Network suite（QNS）のエラー ログに気付くことがあるかもしれません。これらのエラー メッセージは、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'

次に示すように、VM 間で UUID が異なる場合でも、バージョンが同じでなければなりません。両方の 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

まだエラーが発生する場合、「SVN の同期の再初期化」に進みます。

5. SVN リポジトリのリビジョン番号が PCRFClient01 と PCRFClient02 で同じであることを確認するには、check_svn_sync.sh スクリプト、または「PCRFClient VM 間での SVN 同期の確認」で示したコマンドを使用します。

6. PCRFClient01 で、SVN 同期ジョブを有効化します。
crontab -e

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

SVN の同期の再初期化

セクション「SVN リポジトリの同期の修正」の手順 4 でエラーが発生した場合のみ、これらの手順を実行します。前のセクションでエラーが発生しない場合、これらの手順は無視できます。

注：次の手順を実行する前に、シスコ テクニカル サポート チームにお問い合わせください。

1. SVN 同期を再初期化する前に、まず haproxy 設定の 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. アクティブ lb（この例では lb01）に移動し、HA フェールオーバーを行うため、次のコマンドを入力します。
/etc/init.d/heartbeat restart

3. 「haproxy/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. 「haproxy/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/hooks/」に「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. haproxy 設定の SVN プロキシから PCRFClient02 を有効にします。基本的に、手順 1 でコメント アウトした行をアンコメントします。

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. 「haproxy/memcached/VIP」が他の lb（この例では lb02）に移行したことを確認します。
/etc/init.d/heartbeat restart

3. 「haproxy/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. 「haproxy/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