Replicação PostgreSQL eslavo multi
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;
Ativar a atualização automática de comentários