Contents

Introduction

INCOMPATIBILIDADE DE UUID DE SVN

Verificar a sincronização SVN entre VMs PCRFClient

Corrigir a sincronização do repositório SVN

Reinicializar Sincronização SVN

Scripts

check_svn_sync.sh

svn_uuid_mismatch.sh

Introduction

Este documento descreve como sincronizar o repositório de controle de subversão (SVN) entre PCRFClient01 e PCRFClient02.

INCOMPATIBILIDADE DE UUID DE SVN

Todas as configurações de política no construtor de políticas (PB) são armazenadas como um repositório SVN. Assim, para ter alta disponibilidade (HA), você precisa ter o mesmo UUID (Universal Unique Identifier) SVN em ambas as Máquinas virtuais PCRFClient (VMs). No entanto, o Cisco Policy Suite (CPS) Versão 7.X não tem o mesmo UUID em PCRFClient VMs. Ou seja, versões mais altas do CPS têm o mesmo UUID. Um bug de aprimoramento foi inserido, ID de bug da Cisco CSCuu85319. Você pode obter HA se tiver o mesmo número de revisão em ambas as VMs PCRFClient0X.

Verificar a sincronização SVN entre VMs PCRFClient

Como o UUID não é o mesmo em ambas as VMs PCRFClient, insira estes comandos:

svn info http://pcrfclient01/repos/configuration

svn info http://pcrfclient02/repos/configuration

Note: Com esses comandos, você precisa dar o nome exato do host das VMs PCRFClient01 e PCRFClient02. Você também pode usar o script check_svn_sync.sh para verificar se o repositório SVN está sincronizado entre VMs PCRFClient. Este script é fornecido no final deste artigo.

Você pode observar esses registros de erro do Quantum Network Suite (QNS). Essas mensagens de erro podem ser verificadas com o script svn_uid_mismatch.sh. Este script é fornecido no final deste artigo.

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

Como mostrado abaixo, você pode observar que o UUID é diferente entre as VMs, mas as versões devem permanecer as mesmas. Se a versão SVN em ambas as VMs PCRFClient for a mesma, a sincronização do repositório SVN estará lá e, subsequentemente, você terá alta disponibilidade.

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

Corrigir a sincronização do repositório SVN

A seção anterior explicou como verificar a sincronização do repositório SVN. Esta seção discute como corrigir a sincronização SVN. Suponha que PCRFClient01 é primário e que PCRFClient02 é secundário e que o repositório SVN PCRFClient02 está fora de sincronia.

Conclua estes passos para fazer com que o repositório SVN PCRFClient02 seja sincronizado com PCRFClient01:

1. Em PCRFClient01, desative o trabalho de sincronização SVN:
crontab -e

Comment this cron job entry:

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

Note: Aqui, PCRFClient02 é o nome de host do cliente da VM PCRFClient02.

2. Faça login no PCRFClient02 e edite "/etc/httpd/conf.d/subversion.conf" e atualize-o com este texto em negrito:
<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. Na VM PCRFClient02 , insira este comando para reiniciar o serviço HTTPD.
service httpd restart

4. Em PCRFClient01, insira este comando para sincronizar os dados SVN. A sincronização do repositório SVN pode levar tempo dependendo do número e do tamanho das revisões.
/usr/bin/svnsync sync http://pcrfclient02/repos-proxy-sync

Note: Aqui, PCRFClient02 é o nome de host do cliente de PCRFClient02 VM.

Se erros de bloqueio forem relatados, insira este comando e repita o comando svnsync:

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

Se os erros ainda forem vistos, prossiga para Reinicialize a sincronização SVN.

5. Para verificar se o número de revisão do repositório SVN é o mesmo em PCRFClient01 e PCRFClient02, use o script check_svn_sync.sh ou o comando CLI mencionado em Verificar Sincronização SVN em PCRFClient VM.

6. No PCRFClient01, ative o trabalho de sincronização SVN:
crontab -e

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

Reinicializar Sincronização SVN

Execute estas etapas somente se encontrar um erro na etapa 4 da seção Corrigir a Sincronização do Repositório SVN. Se você não encontrar nenhum erro na seção anterior, poderá ignorar essas etapas.

Note: Entre em contato com a equipe de suporte técnico da Cisco antes de executar estas etapas.

1. Antes de reinicializar a sincronização do SVN, primeiro desative o PCRFClient02 de svn_proxy na configuração do haproxy:

1. Vá para o laboratório em standby (lb02 neste exemplo), modifique "/etc/haproxy/haproxy.cfg" e comente a linha em negrito mostrada aqui:
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. Vá para o lb ativo (lb01 neste exemplo) e insira este comando para fazer um failover de HA:
/etc/init.d/heartbeat restart

3. Verifique se "haproxy/memcached/VIP" mudou para o outro lb (lb02 neste exemplo).

4. Vá para o laboratório em standby (agora o lb01 está em standby) e modifique "/etc/haproxy/haproxy.cfg" e comente a linha em negrito:
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. Vá para o lb ativo (agora o lb02 está ativo) e insira este comando para fazer um failover de HA:
/etc/init.d/heartbeat restart

6. Verifique se "haproxy/memcached/VIP" mudou para o outro lb (lb01 neste exemplo).

2. No PCRFClient02, insira estes comandos para reinicializar o diretório do repositório 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. No PCRFClient02, crie um arquivo chamado "pre-revprop-change" no caminho "/var/www/svn/repos/hooks/" com estes dados:
#!/bin/sh

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

exit 0

4. No PCRFClient02, insira estes comandos para alterar as permissões do arquivo criado anteriormente e também executar reinicializações do serviço 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. No PCRFClient01, insira estes comandos para executar a sincronização de dados SVN:
/usr/bin/svnsync init http://pcrfclient02/repos-proxy-sync

http:// pcrfclient01/repos-proxy-sync

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

Note: No lugar de PCRFClient01 e PCRFClient02, forneça o nome de host apropriado de PCRFClient01 e PCRFClient02 de acordo com sua configuração.

6. Para verificar se os repositórios SVN estão sincronizados, execute as etapas em Verificar Sincronização SVN em PCRFClient VM.

7. Ative PCRFClient02 a partir do proxy SVN na configuração de proxy. Basicamente, não comente as linhas que você comentou na etapa 1.

1. Vá para o lb em standby (lb02 neste exemplo), modifique "/etc/haproxy/haproxy.cfg" e descomente a linha em negrito:
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. Verifique se "haproxy/memcached/VIP" mudou para o outro lb (lb02 neste exemplo).
/etc/init.d/heartbeat restart

3. Verifique se "haproxy/memcached/VIP" mudou para o outro lb (lb02 neste exemplo).

4. Vá para o laboratório em standby (agora o lb01 está em standby) e modifique "/etc/haproxy/haproxy.cfg" e descomente a linha em negrito mostrada aqui:
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. Vá para o lb ativo (agora o lb02 está ativo) e insira este comando para concluir o failover de HA:
/etc/init.d/heartbeat restart

6. Verifique se "haproxy/memcached/VIP" mudou para o outro lb (lb01 neste exemplo).

8. No PCRFClient01, ative o trabalho de sincronização SVN:
crontab -e/usr/bin/svnsync sync http://pcrfclient02/repos-proxy-sync

Scripts

check_svn_sync.sh

Coloque este script no sistema CPS para verificar a sincronização SVN entre VMs PCRFClient.

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

Coloque esse script no sistema CPS para monitorar as mensagens de erro relacionadas ao UUID do SVN das VMs QNS individuais.

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