postgrespro / pg_probackup

Backup and recovery manager for PostgreSQL
https://postgrespro.github.io/pg_probackup/
Other
712 stars 86 forks source link

Вопрос: как реализовать правильное подключение для снятия резервной копии с удаленного ведомого сервера #363

Open dan-aksenov opened 3 years ago

dan-aksenov commented 3 years ago

В документации сказано, что в командной строке или в файле pg_probackup.conf следует указывать параметр "remote-host" для снятия копии с удаленного сервера через ssh.

Но как поступить в том случае, если я использую patroni, и ведущий сервер может поменяться местами с ведомым в любой момент?

Не нашел в документации возможности указывать несколько удаленных адресов, как умеет pgbackrest.

Небольшое замечание по документации. Из-за того что она полностью расположена на одной странице - читать ее очень не удобно.

gsmolk commented 3 years ago

Добрый день! В данный момент такой возможности, к сожалению, нет, но мы возьмем на заметку.

Небольшое замечание по документации. Из-за того что она полностью расположена на одной странице - читать ее очень не удобно.

Это вызвано тем, что документация организована по аналогии с постгресовой документацией, где у каждой утилиты одна отдельная страница.

Guzya commented 3 years ago

Делал такой скрипт для cron-а.

#!/bin/bash

# массив ip адресов dcs(etcd,consul и т.д.) с которых можно брать информацию о patroni
dcs_ips=(172.18.1.2 172.18.1.8 172.18.1.9)

# порт dcs по которому опрашиваем
dcs_port=2379

# параметр из конфига patroni 'namespace'
patroni_namespace=pg-node-test.mhd

# параметр из конфига patroni 'scope'
patroni_scope=11-main

# директория бэкапов
pg_probackup_dir=/archive/pg_probackup/

# название инстанса в pg_probackup
pg_probackup_instance=pg-node-test

for dcs_ip in ${dcs_ips[@]}
do
  if [[ `curl -Is -K HEAD $dcs_ip:$dcs_port/v2/keys/$patroni_namespace/$patroni_scope/leader |head -n 1|sed 's/\r//g'` = "HTTP/1.1 200 OK" ]]
  then
     echo "dcs_ip: $dcs_ip"
     leader=`curl -s $dcs_ip:$dcs_port/v2/keys/$patroni_namespace/$patroni_scope/leader | jq '.node.value' | sed 's|"||g'`
     echo "leader: $leader"

     conn_info=`curl -s $dcs_ip:$dcs_port/v2/keys/$patroni_namespace/$patroni_scope/members/$leader|jq '.node.value' | sed 's|.*conn_url||' | sed 's|/postgres.*||' | sed 's|.*//||'`
     echo "conn_info: $conn_info"
     break
  fi
done

ip=`echo $conn_info|cut -d: -f 1`
echo "conn_info_ip: $ip"

port=`echo $conn_info|cut -d: -f 2`
echo "conn_info_port: $port"

pg_probackup-11 backup -B $pg_probackup_dir --instance $pg_probackup_instance -b DELTA --stream --merge-expired --delete-wal --remote-host=$ip --remote-port=22 --pghost=$ip --pgport=$port --log-level-file=VERBOSE  --log-level-console=INFO

# Отчет на почту
echo ''
pg_probackup-11 show -B $pg_probackup_dir --instance $pg_probackup_instance 
echo ''
pg_probackup-11 show -B $pg_probackup_dir --instance $pg_probackup_instance --archive
Leronar commented 6 months ago

Добрый день! Подскажите, не появилась ли возможность указывать множественные remote-host, в случае снятия РК при использовании patroni?