PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Replicação Londiste com PostgreSQL 9.0

Londiste, ferramenta de replicação mestre/escravo assíncrona desenvolvida pela Skytools. É muito simples e fácil de usar criado como Slony. A lógica central por trás de Londiste ou Slony é o Acionamento Remoto. Já a londiste segue um modelo de filas de eventos que não é o de Slony – I.

Visão geral do Skytools:
Skytools é um aplicativo baseado em Python, vem com um pacote de três coisas PgQ,Londiste &Walmgr e também requer o driver Python-Postgres 'psycopg2'.
  • PGQ :Seu mecanismo de fila construído com pl/pgsql com estrutura phython em cima dele.
  • Londiste:uma ferramenta de replicação escrita em Phyton usando PgQ como transportador de eventos.
  • Walmgr:cria uma configuração de arquivamento WAL.

Não vou descrever muito aqui sobre o processo de daemon de replicação londiste etc., porque você pode encontrar o melhor tutorial sobre Skytools (PgQ/Londiste/WalMgr) neste link http://skytools.projects.postgresql.org/doc/.

Basicamente, minha demonstração inclui como proceder com a replicação Londiste com PostgreSQL 9.0 junto com as etapas de instalação. Eu digo, a documentação do Skytools e o PostgreSQL Wiki (http://wiki.postgresql.org/wiki/Londiste_Tutorial) é mais do que qualquer coisa para brincar com a replicação Londiste.

Pré-requisitos com links para download:
  • PostgreSQL – PostgreSQL 9.0 http://www.enterprisedb.com/products-services-training/pgdownload
  • skytools – skytools-2.1.12.tar.gz http://pgfoundry.org/frs/download.php/2872/skytools-2.1.12.tar.gz
  • psycopg2 – psycopg2-2.4.2.tar.gz http://initd.org/psycopg/tarballs/PSYCOPG-2-4/psycopg2-2.4.2.tar.gz

Minha demonstração inclui o seguinte:-
OS                     : RHEL 6 32 bit
DB version : PostgreSQL 9.0
Two Clusters & Database: londiste_provider on 5432,Londiste_subscriber on 5433
Table : One Table (ltest)
Location of .ini file : /opt/skytools-2.1.12/scripts
Location of Skytools : /opt/skytools-2.1.12
Location of PG 9.0 : /opt/PostgreSQL/9.0/

Como sua demonstração simples com uma tabela, tentei com RHEL 6 32bit/PostgreSQL 9.0 com dois clusters na minha caixa local. Você precisaria ajustá-lo de acordo com os requisitos reais.

Observação: Antes de prosseguir com a configuração, gostaria de lembrar que todas as instalações de origem devem ser como usuário root e, após a instalação, esses diretórios devem possuir permissões de usuário do Postgres.

Etapa 1.
Instale o PostgreSQL 9.0 e crie dois clusters com o comando INITDB e certifique-se de que eles sejam executados em 5432 e 5433 cada. (Lembre-se, é um fato antigo que, com o comando INITDB, o diretório pg_log não será criado em Data_directory, você precisa criá-lo explicitamente.)

Etapa 2.
Instale o skytools baixando do link acima. A melhor prática é manter todas as fontes em um local padrão comum. Eu usei '/usr/local/src' e skytools em '/opt/'. Agora configure skytools com PostgreSQL 9.0 ‘pg_config’.
# tar -xvf skytools-2.1.12.tar.gz
# cd /usr/local/src/skytools-2.1.12
# ./configure --prefix=/opt/skytools-2.1.12 --with-pgconfig=/opt/PostgreSQL/9.0/bin/pg_config
# make
# make install

Observação: Após a instalação, você verá dois importantes módulos contrib (pgq &londiste) no PostgreSQL contrib location. Basicamente, essas duas contribuições dão a você a funcionalidade de replicação londiste.
# cd /opt/PostgreSQL/9.0/share/postgresql/contrib
# ll lond*
-rw-r--r--. 1 root root 29771 Jan 11 13:24 londiste.sql
-rw-r--r--. 1 root root 27511 Jan 11 13:24 londiste.upgrade.sql

# ll pgq*
-rw-r--r--. 1 root root 4613 Jan 11 13:24 pgq_ext.sql
-rw-r--r--. 1 root root 1170 Jan 11 13:24 pgq_lowlevel.sql
-rw-r--r--. 1 root root 69798 Jan 11 13:24 pgq.sql
-rw-r--r--. 1 root root 3940 Jan 11 13:24 pgq_triggers.sql
-rw-r--r--. 1 root root 54182 Jan 11 13:24 pgq.upgrade.sql

Etapa 3.
Instale o psycopg2, é um driver phyton-postgres que é necessário para skytools. Às vezes, esses drivers não vêm com python, então aqui estão as etapas de instalação.
# tar -xvf psycopg2-2.4.2.tar.gz
# cd psycopg2-2.4.2
# python setup.py install --prefix=/usr/local
# python setup.py build_ext --pg-config /opt/PostgreSQL/9.0/bin/pg_config

Etapa 4.
Dê a propriedade do Postgres ao skytools e ao local de instalação do postgres. Isso garante que todos os arquivos/executáveis ​​estejam com permissões de usuário do Postgres.
# chown -R postgres:postgres /opt/skytools-2.1.12 
# chown -R postgres:postgres /opt/PostgreSQL/9.0/

Etapa 5.
Defina o LD_LIBRARY_PATH &PYTHONPATH e inicie os dois clusters recém-criados. Você pode colocá-los no .bash_profile do usuário postgres como solução permanente.
$export PYTHONPATH=/opt/skytools-2.1.12/lib/python2.6/site-packages/
$export LD_LIBRARY_PATH=/opt/PostgreSQL/9.0/lib:/usr/lib:/usr/lib/perl5/5.10.0/i386-linux-thread-multi/CORE:
or
$ vi .bash_profile
export PYTHONPATH=/opt/skytools-2.1.12/lib/python2.6/site-packages/
export LD_LIBRARY_PATH=/opt/PostgreSQL/9.0/lib:/usr/lib:/usr/lib/perl5/5.10.0/i386-linux-thread-multi/CORE:
:wq
$ . .bash_profile (execute to take effect of new settings)

Now Start the two cluster

$ pg_ctl -o "-p 5432" -D /opt/PostgreSQL/9.0/data start
$ pg_ctl -o "-p 5433" -D /opt/PostgreSQL/9.0/data_1 start

Etapa 6.
Crie dois bancos de dados, londiste_provider em 5432 e londiste_subscriber em 5433. Crie uma tabela com o nome de chave primária 'ltest' em dois bancos de dados e INSERT alguns dados na tabela londiste_provider (ltest) e depois da conclusão da configuração da replicação você deverá ver esses INSERT dados no lado londiste_subscriber.

Você pode não precisar de CRETAE TABLE no lado escravo, em vez disso você pode usar dump/restore de estrutura usando pg_dump/pg_restore, se você tiver muitas tabelas.
On 5432
psql -p 5432 -c "create database londiste_provider;"
psql -p 5432 londiste_provider
londiste_provider=# create table ltest(id int primary key);
londiste_provider=# insert into ltest VALUES (generate_series(1,10));
INSERT 0 10

On 5433
psql -p 5433 -c "create database londiste_subscriber;"
psql -p 5433 londiste_subscriber
londiste_subscriber=# create table ltest(id int primary key);

Etapa 7.
Crie dois arquivos .ini, um para londiste(londiste.ini) e outro para PgQ ticker(pgq_ticker.ini). Você também pode encontrar os arquivos .ini de amostra da instalação básica do skytools. Por exemplo:- “/opt/skytools-2.1.12/share/doc/skytools/conf” local.

Etapa 8.
Crie dois diretórios para arquivos de log’s e PID’s e aponte-os nos parâmetros de londiste.ini e pgq_ticker.ini.
$ cd /opt/PostgreSQL/9.0
$ mkdir log pid

Etapa 9 .
Inicie a replicação com arquivos .ini, primeiro instale o londiste no provedor e no assinante e depois inicie o ticker (PgQ) para replicar as tabelas.

Instale o londiste no provedor e no assinante com os comandos abaixo um por um:
$ cd /opt/skytools-2.1.12/bin
$ ./londiste.py ../scripts/londiste.ini provider install
2012-01-12 14:56:03,667 11073 INFO plpgsql is installed
2012-01-12 14:56:03,674 11073 INFO txid_current_snapshot is installed
2012-01-12 14:56:03,675 11073 INFO Installing pgq
2012-01-12 14:56:03,676 11073 INFO Reading from /opt/skytools-2.1.12/share/skytools/pgq.sql
2012-01-12 14:56:03,816 11073 INFO Installing londiste
2012-01-12 14:56:03,816 11073 INFO Reading from /opt/skytools-2.1.12/share/skytools/londiste.sql

-bash-4.1$ ./londiste.py ../scripts/londiste.ini subscriber install
2012-01-12 14:56:17,871 11081 INFO plpgsql is installed
2012-01-12 14:56:17,872 11081 INFO Installing londiste
2012-01-12 14:56:17,873 11081 INFO Reading from /opt/skytools-2.1.12/share/skytools/londiste.sql

-->Now, Install PqQ and start ticker with .ini file.

-bash-4.1$ ./pgqadm.py ../scripts/pgqadm.ini install
2012-01-11 16:45:03,219 6348 INFO plpgsql is installed
2012-01-11 16:45:03,225 6348 INFO txid_current_snapshot is installed
2012-01-11 16:45:03,228 6348 INFO pgq is installed

-bash-4.1$ ./pgqadm.py -d ../scripts/pgqadm.ini ticker -d

-->Add the table to provider & subscriber to replicate.

-bash-4.1$ ./londiste.py ../scripts/londiste.ini provider add ltest
2012-01-12 15:03:39,583 11139 INFO Adding public.ltest

-bash-4.1$ ./londiste.py ../scripts/londiste.ini subscriber add ltest
2012-01-12 15:03:47,367 11146 INFO Checking public.ltest
2012-01-12 15:03:47,384 11146 INFO Adding public.ltest

Após adicionar inicie a replicação da tabela.
-bash-4.1$ ./londiste.py ../ scripts/londiste.ini replay -d

Note: "-d" option is to run the londiste/PgQ daemons in background.

Aqui conclua a configuração de replicação. Agora você deve ver os dados da tabela “ltest” no Slave Side (ou seja, na porta 5433).

Etapa 10.
Agora vamos entender o que aconteceu em segundo plano com table/logs/pids/data etc., vamos ver um por um.

Informações de registros:

Estrutura da tabela após a replicação:

Status da fila de eventos
O status da replicação pode ser verificado com o utilitário pgq conforme abaixo:-
-bash-4.1$ ./pgqadm.py ../scripts/pgqadm.ini status
Postgres version: 9.0.1 PgQ version: 2.1.8

Event queue Rotation Ticker TLag
------------------------------------------------------------------------------
londiste.replica 3/7200s 500/3s/60s 6s
------------------------------------------------------------------------------

Consumer Lag LastSeen
------------------------------------------------------------------------------
londiste.replica:
myfirstlondiste 6s 6s
------------------------------------------------------------------------------

Observação: Existem opções muito boas com os utilitários Londiste e PGQ para fazer P &D.
Espero que todos tenham uma configuração de replicação Londiste bem-sucedida. Por favor, poste seus comentários que são muito apreciados. Nos vemos em breve com mais algumas postagens.