-
Introdução mestre-escravo
- A replicação de streaming do PostgreSQL é assíncrona por padrão. Se o servidor principal travar, algumas das transações confirmadas podem não ter sido replicadas no servidor de backup, o que pode causar perda de dados. A quantidade de dados perdidos é proporcional ao atraso da replicação durante o failover.
- A replicação síncrona pode garantir que todas as modificações de uma transação possam ser transmitidas para um ou mais servidores de backup síncronos. Isso expande o nível de persistência padrão fornecido por uma confirmação de transação. Esse nível de proteção é chamado de replicação 2-segura na teoria da ciência da computação. Quando
synchronous_commit
é definidaremote_write
, em seguida, um grupo 1-cofre (grupo- segura e 1-segura). - Ao solicitar a replicação síncrona, cada confirmação de uma transação de gravação aguardará até receber uma confirmação de que a confirmação foi gravada no disco de logon write-ahead nos servidores principal e de backup. A única possibilidade de perda de dados é que o servidor principal e o servidor de backup falhem ao mesmo tempo. Isso pode fornecer um nível mais alto de persistência, embora apenas o administrador do sistema seja responsável pelo posicionamento e gerenciamento dos dois servidores. Aguardar confirmação aumenta a confiança do usuário de que a modificação não será perdida, mas também aumenta desnecessariamente o tempo de resposta à transação solicitada. O tempo mínimo de espera é o tempo de ida e volta entre o servidor principal e o servidor de backup.
- As transações somente leitura e as reversões de transações não precisam aguardar a resposta do servidor em espera. As confirmações de sub-transação não precisam aguardar a resposta do servidor de backup, apenas as confirmações de nível superior precisam aguardar. Ações de longa execução (como carregamento de dados ou criação de índice) não aguardarão a mensagem final de confirmação. Todas as ações de envio em duas fases requerem espera de envio, incluindo preparação e envio.
- O backup de sincronização pode ser um backup de replicação física ou um assinante de replicação lógica. Também pode ser consumidor de qualquer outro fluxo de replicação físico ou lógico do WAL e sabe como enviar mensagens de feedback apropriadas. Além do built-in sistema de replicação física e lógica, compreendendo mais
pg_receivewal
epg_recvlogical
regimes especiais e similares, bem como algum sistema de cópia de terceiros e programas personalizados. Para detalhes do suporte à replicação síncrona, consulte a documentação correspondente.
-
Distribuição da máquina mestre-escravo
-
Endereço IP Versão do banco de dados Relação mestre-escravo 192.168.63.134 11,6 Mestre 192.168.63.141 11,6 A partir de
-
-
Instale o postgresql
-
yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm -y yum install postgresql11 -y yum install postgresql11-server - y
-
-
Configuração da biblioteca principal
-
Inicialização da biblioteca principal
-
/ usr / pgsql-11 / bin / postgresql-11-setup initdb systemctl start postgresql-11
-
- Crie usuários de replicação para sincronização mestre-escravo
- Configure a biblioteca escrava para usar a conta repl na biblioteca principal
-
vim /var/lib/pgsql/11/data/pg_hba.conf #Só precisa adicionar as duas linhas a seguir, repl é usado para usuários de backup, 192.168.63.0/24 atrás é o endereço IP na replicação de host do segmento de rede repl 192.168.63.0/24 md5 hospeda todos repl 192.168.63.0/24 trust vim /var/lib/pgsql/11/data/postgresql.conf listen_addresses = '*' # em que endereço (s) IP (s) escutar; port = 5432 # (a mudança requer reinicialização) max_connections = 512 # (a mudança requer reinicialização) shared_buffers = 128MB # min 128kB dynamic_shared_memory_type = posix # o padrão é a primeira opção wal_level = hot_standby # mínimo, réplica ou lógica archive_mode = on # ativa o arquivamento; off, on ou sempre archive_command = 'comando cp% p / var / lib / pgsql / 11 / data / pg_archive /% f' # para usar para arquivar um segmento de arquivo de log max_wal_senders = 6 # número máximo de processos do walsender wal_keep_segments = 10240 # em segmentos de arquivo de log, 16 MB cada ; 0 desativa wal_sender_timeout = 60s # em milissegundos; 0 desativa log_directory = 'log' # diretório em que os arquivos de log são gravados
- Após a modificação, você precisa criar algumas estruturas de diretório que você acabou de configurar:
-
mkdir / var / lib / pgsql / 11 / data / pg_archive / chown -R postgres.postgres / var / lib / pgsql / 11 / data
- Reinicie o serviço de biblioteca principal
-
systemctl restart postgresql-11
-
-
-
Configuração do escravo
- Após a conclusão da instalação da biblioteca, não inicialize, se tiver sido inicializada, exclua seu diretório de dados
-
#Copie todos os arquivos de dados do nó mestre [root @ localhost ~] # pg_basebackup -h 192.168.63.134 -U repl -D / var / lib / pgsql / 11 / data / -X stream -P senha: P : 25312/25312 kB (100%), 1/1 de tabela [a raiz @ localhost ~] # LS / var / lib / pgSQL / 12 é / dados / current_logfiles backup_label pg_commit_ts o pg_hba.conf pg_logical pg_notify pg_serial pg_stat pg_subtrans pg_twophase pg_wal postgresql.auto.conf log da base de dados global pg_archive pg_dynshmem pg_ident.conf pg_multixact pg_replslot pg_snapshots pg_stat_tmp pg_tblspc PG_VERSION pg_xact postgresql.conf
- No arquivo de configuração da biblioteca, modifique de acordo com a seguinte configuração.
[root @ localhost ~] # vim /var/lib/pgsql/11/data/postgresql.conf listen_addresses = '*' # em quais endereços IP escutar; port = 5432 # (a mudança requer reinicialização) max_connections = 1000 # (a mudança requer reinicialização) shared_buffers = 128MB # min 128kB dynamic_shared_memory_type = posix # o padrão é a primeira opção wal_level = réplica # mínimo, réplica ou lógico archive_mode = on # permite arquivamento ; comando off, on ou sempre archive_command = 'cp% p / var / lib / pgsql / 12 / data / pg_archive /% f' # para usar para arquivar um segmento de arquivo de log wal_sender_timeout = 60s # em milissegundos; 0 desativa hot_standby = on # "on" permite consultas durante a recuperação max_standby_streaming_delay = 30s # atraso máximo antes de cancelar as consultas wal_receiver_status_interval = 10s # envia respostas pelo menos com frequência neste hot_standby_feedback = on # envia informações do modo de espera para impedir o diretório log_directory = 'log' # onde os arquivos de log estão escritos,
- Crie um arquivo de recuperação recovery.conf.
-
[root @ localhost 11] # cp /usr/pgsql-11/share/recovery.conf.sample /var/lib/pgsql/11/data/recovery.conf [root @ localhost 11] # vim / var / lib / pgsql /11/data/recovery.conf # Ajuste os parâmetros: recovery_target_timeline = 'latest' #Sync com os dados mais recentes standby_mode = on #Especifique a identidade da biblioteca escrava trigger_file = 'failover.now' primary_conninfo = 'host = 192.168.63.134 port = 5432 user = repl password = 123456 '#Conecte-se às informações da biblioteca principal
- Iniciar escravo
systemctl start postgresql-11
-
- Verifique a configuração mestre-escravo
- Execute o seguinte comando na biblioteca principal
postgres = # selecione client_addr, sync_state em pg_stat_replication; client_addr | sync_state ---------------- + ------------ 192.168.63.141 | assíncrono (1 记录)
- Execute o seguinte comando na biblioteca principal
- Você pode criar um banco de dados para verificar a si mesmo
Consulte https://www.cnblogs.com/miclis/p/10480979.html para obter detalhes