Tutorial Slony passo a passo Professor MSc. Willamys Rangel Nunes de Sousa 1. Conceitos introdutórios 1.1. Cluster: um conjunto de nós (bancos de dados) participantes de uma replicação Slony; 1.2. Nó: um banco de dados distinto, identificado por uma combinação única de endereço de IP, número de porta e nome de banco; 1.3. Path: informação da conexão entre dois nodos em um cluster; 1.4. Replication set: um conjunto de tabelas e, opcionalmente, objetos sequencia, que dados serão replicados; 1.5. Master: também referenciado como origin, o nó que é a única fonte de dados para todos os nodos. Há apenas um nó master para um conjunto de replicação. Ele é o único nó no qual as aplicações podem modificar os dados das tabelas pertencentes ao conjunto de replicação; 1.6. Slave: também referenciado como subscriber. É o nó que recebe os dados replicados de outros nodos. As aplicações não podem modificar os dados das tabelas no nó slave; 1.7. Provider: o nó que provê os dados replicados para outros nodos. O Nó master é um provider. O nó slave pode também agir como um provider em um modelo de replicação em cascata; 1.8. Subscription em cascata: é um modelo de replicação onde ao menos um nó age como ambos provider e subscriber; 1.9. Slon: é o aplicativo Slony que controla a replicação. 1.10. Slonik: é software utilitário que processa os comandos para criar e atualizar as configurações Slony.
2. Arquitetura do ambiente de replicação Para este exemplo, foram utilizadas duas máquinas virtuais, uma representando o host master e outra o slave. 2.1. Configuração dos hosts Atributo Master Slave Sistema operacional Windows 7 Windows 7 Versão do Servidor de PostgreSQL 9.3 PostgreSQL 9.3 Banco de Dados Endereço de IP do Host 10.0.2.15 10.0.2.4 Porta 5432 5432 Nome do Banco de Dados Estoque Estoque Usuário de Banco de Replicador Replicador Dados para Replicação Tabela replicada Produto Produto 3. Preparando os Nodos Passo 1: verifique se o Slony está instalado nos nodos master e slave (verifique se os arquivos slon e slonik estão no diretório bin da instalação PostgreSQL). Caso contrário, utilize o StackBuilder para proceder a instalação. Passo 2: Crie um superusuário com privilégios de modificação do catálogo nos nodos master e slave para ser usado pelo processo de replicação do Slony. Neste tutorial, irei utilizar o usuário replicador (com senha replicador ). Observação: o usuário deve ter permissão de modificar o catálogo de dados. Passo 3: Configure o arquivo pga_hba.conf nos nodos master e slave. No arquivo do host master deve ser inserida esta linha: host master_dbname masterdb_user slave_ipaddr/32 md5 No nosso exemplo ficará assim:
host estoque replicador 10.0.2.4/32 md5 No arquivo do host slave deve ser inserida esta linha: host slave_dbname slavedb_user master_ipaddr/32 md5 No nosso exemplo ficará assim: host estoque replicador 10.0.2.15/32 md5 No final, recarrega o arquivo de configuração nos dois nodos. Passo 4: Criar um arquivo chamado pg_service.conf nos dois hosts (master e slave). Podemos utilizar o arquivo template que se encontra no diretório share da instalação do PostgreSQL. O arquivo pg_service.conf no host master ficará assim: [10.0.2.15-slonik] dbname=estoque user=replicador password=replicador [10.0.2.4-slonik] dbname=estoque host=10.0.2.4 user=replicador password=replicador Como fica o arquivo pg_service.conf no host slave: [10.0.2.15-slonik] dbname=estoque host=10.0.2.15 user=replicador password=replicador [10.0.2.4-slonik] dbname=estoque user=replicador password=replicador Passo 5: crie uma variável de ambiente chamada PGSYSCONFDIR e set o seu valor para o path do diretório do pg_service.conf. Em seguida, reinicie as máquinas virtuais. Passo 6: Crie o banco de dados estoque e a tabela produto nos dois hosts: create database estoque; create table produto ( id integer primary key,
); nome varchar(40) not null, quantidade integer, valor_unitario numeric(9,2) 4. Configurando o Cluster e Iniciando a Replicação A configuração do cluster Slony é feita fornecendo comandos para o programa utilitário Slonik. Antes de mais nada, abra o prompt de comando e verifique se a variável de ambiente PGSYSCONFDIR está apontando para o diretório de trabalho (echo %%). No host master, crie o arquivo preambulo.sk para prover as informações de conexão para cada nó do cluster. O arquivo conterá os seguintes comandos: #arquivo preambulo.sk cluster name = exemplo_replicacao; node 1 admin conninfo = 'service=10.0.2.15-slonik'; node 2 admin conninfo = 'service=10.0.2.4-slonik'; Agora, crie o script para definir o cluster de replicação Slony: #arquivo initcluster.sk init cluster (id=1, comment=' hostname=10.0.2.15'); Crie um arquivo bat (chamado runslonik.bat) para executar o script initcluster.sk e os demais scripts slonik a seguir: @ECHO OFF REM arquivo runslonik.bat REM REM Bat para executar o slonik C:\"Program Files"\PostgreSQL\9.3\bin\slonik < %1 Em seguida, rode o runslonik.bat com o initcluster.sk como parâmetro (a partir do diretório onde estão os arquivos de configuração Slonik):
Agora, crie um script para adicionar o nó slave no cluster de replicação: #arquivo addno.sk store node (id=2, comment='hostname=10.0.2.4', event node=1); Em seguida, rode o runslonik.bat com o addno.sk como parâmetro. Agora, crie um arquivo para adicionar os paths de comunicação para o cluster de replicação. Esses paths são utilizados pelo Slony para conectar os nodos remotos no cluster: #arquivo addpaths.sk store path (server=1, client=2, conninfo='service=10.0.2.15-slonik'); store path (server=2, client=1, conninfo='service=10.0.2.4-slonik'); Como pode ser notado, deve haver um comando store path de cada nó para todos os outros. Em seguida, rode o runslonik.bat com o addpaths.sk como parâmetro. Próximo passo: crie um arquivo de configuração nos dois nodos com os parâmetros necessários para iniciar o processo Slony em cada nó. Os parâmetros definem como o processo conecta os nodos no cluster de replicação. Arquivo de configuração do host master: #arquivo 10.0.2.15.slon
cluster_name='exemplo_replicacao' conn_info='service=10.0.2.15-slonik' Configuração do host slave: #arquivo 10.0.2.4.slon cluster_name='exemplo_replicacao' conn_info='service=10.0.2.4-slonik' 5. Iniciando o Slony no host master Em primeiro lugar, registre um serviço Slony com o nome Slony, através do comando abaixo: slon -regservice Slony Passo 1: devido a um problema de incompatibilidade, no Windows 7, deve-se criar o serviço manualmente (o comando acima não funciona). O instrsrv.exe instala e remove serviços do sistema do Windows: Dica para Windows 7 criar um serviço definido pelo usuário Execute o comando abaixo para criar o serviço de dentro da pasta que tem o instsrv.exe: o instsrv Slony C:\Program Files\PostgreSQL\9.3\bin\slon.exe (desde que este seja o diretório onde encontra-se o slon.exe); Abra o Regedit e navegue até a chave do serviço criado: o HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Slony Abra a chave de registro ImagePath e adicione -service Crie uma nova entrada Multilinea (REG_MULTI_SZ) com o nome DependOnService e com o valor RPCSS Vá em serviços, coloque-o como automático e inicie-o. Dica: para remover o serviço utilize instsrv <serviço> remove Fonte:https://pelinrodriguez.wordpress.com/2008/08/06/replicacion-en-postgresql-con-slony-i/
Passo 2: no nó master, registre a engine de replicação para o serviço que foi criado (a partir do diretório bin do PostgreSQL): slon -addengine Slony..\data\10.0.2.15.slon Em seguida, reinicie o serviço Slony. 6. Iniciando o Slony no nó slave Repita o Passo 1 da seção anterior para criar o serviço Slony no host slave. Em seguida, registre a engine de replicação para o serviço que foi criado. slon -addengine Slony..\data\10.0.2.4.slon 7. Executar apenas no host master Crie um script para adicionar um conjunto de replicação ao cluster de replicação. Ele é adicionado utilizando o comando CREATE SET. O conjunto de replicação contém os objetos de banco de dados que serão replicados do master para o slave. #arquivo addset.sk create set (id=1, origin=1, comment='tabelas a serem replicadas #1'); Em seguida, rode o runslonik.bat com o addset.sk como parâmetro. Crie um script para adicionar as tabelas ao conjunto de replicação. As tabelas são adicionadas através do comando SET ADD TABLE. O Slony requer que as tabelas a serem replicadas tenham chave primária ou única, caso contrário o processo falhará. #arquivo addtables.sk
set add table(set id=1, origin=1, id=1, fully qualified name='public.produto', comment='tabela de produtos', key='produto_pkey'); Em seguida, rode o runslonik.bat com o addtables.sk como parâmetro. Crie um script para subscrever o host slave ao conjunto de replicação. Nodos são subscritos ao conjunto de replicação usando o comando SUBSCRIBE SET. #arquivo subscribeset.sk subscribe set (id=1, provider=1, receiver=2, forward=yes); sync(id=1); wait for event (origin=1, confirmed=2, wait on=1); Em seguida, rode o runslonik.bat com o subscribeset.sk como parâmetro. Pronto! Agora é só curtir a replicação. 8. Próximos passos Implementar replicação em hosts de sistemas operacionais diferentes. Implementar replicação em hosts com SGBDs diferentes. Como adicionar novos hosts ao cluster de replicação? Como adicionar novos objetos a serem replicados? Implementar controlled switchover e failover.