Multi de escravos de replicação PostgreSQL

Fonte: Pt Ikoula wiki
Ir para navegação Ir para pesquisar
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

pt:Multi de escravos de replicação PostgreSQL en:PostgreSQL replication slaves multi he:PostgreSQL שכפול עבדים רב ro:PostgreSQL replicare sclavi multi ru:PostgreSQL репликации рабы multi pl:PostgreSQL replikacji niewolników multi ja:PostgreSQL のレプリケーション スレーブ マルチ ar:كيو النسخ المتماثل العبيد متعددة zh:PostgreSQL 复制奴隶多 de:PostgreSQL Replikation Sklaven multi nl:PostgreSQL replicatie slaven multi it:PostgreSQL replica schiavi multi es:PostgreSQL replicación esclavos multi 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 uma replicação assíncrona de PostgreSQL streaming com um mestre e dois escravos. Nosso eslavo será configurado como quente espera, isso quer dizer que será possível ecutar consultas | _. _. somente leitura | _. _. sobre estes.

Contexto dessa implementação | _. _. Temos | _. _. Servidores Debian | _. _. atualizado | _. _. Em seguida, conectar ao ql | _. _. Podemos ativar a exibição estendida e verificamos nossa replicação | _. _. Temos tanto nosso | _. _. replicação com nossos dois servidores eslavas | _. _. | _. _. e | _. _. Sempre ligado ao ql no mestre, criar um banco de dados teste | _. _. ex | _. _. | _. _. para confirmar que a replicação é funcional | _. _. Verifique que o banco de dados é bem replicado em nosso | _. _. Eslava | _. _. O banco de dados que criamos em nosso mestre é tão bem automaticamente replicado em nossos dois eslavo. | _. _. será nosso mestre | _. _. | _. _. será um escravo | _. _. Postgres | _. _. será um escravo segundo | _. _. Indicado ordens será a raiz quando eles são precedidos de | _. _. e como o usuário do sistema quando eles são precedidos de | _. _. Instalação do PostgreSQL e pré-configuração de todos os três servidores: _! _ | Todos os pedidos desta parte são para fazer em cada um dos servidores. (Como primeiro passo, é aconselhável ter um arquivo | _. _. preenchida com conexões para cada servidor, assim: _! _ | adaptando-se com os nomes de host e os endereços ip dos seus próprios servidores | _. _. Adicionar arquivo APT PostgreSQL | _. _. Nós importamos a chave pública deste depósito | _. _. Nós atualizamos o cache do APT para ter em conta o depósito | _. _. Vamos instalar o pacote ql | _. _. instalar a última versão estável é o | _. _. no momento da redação deste texto | _. _. Ele define uma senha | _. _. da sua escolha mas seguro | _. _. e gera um par de chave ssh | _. _. sem senha | _. _. para o usuário postgres do sistema | _. _. Copiamos o usuário postgres desde e entre o público de cada servidor ssh chave | _. _. Desde o primeiro servidor | _. _. Postgres | _. _. no nosso caso: _! _ | para o segundo | _. _. Postgres | _. _. para nós | _. _. e troisiseme | _. _. Postgres | _. _. Do segundo para o primeiro e o terceiro servidor | _. _. Do terceiro para o primeiro e o segundo servidor | _. _. Configuração do mestre: _! _ | Fazer só o mestre: _! _ | Postgres | _. _. no nosso caso: _! _ | Nós criamos o papel | _. _. replicação de usuário: _! _ | Nota: _! _ | Podemos definir um limite de conexão de | _. _. Porque temos | _. _. Eslava | _. _. Vamos editar o arquivo de configuração principal do postgresql | _. _. para configurar as seguintes diretrizes: _! _ | Nota: _! _ | Podemos ativar arquivamento para nosso segundo servidor | _. _. personalizar o IP do seu servidor | _. _. para ainda mais precauções, mas isto não é uma obrigação. Podemos também definir os parâmetros hot_standby, bem que ignorou por um mestre, caso em que deve ser rebaixado para escravo no futuro. ) Agora publica o arquivo de autenticação do postgresql | _. _. para adicionar a nossa autorização de usuário de replicação para conectar da nosso eslavo ou a seguinte linha no final do arquivo: _. _ | Por favor se adaptar a esta linha de acordo com o nome de seu usuário de rede e replicação | _. _. ou respectivos ip endereços: _! _ | de seu eslavo | _. _. Reiniciar o serviço do postgresql para levar em conta nossa configuração | _. _. na raiz | _. _. Isso garante que o serviço foi iniciado com êxito | _. _. Configuração do eslavo | _. _. Sobre o primeiro escravo | _. _. Vamos parar o serviço do postgresql | _. _. Vamos editar o arquivo de configuração principal do postgresql | _. _. para configurar as mesmas diretrizes como o mestre, ajustando-se apenas o endereço IP do primeiro escravo por que o segundo escravo no rsync arquivo comando se você quiser ativá-lo ou | _. _. Agora publica o arquivo de autenticação do postgresql | _. _. para adicionar a autorização de nosso usuário de replicação se conectar de nossos outros servidores: _! _ | Fará isso no caso deste escravo deve promovido mestre | _. _. Nota: _! _ | Com essa configuração semelhante do nosso mestre permite facilmente promover este escravo como um mestre em caso de necessidade.


Para as operações abaixo, faça login como usuário sistema postgres | _. _. Nós criamos o diretório de destino do wal dos arquivos mestre | _. _. Podemos remover o diretório de dados do postgresql | _. _. Faz o backup de base | _. _. personalizar o ip de seu mestre e o nome do seu usuário de replicação :


, você será solicitado a senha de seu usuário de replicação | _. _. Você configurar a replicação, criando o arquivo | _. _. com os seguintes parâmetros: _! _ | Nota: _! _ | O arquivo de gatilho é o arquivo que criamos quando queremos sua replicação de paragem de escravo e começa a aceitar as escrituras que é quando queremos promovê-lo como mestre. Antes de promover uma queda de escravo de seu mestre, por favor, certifique-se de que o mestre inicial aparecer não para evitar qualquer dano. 3 Raiz, voltamos e começamos o serviço: _! _ | Isso garante que o serviço foi iniciado com êxito | _. _. Se ligamos para o nosso mestre, já podemos verificar a replicação entre o mestre e o escravo primeiro é funcional | _. _. Ele se conecta ao nosso mestre e nos conectamos em usuário do sistema postgres | _. _. Em seguida, conectar ao postgresql | _. _. Podemos ativar a exibição estendida e verificamos nossa replicação | _. _. Nossa replicação assíncrona de fluxo contínuo com nosso primeiro escravo é bem-feito. Neste momento temos um mestre replicação | _. _. Escravo clássico | _. _. um único escravo assíncrono de streaming | _. _. No segundo slave | _. _. Repita o mesmo que foi feito no primeiro slave obviamente adaptando seu hostname no endereço de ip e recovery.conf de arquivo na ordem de entrada no arquivo de configuração principal, se você também deseja Habilitar arquivamento sobre este segundo escravo. 8 (Auditoria e teste do nosso multi mestre replicação eslavos | _. _. Ele se conecta ao mestre e você está logado o usuário postgres) :

Postgres01 (10.1.1.75) : Para removê-lo, desde o mestre

Postgres02 (10.1.1.90) :

Postgres03 (10.1.1.199) :


"#"  "$".

/etc/hosts  ()  :
# cat /etc/hosts
127.0.0.1       localhost

10.1.1.75       postgres01
10.1.1.90       postgres02
10.1.1.199      postgres03


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


:
# 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


:
# apt-get update


( 9.5 ) :
# apt-get install postgresql


()  ()  :
# passwd postgres
# su - postgres
$ ssh-keygen


:


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


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


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

(postgres01 ) :


/ :

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

 : 2 2


/etc/postgresql/9.5/main/postgresql.conf  :
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

: ()


/etc/postgresql/9.5/main/pg_hba.conf  :
hostssl replication     repuser <ip du réseau de vos serveurs>/24     md5

()


() :
# systemctl restart postgresql


:
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

:
# systemctl stop postgresql


/etc/postgresql/9.5/main/postgresql.conf  :
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


/etc/postgresql/9.5/main/pg_hba.conf  () :
hostssl replication     repuser <ip du réseau de vos serveurs>/24     md5

 :


:
# su – postgres


:
$ mkdir /var/lib/postgresql/wal_archive


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


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


/var/lib/postgresql/9.5/main/recovery.conf  :
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'

 :


:
# systemctl start postgresql


:
# 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


:
:
# su - postgres


:
$ psql


:
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

/ ()

:
# su – postgres
:
$ psql


:
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
2  (postgres02 03).


(ex : checkrep)  :
postgres=# CREATE DATABASE checkrep;


2  :
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)



:
postgres=# DROP DATABASE checkrep;



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