Diferenças entre edições de "Replicação PostgreSQL eslavo multi"

Fonte: Pt Ikoula wiki
Ir para navegação Ir para pesquisar
 
(Há 13 revisões intermédias de outro utilizador que não estão a ser apresentadas)
Linha 1: Linha 1:
 +
<span data-link_translate_pt_title="Replicação PostgreSQL eslavo multi"  data-link_translate_pt_url="Replicação PostgreSQL eslavo multi"></span>[[:pt:Replicação PostgreSQL eslavo multi]][[pt:Replicação PostgreSQL eslavo multi]]
 +
<span data-link_translate_en_title="Replication PostgreSQL Slavic multi"  data-link_translate_en_url="Replication+PostgreSQL+Slavic+multi"></span>[[:en:Replication PostgreSQL Slavic multi]][[en:Replication PostgreSQL Slavic multi]]
 +
<span data-link_translate_he_title="שכפול מרובה PostgreSQL סלאבית"  data-link_translate_he_url="%D7%A9%D7%9B%D7%A4%D7%95%D7%9C+%D7%9E%D7%A8%D7%95%D7%91%D7%94+PostgreSQL+%D7%A1%D7%9C%D7%90%D7%91%D7%99%D7%AA"></span>[[:he:שכפול מרובה PostgreSQL סלאבית]][[he:שכפול מרובה PostgreSQL סלאבית]]
 +
<span data-link_translate_ro_title="Replicare PostgreSQL slave multi"  data-link_translate_ro_url="Replicare+PostgreSQL+slave+multi"></span>[[:ro:Replicare PostgreSQL slave multi]][[ro:Replicare PostgreSQL slave multi]]
 +
<span data-link_translate_ru_title="Multi PostgreSQL славянских репликации"  data-link_translate_ru_url="Multi+PostgreSQL+%D1%81%D0%BB%D0%B0%D0%B2%D1%8F%D0%BD%D1%81%D0%BA%D0%B8%D1%85+%D1%80%D0%B5%D0%BF%D0%BB%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D0%B8"></span>[[:ru:Multi PostgreSQL славянских репликации]][[ru:Multi PostgreSQL славянских репликации]]
 +
<span data-link_translate_pl_title="Replikacja wielu słowiańskich PostgreSQL"  data-link_translate_pl_url="Replikacja+wielu+s%C5%82owia%C5%84skich+PostgreSQL"></span>[[:pl:Replikacja wielu słowiańskich PostgreSQL]][[pl:Replikacja wielu słowiańskich PostgreSQL]]
 +
<span data-link_translate_ja_title="レプリケーション PostgreSQL スラブ マルチ"  data-link_translate_ja_url="%E3%83%AC%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3+PostgreSQL+%E3%82%B9%E3%83%A9%E3%83%96+%E3%83%9E%E3%83%AB%E3%83%81"></span>[[:ja:レプリケーション PostgreSQL スラブ マルチ]][[ja:レプリケーション PostgreSQL スラブ マルチ]]
 +
<span data-link_translate_ar_title="النسخ المتماثل السلافية كيو متعدد"  data-link_translate_ar_url="%D8%A7%D9%84%D9%86%D8%B3%D8%AE+%D8%A7%D9%84%D9%85%D8%AA%D9%85%D8%A7%D8%AB%D9%84+%D8%A7%D9%84%D8%B3%D9%84%D8%A7%D9%81%D9%8A%D8%A9+%D9%83%D9%8A%D9%88+%D9%85%D8%AA%D8%B9%D8%AF%D8%AF"></span>[[:ar:النسخ المتماثل السلافية كيو متعدد]][[ar:النسخ المتماثل السلافية كيو متعدد]]
 +
<span data-link_translate_zh_title="复制 PostgreSQL 斯拉夫语多"  data-link_translate_zh_url="%E5%A4%8D%E5%88%B6+PostgreSQL+%E6%96%AF%E6%8B%89%E5%A4%AB%E8%AF%AD%E5%A4%9A"></span>[[:zh:复制 PostgreSQL 斯拉夫语多]][[zh:复制 PostgreSQL 斯拉夫语多]]
 +
<span data-link_translate_de_title="Replikation PostgreSQL slawischen multi"  data-link_translate_de_url="Replikation+PostgreSQL+slawischen+multi"></span>[[:de:Replikation PostgreSQL slawischen multi]][[de:Replikation PostgreSQL slawischen multi]]
 +
<span data-link_translate_nl_title="Replicatie PostgreSQL Slavische multi"  data-link_translate_nl_url="Replicatie+PostgreSQL+Slavische+multi"></span>[[:nl:Replicatie PostgreSQL Slavische multi]][[nl:Replicatie PostgreSQL Slavische multi]]
 +
<span data-link_translate_it_title="Replica PostgreSQL slavo multi"  data-link_translate_it_url="Replica+PostgreSQL+slavo+multi"></span>[[:it:Replica PostgreSQL slavo multi]][[it:Replica PostgreSQL slavo multi]]
 +
<span data-link_translate_es_title="Replicación multi de PostgreSQL Slavic"  data-link_translate_es_url="Replicaci%C3%B3n+multi+de+PostgreSQL+Slavic"></span>[[:es:Replicación multi de PostgreSQL Slavic]][[es:Replicación multi de PostgreSQL Slavic]]
 
<span data-link_translate_fr_title="Replication PostgreSQL multi slaves"  data-link_translate_fr_url="Replication_PostgreSQL_multi_slaves"></span>[[:fr:Replication PostgreSQL multi slaves]][[fr:Replication PostgreSQL multi slaves]]
 
<span data-link_translate_fr_title="Replication PostgreSQL multi slaves"  data-link_translate_fr_url="Replication_PostgreSQL_multi_slaves"></span>[[:fr:Replication PostgreSQL multi slaves]][[fr:Replication PostgreSQL multi slaves]]
 
<br />
 
<br />
 +
 +
{{#seo:
 +
|title=Replicação PostgreSQL eslavo multi
 +
|title_mode=append
 +
|keywords=these,are,your,keywords
 +
|description=Replicação PostgreSQL eslavo multi
 +
|image=Uploaded_file.png
 +
|image_alt=Wiki Logo
 +
}}
  
 
Este artigo foi traduzido por um sistema de tradução automática. Você pode visualizar a fonte do artigo [[:fr:Replication PostgreSQL multi slaves|aqui]].<br /><span data-translate="fr"></span>
 
Este artigo foi traduzido por um sistema de tradução automática. Você pode visualizar a fonte do artigo [[:fr:Replication PostgreSQL multi slaves|aqui]].<br /><span data-translate="fr"></span>
Linha 7: Linha 29:
  
  
Esta página aborda a implementação de um assíncrono PostgreSQL streaming de replicação com um mestre e dois escravos. Nosso eslavo será configurado como quente espera, isso quer dizer que será possível executar consultas  (somente leitura ) sobre estes.
+
Esta página aborda a implementação de um assíncrono [https://www.ikoula.pt/pt/postgresql-nuvem-publica PostgreSQL] streaming de replicação com um mestre e dois escravos. Nosso eslavo será configurado como quente espera, isso quer dizer que será possível executar consultas  (somente leitura ) sobre estes.
  
  

Edição atual desde as 14h47min de 27 de outubro de 2021

pt:Replicação PostgreSQL eslavo multi en:Replication PostgreSQL Slavic multi he:שכפול מרובה PostgreSQL סלאבית ro:Replicare PostgreSQL slave multi ru:Multi PostgreSQL славянских репликации pl:Replikacja wielu słowiańskich PostgreSQL ja:レプリケーション PostgreSQL スラブ マルチ ar:النسخ المتماثل السلافية كيو متعدد zh:复制 PostgreSQL 斯拉夫语多 de:Replikation PostgreSQL slawischen multi nl:Replicatie PostgreSQL Slavische multi it:Replica PostgreSQL slavo multi es:Replicación multi de PostgreSQL Slavic fr:Replication PostgreSQL multi slaves

Este artigo foi traduzido por um sistema de tradução automática. Você pode visualizar a fonte do artigo aqui.

Introdução

Esta página aborda a implementação de um assíncrono PostgreSQL streaming de replicação com um mestre e dois escravos. Nosso eslavo será configurado como quente espera, isso quer dizer que será possível executar consultas (somente leitura ) sobre estes.


Contexto desta colocação :


Temos 3 Servidores Debian 8 (última atualização ) :

Postgres 01 (10.1.1.75) : será nosso mestre

Postgres02 (10.1.1.90) : será um escravo

Postgres03 (10.1.1.199) : será um escravo segundo


Especificado de comandos será executar como root quando eles são precedidos por "#" e como o usuário Postgres do sistema quando eles são precedidos por "$".

Instalação do PostgreSQL e pré-configuração dos três servidores

Todos os comandos nesta parte estão a ser feito em cada um dos servidores.

Como primeiro passo, é aconselhável ter um arquivo /etc/hosts preenchido com as correspondências de cada servidor, assim (adaptando-se com os nomes de host e os endereços ip dos seus próprios servidores ) :

# cat /etc/hosts
127.0.0.1       localhost

10.1.1.75       Postgres 01
10.1.1.90       Postgres 02
10.1.1.199      Postgres 03


Adicionar o depósito APT PostgreSQL :

# echo "deb http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main" > /etc/apt/sources.list.d/postgres.list


Nós importamos a chave pública deste depósito :

# gpg --keyserver pgpkeys.mit.edu --recv-key 7FCC7D46ACCC4CF8 && gpg -a --export 7FCC7D46ACCC4CF8 | apt-key add -
gpg: directory `/root/.gnupg' created
gpg: new configuration file `/root/.gnupg/gpg.conf' created
gpg: WARNING: options in `/root/.gnupg/gpg.conf' are not yet active during this run
gpg: keyring `/root/.gnupg/secring.gpg' created
gpg: keyring `/root/.gnupg/pubring.gpg' created
gpg: requesting key ACCC4CF8 from hkp server pgpkeys.mit.edu
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key ACCC4CF8: public key "PostgreSQL Debian Repository" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
OK


Ele atualiza o cache do APT para levar em conta o depósito :

# apt-get update


Instalar o pacote postgresql (instalar a última versão estável é a 9.5 na época onde estas linhas são escritas ) :

# apt-get install postgresql


Definimos uma senha (da sua escolha mas seguro ) e gera um par de chave ssh (sem senha ) para o usuário postgres do sistema :

# passwd postgres
# su - postgres
$ ssh-keygen


Copiamos o usuário postgres de e entre cada servidor público ssh chave :


Desde o primeiro servidor (postgres01 no nosso caso ) para o segundo (postgres02 para nós ) e troisiseme (postgres03) :

root@postgres01:~# su - postgres
postgres@postgres01:~$ ssh-copy-id postgres02
postgres@postgres01:~$ ssh-copy-id postgres03


Do segundo para o primeiro e o terceiro servidor :

root@postgres02:~# su - postgres
postgres@postgres02:~$ ssh-copy-id postgres01
postgres@postgres02:~$ ssh-copy-id postgres03


Do terceiro para o primeiro e o segundo servidor :

root@postgres03:~# su - postgres
postgres@postgres03:~$ ssh-copy-id postgres01
postgres@postgres03:~$ ssh-copy-id postgres02

A configuração de Master

Fazer só no master (postgres01 no nosso caso ) :


Ele cria o papel /usuário de replicação :

# su - postgres
$ psql -c "CREATE USER repuser REPLICATION LOGIN CONNECTION LIMIT 2 ENCRYPTED PASSWORD '<mot de passe repuser>';"

Nota : Ele define um limite de conexão de 2 Porque temos 2 Eslava


Editando o arquivo de configuração principal do postgresql /etc/postgresql/9.5/main/postgresql.conf para configurar as seguintes directivas :

listen_addresses = '*'
wal_level = hot_standby
archive_mode = on
archive_command = 'rsync -av %p postgres@<ip du premier slave>:/var/lib/postgresql/wal_archive/%f'
max_wal_senders = 2
wal_keep_segments = 256
hot_standby = on

Nota : Podemos habilitar o arquivamento para nosso segundo servidor (Personalize o seu endereço de ip do servidor ) para ainda mais precauções. Podemos também definir os parâmetros hot_standby, bem isso ignorado em um mestre, onde ele deve ser rebaixado a escrava no futuro.


Agora editar o arquivo de autenticação do postgresql /etc/postgresql/9.5/main/pg_hba.conf para adicionar a permissão de nosso usuário de replicação se conectar de nosso eslavo ou a seguinte linha no final do arquivo :

hostssl replication     repuser <ip du réseau de vos serveurs>/24     md5

Por favor se adaptar a esta linha de acordo com o nome de seu usuário de rede e replicação (ou endereços ip respectivo ) de seu eslavo


Reinicia o serviço postgresql para levar em conta nossa configuração (na raiz ) :

# systemctl restart postgresql


Isso garante que o serviço é iniciado corretamente :

root@postgres01:~# systemctl status postgresql
● postgresql.service - PostgreSQL RDBMS
   Loaded: loaded (/lib/systemd/system/postgresql.service; enabled)
   Active: active (exited) since Thu 2016-06-02 12:06:28 CEST; 22s ago
  Process: 77056 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 Main PID: 77056 (code=exited, status=0/SUCCESS)


root@postgres01:~# ps -u postgres u
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
postgres  77038  0.0  4.4 227300 21836 ?        S    12:06   0:00 /usr/lib/postgresql/9.5/bin/postgres -D /var/lib/postgresql/9.
postgres  77040  0.0  0.8 227300  4160 ?        Ss   12:06   0:00 postgres: checkpointer process
postgres  77041  0.0  1.0 227300  4968 ?        Ss   12:06   0:00 postgres: writer process
postgres  77042  0.0  1.7 227300  8776 ?        Ss   12:06   0:00 postgres: wal writer process
postgres  77043  0.0  1.3 227728  6708 ?        Ss   12:06   0:00 postgres: autovacuum launcher process
postgres  77044  0.0  0.6  82244  3392 ?        Ss   12:06   0:00 postgres: archiver process
postgres  77045  0.0  0.8  82244  4244 ?        Ss   12:06   0:00 postgres: stats collector process

Configuração dos eslavos

Sobre o primeiro escravo

Começamos por parar o serviço do postgresql :

# systemctl stop postgresql


Editando o arquivo de configuração principal do postgresql /etc/postgresql/9.5/main/postgresql.conf para configurar as mesmas diretrizes como o mestre, ajustando-se apenas o ip do primeiro escravo pelo segundo escravo no comando rsync para arquivar ou :

listen_addresses = '*'
wal_level = hot_standby
archive_mode = on
archive_command = 'rsync -av %p postgres@<ip du second slave>:/var/lib/postgresql/wal_archive/%f'
max_wal_senders = 2
wal_keep_segments = 256
hot_standby = on


Agora editar o arquivo de autenticação do postgresql /etc/postgresql/9.5/main/pg_hba.conf para adicionar a permissão de nosso usuário de replicação se conectar de nossos outros servidores (Isso será usado quando este escravo esperado promovido mestre ) :

hostssl replication     repuser <ip du réseau de vos serveurs>/24     md5

Nota : Com essa configuração semelhante ao nosso mestre isto permitirá facilmente promover este escravo como mestre em caso de necessidade.


Para as operações abaixo, faça login como usuário postgres do sistema :

# su – postgres


Nós criamos o diretório de destino para a wal de arquivos mestre :

$ mkdir /var/lib/postgresql/wal_archive


Ele remove o diretório de dados do postgresql :

$ rm -rf /var/lib/postgresql/9.5/main


Faz o backup de base (personalizar o ip de seu mestre e o nome do seu usuário de replicação ), a senha de seu usuário de replicação será solicitado :

$ pg_basebackup -h <ip de votre master> -D /var/lib/postgresql/9.5/main -U repuser -v -P --xlog


Criando o arquivo de configura a replicação /var/lib/postgresql/9.5/main/recovery.conf com os seguintes parâmetros :

standby_mode = on
primary_conninfo = 'host=<ip de votre master> port=5432 user=repuser password=<mot de passe de repuser> sslmode=require application_name=<hostname de votre slave>'
trigger_file = '/var/lib/postgresql/9.5/postgres.trigger'

Nota : O arquivo de gatilho é o arquivo que criamos quando queremos seu escravo replicação pára e vai começar aceitando inscrições — quando você deseja promovê-lo como mestre. Antes de promover um escravo em caso de queda de seu mestre, certifique-se de que o mestre inicial não subirá para evitar a corrupção.


Voltamos a raiz e começa o serviço :

# systemctl start postgresql


Isso garante que o serviço foi iniciado corretamente :

# systemctl status postgresql
● postgresql.service - PostgreSQL RDBMS
   Loaded: loaded (/lib/systemd/system/postgresql.service; enabled)
   Active: active (exited) since Thu 2016-06-02 12:53:42 CEST; 1min 6s ago
  Process: 8894 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 Main PID: 8894 (code=exited, status=0/SUCCESS)


# ps -u postgres u
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
postgres   8878  0.0  4.4 227308 21892 ?        S    12:53   0:00 /usr/lib/postgresql/9.5/bin/postgres -D /var/lib/postgresql/9.
postgres   8879  0.0  1.1 227376  5700 ?        Ss   12:53   0:00 postgres: startup process   recovering 00000001000000000000000
postgres   8880  0.0  0.8 227308  4140 ?        Ss   12:53   0:00 postgres: checkpointer process
postgres   8881  0.0  1.0 227308  5236 ?        Ss   12:53   0:00 postgres: writer process
postgres   8882  0.0  0.6  82252  3316 ?        Ss   12:53   0:00 postgres: stats collector process
postgres   8883  0.0  1.7 238064  8520 ?        Ss   12:53   0:00 postgres: wal receiver process   streaming 0/30003E0


Se ele se conecta ao nosso mestre, já podemos verificar a replicação entre o mestre e o escravo primeiro é funcional :

Ele se conecta ao nosso mestre e ele se conecta no usuário postgres do sistema :

# su - postgres


Em seguida, conectar ao postgresql :

$ psql


Permite a exibição estendida e verificamos nossa replicação :

postgres=# \x
Expanded display is on.
postgres=# select * from pg_stat_replication;
-[ RECORD 1 ]----+------------------------------
pid              | 78879
usesysid         | 16384
usename          | repuser
application_name | postgres02
client_addr      | 10.1.1.90
client_hostname  |
client_port      | 49009
backend_start    | 2016-06-02 12:53:36.641823+02
backend_xmin     |
state            | streaming
sent_CRElocation    | 0/30004C0
write_location   | 0/30004C0
flush_location   | 0/30004C0
replay_location  | 0/30004C0
sync_priority    | 0
sync_state       | async

Nossa replicação assíncrona de fluxo contínuo com nosso primeiro escravo é bem feita. Esta fase tem um mestre replicação /Escravo clássico (um único escravo assíncrono de streaming )

No segundo slave

Nós Redid o mesmo que foi feito no primeiro slave obviamente adaptando seu hostname no arquivo recovery.conf e ip endereço no comando de arquivamento no arquivo de configuração principal, se você também deseja Habilitar arquivamento sobre este segundo escravo.

Verificação e ensaio de nosso multi mestre replicação eslavo

Ele se conecta ao mestre e é registrada no usuário postgres :

# su – postgres

Em seguida, conectar ao postgresql :

$ psql


Permite a exibição estendida e verificamos nossa replicação :

postgres=# \x
Expanded display is on.
postgres=# select * from pg_stat_replication;
-[ RECORD 1 ]----+------------------------------
pid              | 78879
usesysid         | 16384
usename          | repuser
application_name | postgres02
client_addr      | 10.1.1.90
client_hostname  |
client_port      | 49009
backend_start    | 2016-06-02 12:53:36.641823+02
backend_xmin     |
state            | streaming
sent_location    | 0/5000140
write_location   | 0/5000140
flush_location   | 0/5000140
replay_location  | 0/5000140
sync_priority    | 0
sync_state       | async
-[ RECORD 2 ]----+------------------------------
pid              | 82725
usesysid         | 16384
usename          | repuser
application_name | postgres03
client_addr      | 10.1.1.199
client_hostname  |
client_port      | 51754
backend_start    | 2016-06-02 14:31:43.759683+02
backend_xmin     |
state            | streaming
sent_location    | 0/5000140
write_location   | 0/5000140
flush_location   | 0/5000140
replay_location  | 0/5000140
sync_priority    | 0
sync_state       | async

Então lá bem nosso 2 replicação com nossos dois servidores eslavas (postgres02 e postgres 03).


Ainda ligado ao postgresql no mestre, ele cria um dados base (ex : checkrep ) :

postgres=# CREATE DATABASE checkrep;


Ele verifica que o banco de dados é bem replicado no nosso 2 Eslava :

root@postgres02:~# su - postgres
postgres@postgres02:~$ psql
psql (9.5.3)
Type "help" for help.

postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 checkrep  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(4 rows)


root@postgres03:~# su - postgres
postgres@postgres03:~$ psql
psql (9.5.3)
Type "help" for help.

postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 checkrep  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(4 rows)

É o banco de dados que criamos em nosso mestre é tão bem automaticamente replicada para nossos dois eslavo.


Para excluir, desde o mestre :

postgres=# DROP DATABASE checkrep;



Não tem permissão para colocar comentários.