Convenções:
master
: Seu servidor principalbackup
: Seu servidor de backup- Postgresql 9.3 em ambos os servidores com os caminhos de dados padrão (/ var / postgresql / <version> / <cluster>)
Muito importante
- Todos os comandos para instalar pacotes são feitos por um usuário sudo ou pelo usuário root
- Todos os comandos para gerenciar o servidor postgresql são feitos pelo usuário postgres
Pacotes e configurações em ambos os servidores
Instale pacotes em backup e mestre
sudo apt-get install daemontools
sudo easy_install pip
sudo pip install wal-e
Por uma razão estranha, se você instalar o pip usando apt-get, todos os pacotes instalados pelo pip não poderão ser executados pelo postgres
usuário.
Crie um diretório de ambiente para usar o wal-e
envdir
faz parte dos aplicativos que vêm com daemontools que permitem que um comando use arquivos dentro de um diretório como variáveis de ambiente usando o nome do arquivo como uma chave e seu conteúdo como o valor. Você pode ver mais exemplos aqui: http://thedjbway.b0llix.net/daemontools/envdir.html
Uma pasta / etc / wal-ed será criada para armazenar as variáveis de ambiente necessárias. Basta executar os seguintes comandos:
umask u=rwx,g=rx,o=
mkdir -p /etc/wal-e.d/env
echo "secret-key-content" > /etc/wal-e.d/env/AWS_SECRET_ACCESS_KEY
echo "access-key" > /etc/wal-e.d/env/AWS_ACCESS_KEY_ID
echo 's3://some-bucket/directory/or/whatever' > /etc/wal-e.d/env/WALE_S3_PREFIX
chown -R root:postgres /etc/wal-e.d
Faça backup e recupere seu servidor
Configure seu arquivo master postgresql.conf
Está localizado em /etc/postgresql/9.3/main/
Deve conter as seguintes linhas:
wal_level = archive
archive_mode = yes
archive_command = 'envdir /etc/wal-e.d/env /usr/local/bin/wal-e wal-push %p'
archive_timeout = 60
Uma vez que o archive_command será executado como postgres
usuário, precisamos garantir que ele será executado bem após reiniciar o servidor. Se você pode executar como postgres
usuário o seguinte comando:
envdir /etc/wal-e.d/env /usr/local/bin/wal-e backup-list
… então tudo funciona bem. Agora o servidor deve ser reiniciado para assumir a nova configuração.
Você pode encontrar mais opções para o postgresql.conf aqui: http://www.postgresql.org/docs/9.3/static/runtime-config-wal.html
Por fim, reinicie seu servidor.
Empurre seu backup
Faça login como postgres
e execute wal-e backup-push:
su postgres
envdir /etc/wal-e.d/env /usr/local/bin/wal-e backup-push /var/lib/postgresql/9.3/main
Configure seu servidor de backup
Se este for um novo backup, você terá que remover todo o diretório de dados e copiar o backup para uma pasta de cluster. Execute o seguinte:
su postgres
rm -rf /var/lib/postgresql/9.3/main
envdir /etc/wal-e.d/env /usr/local/bin/wal-e backup-fetch /var/lib/postgresql/9.3/main LATEST
A palavra LATEST pode ser alterada para qualquer arquivo de backup que você deseja listado por:
envdir /etc/wal-e.d/env /usr/local/bin/wal-e backup-list
O formato de um nome de arquivo de backup é base_XXXXXX_XXXX. Exemplo:
base_00000001000000010000002A_00000040
Pare o servidor e crie um arquivo dentro da pasta de dados com a seguinte linha:recovery.conf
restore_command = '/usr/bin/envdir /etc/wal-e.d/env /usr/local/bin/wal-e wal-fetch %f %p'
Reinicie seu servidor. Ele deve começar a se recuperar.
Depois que o banco de dados é recuperado, o nome do arquivo recovery.conf é alterado para recovery.done a fim de prevenir erros humanos.
Você deve ter tudo feito backup agora.
Servidor em espera
Se você deseja que este seja seu servidor em espera para backups, basta adicionar a seguinte linha ao arquivo recovery.conf e reiniciar o servidor:
standby_mode = 'on'
Você não poderá acessar seus dados pelo psql, mas ele será atualizado de vez em quando. Isso é mostrado no log.
Não se preocupe se não houver arquivos encontrados, é apenas um trabalhador procurando o próximo segmento da parede :).
Extra
Durante minha pesquisa, encontrei um pacote para manipular seu servidor postgresql. Você pode conferir aqui:
A postagem de onde peguei este link: Adventures in Scaling, Parte 2: PostgreSQL
Espero que este post tenha sido útil para quem já passou mais de 3 horas procurando um tutorial bem descrito como eu.