Do not speak Portuguese? Translate this site with Google or Bing Translator
Postgres Replicação com REPMGR

Posted on: March 04, 2024 11:02 PM

Posted by: Renato

Views: 339

[ PostgreSQL ] Replicação com REPMGR

Em cenários onde cada segundo é crucial, uma interrupção inesperada pode ter um impacto significativo nos negócios. Ninguém deseja ser pego de surpresa, não é mesmo? É aí que entra o Repmgr, o super-herói dos clusters de servidores PostgreSQL. Trata-se de um conjunto de ferramentas de código aberto que simplifica a administração de replicação e torna os failovers uma tarefa mais gerenciável.

Em poucas palavras, o Repmgr é a carta na manga para manter os servidores PostgreSQL sempre em funcionamento, garantindo que os negócios continuem sem interrupções!

Pré-requisitos para seguir este tutorial:

 

  • Sistema operacional Linux CentOS 8 ou superior.
  • PostgreSQL 13 instalado em dois ambientes.

 

 

Como configurar? Vamos lá

 

 

  1. Instalando o REPMGR no servidor Prmary e Standby

 

 

No servidor primary, instale o REPMGR

yum -y install repmgr13*

 

No servidor standby

yum -y install repmgr13*

 

Servidor Primary e Standby Instalação do REPMGR

 

2. Configuração e Parametrização dos Ambientes:

Nesta fase, procederemos com a configuração dos parâmetros essenciais para a replicação no PostgreSQL.

No arquivo de configuração do PostgreSQL, localizado em /var/lib/pgsql/13/data/postgresql.conf, realize as seguintes edições nos parâmetros indicados:

archive_command = 'cp %p /var/lib/pgsql/archive/%'
archive_mode = on
hot_standby = on
listen_addresses = '*'
max_replication_slots = 10
max_wal_senders = 5
shared_preload_libraries = 'repmgr'
wal_level = replica 

Estas modificações visam otimizar o ambiente para suportar a replicação eficiente no PostgreSQL. Lembre-se de reiniciar o PostgreSQL para aplicar as alterações.

Prossigamos para a próxima etapa assim que essas configurações estiverem concluídas e verificadas.

 

3. Criação do Usuário para Gerenciamento da Replicação:

No ambiente PRIMARY, é necessário criar um usuário e conceder permissões de superusuário para gerenciar a replicação, neste caso, o usuário repmgr.

3.1. Criando o Usuário:

Utilize o seguinte comando SQL para criar o usuário repmgr:

postgres=# create user repmgr;

postgres=# create database repmgr owner repmgr; 

3.2. Concedendo Permissões de Superusuário:

Após criar o usuário, conceda as permissões necessárias:

postgres=# alter user repmgr with superuser
Criação de usuário manager

 

Volte para o arquivo pg_hba.conf e conceda acesso ao usuário.

Por motivos de estudo ou laboratório, criarei o usuário com permissões de acesso de qualquer local. Evite realizar esta ação em ambientes produtivos!

Acesse o arquivo em /var/lib/pgsql/13/data/pg_hba.conf

adicione a seguinte linha de configuração

host    repmgr          repmgr          0.0.0.0/0               trust
host    replication     repmgr          /32         trust 
pg_hba.conf

4. Configuração do Arquivo REPMGR.CONF:

A próxima etapa é a criação do arquivo repmgr.conf no nó primário. Embora possa ser criado em qualquer local do sistema operacional, optei por colocá-lo no meu diretório de dados do PostgreSQL, consolidando meus arquivos de configuração em um único local.

Vamos definir os parâmetros mínimos para garantir o funcionamento, lembrando que este arquivo de configuração pode ser mais extenso conforme necessário.

Diretório de Dados: /var/lib/pgsql/13/data/

touch repmgr.conf

vi repmgr.conf

 

  • Dentro deste arquivo, iremos editar as seguintes configurações.

 

node_id=1

node_name=Master

conninfo='user=repmgr password=1 host=192.168.0.106 dbname=repmgr port=5432 connect_timeout=2'

data_directory='/var/lib/pgsql/13/data/'

failover=automatic

promote_command='/usr/pgsql-13/bin/repmgr standby promote -f /var/lib/pgsql/13/data/repmgr.conf --log-to-file'

follow_command='/usr/pgsql-13/bin/repmgr standby follow -f /var/lib/pgsql/13/data/repmgr.conf --log-to-file --upstream-node-id=%n'

 

5. Registrando o Servidor como Primary (Master):

Perfeito! Após realizar todas as configurações iniciais, vamos indicar ao nosso PostgreSQL quem está no controle, estabelecendo claramente qual é o nosso banco principal.

/usr/pgsql-13/bin/repmgr  -f  /var/lib/pgsql/13/data/repmgr.conf  primary register

 

funcionando!

6. Configuração do REPMGR.CONF no Servidor Standby:

Proceda à criação do arquivo repmgr.conf no servidor standby (Passo 4).

No entanto, ao contrário do Master, incluiremos as seguintes configurações.

 node_id=2

node_name=Standby

conninfo='user=repmgr password=1 host=192.168.0.107 dbname=repmgr port=5432 connect_timeout=2'

data_directory='/var/lib/pgsql/13/data/'

failover=automatic

promote_command='/usr/pgsql-13/bin/repmgr standby promote -f /var/lib/pgsql/13/data/repmgr.conf --log-to-file'

follow_command='/usr/pgsql-13/bin/repmgr standby follow -f /var/lib/pgsql/13/data/repmgr.conf --log-to-file --upstream-node-id=%n'

 

7. Registrando o Servidor Standby:

Agora que configuramos o servidor principal, é hora de registrar o servidor standby para receber os dados do master.

Inicialmente, realizaremos o clone entre os ambientes.

/usr/pgsql-13/bin/repmgr -h 192.168.0.106 -U repmgr -d repmgr -f /var/lib/pgsql/13/data/repmgr.conf standby clone -F
Realizando clone

Registre o seu servidor standby para informar ao PostgreSQL quem ele é.

/usr/pgsql-13/bin/repmgr -h 192.168.0.106 -U repmgr -d repmgr -f /var/lib/pgsql/13/data/repmgr.conf standby register -F

No cluster MASTER, verifique se as alterações foram devidamente aceitas.

/usr/pgsql-13/bin/repmgr  -f  /var/lib/pgsql/13/data/repmgr.conf cluster  show

E aqui está: nossos bancos de dados MASTER e STANDBY estão em comunicação.

Para demonstrar, efetuei o acesso em ambos os ambientes. No servidor master, criei um banco de dados chamado GUSTAVO e executei a consulta correspondente no servidor STANDBY.

Em resumo, agora estamos com a replicação do PostgreSQL funcionando redondinha! Desde a instalação do Repmgr até a criação de bancos e consultas, cobrimos tudo. Fica claro que o Repmgr é um aliado poderoso para garantir que nossos dados estejam sempre disponíveis e em sintonia. Então, se a ideia é otimizar o desempenho e a confiabilidade do PostgreSQL, o Repmgr é o caminho certo. É mais do que uma ferramenta, é a tranquilidade de saber que nossos sistemas estão rodando de forma segura.

Database Administrator | Oracle | OCP | PostgreSQL | AWS | OCI |

PostgreSQL Repmgr AltaDisponibilidade 📊🛠️

Fonte

- https://www.linkedin.com/pulse/postgres-replica%C3%A7%C3%A3o-com-repmgr-gustavo-borges-9hcnf/?originalSubdomain=pt

 


1

Share

Donate to Site


About Author

Renato

Developer

Add a Comment

Blog Search


Categories

OUTROS (16) Variados (109) PHP (133) Laravel (171) Black Hat (3) front-end (29) linux (114) postgresql (39) Docker (28) rest (5) soap (1) webservice (6) October (1) CMS (2) node (7) backend (13) ubuntu (56) devops (25) nodejs (5) npm (3) nvm (1) git (8) firefox (1) react (7) reactnative (5) collections (1) javascript (7) reactjs (8) yarn (0) adb (1) Solid (2) blade (3) models (1) controllers (0) log (1) html (2) hardware (3) aws (14) Transcribe (2) transcription (1) google (4) ibm (1) nuance (1) PHP Swoole (5) mysql (31) macox (4) flutter (1) symfony (1) cor (1) colors (2) homeOffice (2) jobs (3) imagick (2) ec2 (1) sw (1) websocket (2) markdown (1) ckeditor (1) tecnologia (14) faceapp (1) eloquent (14) query (4) sql (40) ddd (3) nginx (9) apache (4) certbot (1) lets-encrypt (3) debian (12) liquid (1) magento (2) ruby (1) LETSENCRYPT (1) Fibonacci (1) wine (1) transaction (1) pendrive (1) boot (1) usb (1) prf (1) policia (2) federal (1) lucena (1) mongodb (4) paypal (1) payment (1) zend (1) vim (4) ciencia (6) js (1) nosql (1) java (1) JasperReports (1) phpjasper (1) covid19 (1) saude (1) athena (1) cinnamon (1) phpunit (2) binaural (1) mysqli (3) database (42) windows (6) vala (1) json (2) oracle (1) mariadb (4) dev (12) webdev (24) s3 (4) storage (1) kitematic (1) gnome (2) web (2) intel (3) piada (1) cron (2) dba (18) lumen (1) ffmpeg (2) android (2) aplicativo (1) fedora (2) shell (4) bash (3) script (3) lider (1) htm (1) csv (1) dropbox (1) db (3) combustivel (2) haru (1) presenter (1) gasolina (1) MeioAmbiente (1) Grunt (1) biologia (1) programming (22) performance (3) brain (1) smartphones (1) telefonia (1) privacidade (1) opensource (3) microg (1) iode (1) ssh (3) zsh (2) terminal (3) dracula (1) spaceship (1) mac (2) idiomas (1) laptop (2) developer (37) api (5) data (1) matematica (1) seguranca (2) 100DaysOfCode (9) hotfix (1) documentation (1) laravelphp (10) RabbitMQ (3) Elasticsearch (1) redis (2) Raspberry (4) Padrao de design (4) JQuery (1) angularjs (4) Dicas (43) Kubernetes (3) vscode (2) backup (1) angular (3) servers (2) pipelines (1) AppSec (1) DevSecOps (4) rust (1) RustLang (1) Mozilla (1) algoritimo (1) sqlite (1) Passport (2) jwt (5) security (2) translate (1) kube (2) iot (1) politica (2) bolsonaro (1) flow (1) podcast (1) Brasil (1) containers (3) traefik (1) networking (1) host (1) POO (2) microservices (2) bug (1) cqrs (1) arquitetura (3) Architecture (4) sail (3) militar (1) artigo (1) economia (1) forcas armadas (1) ffaa (1) autenticacao (2) autorizacao (2) authentication (4) authorization (3) NoCookies (1) wsl (4) memcached (1) macos (2) unix (2) kali-linux (1) linux-tools (5) apple (1) noticias (2) composer (1) rancher (1) k8s (1) escopos (1) orm (1) jenkins (4) github (5) gitlab (3) queue (1) Passwordless (1) sonarqube (1) phpswoole (1) laraveloctane (1) Swoole (1) Swoole (1) octane (1) Structurizr (1) Diagramas (1) c4 (1) c4-models (1) compactar (1) compression (1) messaging (1) restfull (1) eventdrive (1) services (1) http (1) Monolith (1) microservice (1) historia (1) educacao (1) cavalotroia (1) OOD (0) odd (1) chatgpt (1) openai (3) vicuna (1) llama (1) gpt (1) transformers (1) pytorch (1) tensorflow (1) akitando (1) ia (1) nvidia (1) agi (1) guard (1) multiple_authen (2) rpi (1) auth (1) auth (1) livros (2) ElonMusk (2) Oh My Zsh (1) Manjaro (1) BigLinux (2) ArchLinux (1) Migration (1) Error (1) Monitor (1) Filament (1) LaravelFilament (1) replication (1) phpfpm (1) cache (1) vpn (1) l2tp (1) zorin-os (1) optimization (1) scheduling (1) monitoring (2) linkedin (1) community (1) inteligencia-artificial (2) wsl2 (1) maps (1) API_KEY_GOOGLE_MAPS (1) repmgr (1) altadisponibilidade (1) banco (1) modelagemdedados (1) inteligenciadedados (4) governancadedados (1) bancodedados (2) Observability (1) picpay (1) ecommerce (1) Curisidades (1) Samurai (1) KubeCon (1) GitOps (1) Axios (1) Fetch (1) Deepin (1) vue (4) nuxt (1) PKCE (1) Oauth2 (2) webhook (1) TypeScript (1) tailwind (1) gource (2)

New Articles



Get Latest Updates by Email