Sommario

Introduzione

MANCATA CORRISPONDENZA DELL'UUID SVN

Verifica della sincronizzazione SVN tra VM client PCRFC

Correggere la sincronizzazione del repository SVN

Reinizializza sincronizzazione SVN

Script

check_svn_sync.sh

svn_uuid_mismatch.sh

Introduzione

In questo documento viene descritto come sincronizzare il repository SVN (Subversion Control) tra PCRFClient01 e PCRFClient02.

MANCATA CORRISPONDENZA DELL'UUID SVN

Tutte le configurazioni delle policy in Policy Builder (PB) vengono archiviate come repository SVN. Pertanto, per ottenere un'elevata disponibilità (HA), è necessario disporre dello stesso UUID (Universal Unique Identifier) SVN in entrambe le macchine virtuali (VM) client PCRFC. Tuttavia, Cisco Policy Suite (CPS) versione 7.X non ha lo stesso UUID nelle VM client PCRFC. In altre parole, le versioni CPS superiori hanno lo stesso UUID. È stato immesso un bug di miglioramento, l'ID bug Cisco CSCuu85319. È possibile ottenere HA se si ha lo stesso numero di revisione in entrambe le VM PCRFClient0X.

Verifica della sincronizzazione SVN tra VM client PCRFC

Poiché l'UUID non è lo stesso in entrambe le VM client PCRFC, immettere i seguenti comandi:

svn info http://pcrfclient01/repos/configuration

svn info http://pcrfclient02/repos/configuration

Nota: Con questi comandi, è necessario fornire il nome host esatto delle VM PCRFClient01 e PCRFClient02. È inoltre possibile utilizzare lo script check_svn_sync.sh per verificare se il repository SVN è sincronizzato tra le VM client PCRFC. Questo script viene fornito alla fine di questo articolo.

È possibile notare i seguenti log degli errori di Quantum Network Suite (QNS). Per controllare i messaggi di errore, usare lo script svn_uuid_mismatch.sh. Questo script viene fornito alla fine di questo articolo.

==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'

Come mostrato di seguito, è possibile osservare che l'UUID è diverso nelle VM, ma le versioni devono rimanere le stesse. Se la versione SVN in entrambe le VM client PCRFC è la stessa, la sincronizzazione del repository SVN è presente e di conseguenza si dispone di elevata disponibilità.

===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)

Correggere la sincronizzazione del repository SVN

La sezione precedente spiegava come controllare la sincronizzazione del repository SVN. In questa sezione viene descritto come correggere la sincronizzazione SVN. Si supponga che PCRFClient01 sia primario e che PCRFClient02 sia secondario e che il repository SVN PCRFClient02 non sia sincronizzato.

Completare questi passaggi per sincronizzare il repository SVN PCRFClient02 con PCRFClient01:

1. In PCRFClient01, disabilitare il processo di sincronizzazione SVN:
crontab -e

Comment this cron job entry:

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

Nota: In questo caso, PCRFClient02 è il nome host del cliente della VM PCRFClient02.

2. Accedere a PCRFClient02, modificare "/etc/httpd/conf.d/subversion.conf" e aggiornarlo con il seguente testo in grassetto:
<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. Nella VM PCRFClient02 immettere questo comando per riavviare il servizio HTTPD.
service httpd restart

4. In PCRFClient01, immettere questo comando per sincronizzare i dati SVN. La sincronizzazione dell'archivio SVN potrebbe richiedere tempo a seconda del numero e delle dimensioni delle revisioni.
/usr/bin/svnsync sync http://pcrfclient02/repos-proxy-sync

Nota: In questo caso, PCRFClient02 è il nome host del cliente della VM PCRFClient02.

Se vengono segnalati errori di blocco, immettere questo comando e riprovare con il comando svnsync:

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

Se gli errori persistono, procedere con la reinizializzazione della sincronizzazione SVN.

5. Per verificare che il numero di revisione per il repository SVN sia lo stesso in PCRFClient01 e PCRFClient02, utilizzare lo script check_svn_sync.sh o il comando CLI indicato in Verifica della sincronizzazione SVN sulla VM client PCRFC.

6. In PCRFClient01, abilitare il processo di sincronizzazione SVN:
crontab -e

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

Reinizializza sincronizzazione SVN

Eseguire questi passaggi solo se si verifica un errore nel passaggio 4 della sezione Correggere la sincronizzazione del repository SVN. Se nella sezione precedente non si verificano errori, è possibile ignorare questi passaggi.

Nota: Prima di eseguire questi passaggi, rivolgersi al team di supporto tecnico Cisco.

1. Prima di reinizializzare la sincronizzazione SVN, disabilitare PCRFClient02 da svn_proxy nella configurazione haproxy:

1. Andare su standby lb (lb02 in questo esempio) e modificare "/etc/haproxy/haproxy.cfg" e commentare la riga in grassetto mostrata di seguito:
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. Per eseguire un failover HA, andare su active lb (lb01 in questo esempio) e immettere questo comando:
/etc/init.d/heartbeat restart

3. Verificare che "haproxy/memcached/VIP" sia stato spostato sull'altro lb (lb02 in questo esempio).

4. Andare su standby lb (ora lb01 è standby) e modificare "/etc/haproxy/haproxy.cfg" e commentare la riga in grassetto:
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. Andare su lb attivo (ora lb02 è attivo) e immettere questo comando per eseguire un failover HA:
/etc/init.d/heartbeat restart

6. Verificare che "haproxy/memcached/VIP" sia stato spostato sull'altro lb (lb01 in questo esempio).

2. In PCRFClient02, immettere questi comandi per reinizializzare la directory del repository 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. In PCRFClient02 creare un file denominato "pre-revprop-change" nel percorso "/var/www/svn/repos/hooks/" con i seguenti dati:
#!/bin/sh

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

exit 0

4. In PCRFClient02, immettere questi comandi per modificare le autorizzazioni del file creato in precedenza ed eseguire il riavvio del servizio 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. In PCRFClient01, immettere questi comandi per eseguire la sincronizzazione dei dati SVN:
/usr/bin/svnsync init http://pcrfclient02/repos-proxy-sync

http:// pcrfclient01/repos-proxy-sync

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

Nota: Anziché PCRFClient01 e PCRFClient02, specificare il nome host appropriato di PCRFClient01 e PCRFClient02 in base alla configurazione.

6. Per verificare se i repository SVN sono sincronizzati, completare la procedura descritta in Verifica della sincronizzazione SVN sulla VM client PCRFC.

7. Abilitare PCRFClient02 dal proxy SVN nella configurazione haproxy. In pratica, rimuovere il commento dalle righe commentate nel passaggio 1.

1. Andare su standby lb (lb02 in questo esempio) e modificare "/etc/haproxy/haproxy.cfg" e rimuovere il commento dalla riga in grassetto:
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. Verificare che "haproxy/memcached/VIP" sia stato spostato sull'altro lb (lb02 in questo esempio).
/etc/init.d/heartbeat restart

3. Verificare che "haproxy/memcached/VIP" sia stato spostato sull'altro lb (lb02 in questo esempio).

4. Passare alla libreria di standby (ora lb01 è in standby), modificare "/etc/haproxy/haproxy.cfg" e rimuovere il commento dalla riga in grassetto mostrata di seguito:
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. Andare alla libreria attiva (nowlb02 è attivo) e immettere questo comando per completare il failover HA:
/etc/init.d/heartbeat restart

6. Verificare che "haproxy/memcached/VIP" sia stato spostato sull'altro lb (lb01 in questo esempio).

8. In PCRFClient01, abilitare il processo di sincronizzazione SVN:
crontab -e/usr/bin/svnsync sync http://pcrfclient02/repos-proxy-sync

Script

check_svn_sync.sh

Inserire questo script nel sistema CPS per controllare la sincronizzazione SVN tra le VM client PCRFC.

#!/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

Inserire questo script nel sistema CPS per monitorare i messaggi di errore relativi all'UUID SVN dalle singole VM QNS.

#!/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