domingo, 8 de maio de 2016

Clonando um banco de dados HP Vertica

Introdução



Já precisei algumas vezes clonar uma base de dados Vertica para um outro servidor, para ter uma base idêntica de testes ou por alguma razão ter que refazer o servidor.

Mas sempre foi muito trabalhoso esse processo. Por vezes, é necessário a mesma configuração do servidor anterior, como estrutura de diretórios e/ou mesmo endereço IP. Algumas vezes atender esses requisitos é fácil, mas outras vezes não.

Existe na documentação oficial do Vertica formas de clonar uma base de dados, algumas vezes funcionou pra mim, outras vezes não devido alguma particularidade do meu ambiente.

Basicamente, o que eu gostaria de fazer era copiar os diretórios de dados/catálogo e configuração da máquina antiga para a máquina nova e pronto, subir o Vertica e ir pra casa feliz da vida. A ideia desse post é justamente mostrar como fazer isso, usando uma técnica que não está muito documentada, que é usar o 'Catalog Editor' para alterar configurações que estão armazenadas dentro dos catálogos e não em arquivos externos.

Alterar o catálogo é algo extremamento arriscado, então essa operação é por sua própria conta e risco. A boa notícia é que se estamos alterando em uma nova máquina e alguma besteira for feita isso não irá afetar as outras máquinas em produção, desde que você altere uma cópia do catálogo e não a única cópia que você tenha.


Referências



O procedimento via 'Catalog Editor' descrito nesse blog post foi baseado nos seguintes links:


Pré-Requisitos



Para o exemplo que vamos mostrar, estaremos copiando uma base de dados que está em um servidor com IP válido para uma máquina que rodará o Vertica no IP 127.0.0.1

Então quando fizermos a cópia dos diretórios de dados/catálogo e configuração para a nova máquina, teremos que ajustar todos os path's e endereço IP para refletir a nova configuração.

No meu caso irei manter a mesma estrutura de diretórios do servidor original, irei alterar apenas o endereço IP do qual o Vertica deverá ter que funcionar.

Para verificar a estrutura de diretórios que a base de dados está configurada, execute os seguintes comandos SQL:
\x
select * from nodes;
select node_name,storage_path, storage_usage from disk_storage;
Atenção para o catalog_path e storage_path do node que pretende migrar. Estes deverão serem os locais onde você precisará colocar os diretórios de dados/catálogo novamente na nova máquina.

Para esse tutorial, estou utilizando o HP Vertica 7.0.2. Não fiz o teste em uma versão mais nova, portanto não sei se é 100% compatível.

Procedimentos



1. Tenha uma cópia dos diretórios de dados, catálogo e configuração (/opt/vertica/config) da máquia de origem.

2. Instale a mesma versão do Vertica na máquina destino.

3. Crie na máquina destino um novo database 'dummy'. Esse banco servirá apenas como referência para checar as permissões e owner dos arquivos/diretórios. Na tela 'Database data directories', aponte o 'Catalog pathname' e 'Data pathname' para algum local onde possa depois verificar as permissões e owner.

4. Copie os arquivos da máquina de origem para os mesmos path's na máquina de destino. Faça antes um backup do /opt/vertica/config. Verifique as permissões e owner dos diretórios e arquivos usando o banco de dados dummy como referência, faça os ajustes se necessários. Em seguida use o admintools para remover o banco de dados dummy.

5. Edite o arquivo /opt/vertica/config/admintools.conf e altere todas referências do antigo endereço IP para o novo endereço IP, em nosso caso 127.0.0.1

6. Execute o 'Catalog Editor' com o seguinte comando:
/opt/vertica/bin/vertica -D <CATALOG_PATH> -E'interactive'
Para o meu caso particular o comando foi,
/opt/vertica/bin/vertica -D /var/db/vertica/verticadb/v_verticadb_node0001_catalog -E'interactive'
E você deve receber o seguinte output como resultado,
Catalog Editor v7.0.2-1
Sizes:  3850KB chkpt, 4440KB log (6 files) [READ-WRITE]

>
7. Liste os nodes configurados na respectiva base de dados
> list Site
Como resultado, receberá a lista de todos nodes. Para o meu caso existia apenas 1,
45035996273704980 Site:v_verticadb_node0001
8. Liste as configurações do node que iremos alterar o IP
> show name Site v_verticadb_node0001
Como resultado, receberá as configurações do node,
:Site
oid:45035996273704980
name:v_verticadb_node0001
schema:0
address:10.1.1.1
ei_address:0
catalogPath:/var/db/vertica/verticadb/v_verticadb_node0001_catalog/Catalog
hasCatalog:false
bdbPath:/var/db/vertica/verticadb/v_verticadb_node0001_data/SAL
siteUniqueID:10
isEphemeral:false
isRecoveryClerk:true
parentFaultGroupId:45035996273704974
clientPort:5433
controlAddress:127.0.0.1
controlBroadcast:127.255.255.255
controlPort:4803
controlNode:45035996273704980
Como mantemos os mesmos path's durante a cópia, os path's na configuração devem estar refletindo o path real na nova máquina. Mas o address, que aponta para 10.1.1.1 deverá ser alterado para 127.0.0.1

9. Para alterar a configuração, precisamos fazer 'unlock' no catálogo
> unlock danger
Como resultado, deve receber a seguinte mensagem,
USE AT YOUR OWN RISK!
10. Altere o endereço IP
> set name Site v_verticadb_node0001 address 127.0.0.1
Como resultado, deve receber a seguinte mensagem,
Set to 127.0.0.1
11. Verifique se o endereço IP foi alterado corretamente
> show name Site v_verticadb_node0001

:Site
oid:45035996273704980
name:v_verticadb_node0001
schema:0
address:127.0.0.1
ei_address:0
catalogPath:/var/db/vertica/verticadb/v_verticadb_node0001_catalog/Catalog
hasCatalog:false
bdbPath:/var/db/vertica/verticadb/v_verticadb_node0001_data/SAL
siteUniqueID:10
isEphemeral:false
isRecoveryClerk:true
parentFaultGroupId:45035996273704974
clientPort:5433
controlAddress:127.0.0.1
controlBroadcast:127.255.255.255
controlPort:4803
controlNode:45035996273704980
12. Grave as alterações e saia do editor
> commit
> exit
13. Finalmente, execute o admintools e inicie o banco de dados.

Pronto, nesse ponto já deve ter uma cópia do seu banco de dados rodando em uma outra máquina.

Nenhum comentário: