WAL-G: แƒกแƒแƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ แƒแƒกแƒšแƒ”แƒ‘แƒ˜ แƒ“แƒ PostgreSQL DBMS-แƒ˜แƒก แƒแƒฆแƒ“แƒ’แƒ”แƒœแƒ

แƒ“แƒ˜แƒ“แƒ˜ แƒฎแƒแƒœแƒ˜แƒ แƒชแƒœแƒแƒ‘แƒ˜แƒšแƒ˜แƒ, แƒ แƒแƒ› แƒกแƒแƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ แƒแƒกแƒšแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ SQL dump-แƒจแƒ˜ (แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— pg_dump แƒแƒœ pg_dumpall) แƒแƒ  แƒแƒ แƒ˜แƒก แƒ™แƒแƒ แƒ’แƒ˜ แƒ˜แƒ“แƒ”แƒ. PostgreSQL DBMS-แƒ˜แƒก แƒกแƒแƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ แƒแƒกแƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒ˜แƒ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒ— แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ pg_basebackup, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฅแƒ›แƒœแƒ˜แƒก WAL แƒŸแƒฃแƒ แƒœแƒแƒšแƒ”แƒ‘แƒ˜แƒก แƒแƒ แƒแƒ‘แƒ˜แƒ— แƒแƒกแƒšแƒก. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ“แƒแƒ˜แƒฌแƒงแƒ”แƒ‘แƒ— แƒแƒกแƒšแƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒกแƒ แƒ“แƒ แƒแƒฆแƒ“แƒ’แƒ”แƒœแƒ˜แƒก แƒ›แƒ—แƒ”แƒšแƒ˜ แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก แƒจแƒ”แƒกแƒฌแƒแƒ•แƒšแƒแƒก, แƒ›แƒ˜แƒฎแƒ•แƒ“แƒ”แƒ‘แƒ˜แƒ—, แƒ แƒแƒ› แƒแƒ› แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒแƒ แƒ“แƒแƒฌแƒ”แƒ แƒแƒ— แƒ›แƒ˜แƒœแƒ˜แƒ›แƒฃแƒ› แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒขแƒ แƒ˜แƒชแƒ˜แƒ™แƒšแƒ˜ แƒ“แƒ แƒแƒ  แƒจแƒ”แƒ’แƒแƒฌแƒฃแƒฎแƒแƒ— แƒขแƒ™แƒ˜แƒ•แƒ˜แƒšแƒ˜ แƒ แƒแƒ’แƒแƒ แƒช แƒ–แƒ”แƒ›แƒแƒ—, แƒแƒกแƒ”แƒ•แƒ” แƒฅแƒ•แƒ”แƒ›แƒแƒ—. แƒขแƒแƒœแƒฏแƒ•แƒ˜แƒก แƒจแƒ”แƒกแƒแƒ›แƒกแƒฃแƒ‘แƒฃแƒฅแƒ”แƒ‘แƒšแƒแƒ“ แƒจแƒ”แƒ˜แƒฅแƒ›แƒœแƒ WAL-G.

แƒฃแƒแƒš-แƒฏแƒ˜ แƒแƒ แƒ˜แƒก Go-แƒจแƒ˜ แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ˜ PostgreSQL แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ แƒแƒกแƒšแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฅแƒ›แƒœแƒ”แƒšแƒแƒ“ แƒ“แƒ แƒแƒฆแƒ“แƒ’แƒ”แƒœแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก (แƒ“แƒ แƒแƒฎแƒšแƒแƒฎแƒแƒœ MySQL/MariaDB, MongoDB แƒ“แƒ FoundationDB). แƒ˜แƒ’แƒ˜ แƒ›แƒฎแƒแƒ แƒก แƒฃแƒญแƒ”แƒ แƒก แƒ›แƒฃแƒจแƒแƒแƒ‘แƒแƒก Amazon S3 แƒกแƒแƒชแƒแƒ•แƒ—แƒแƒœ (แƒ“แƒ แƒแƒœแƒแƒšแƒแƒ’แƒ”แƒ‘แƒ—แƒแƒœ, แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, Yandex Object Storage), แƒ˜แƒกแƒ”แƒ•แƒ” แƒ แƒแƒ’แƒแƒ แƒช Google Cloud Storage, Azure Storage, Swift Object Storage แƒ“แƒ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒคแƒแƒ˜แƒšแƒฃแƒ  แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒแƒกแƒ—แƒแƒœ. แƒ›แƒ—แƒ”แƒšแƒ˜ แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒœแƒแƒ‘แƒ˜แƒฏแƒ”แƒ‘แƒ˜แƒ— แƒ›แƒแƒ“แƒ˜แƒก, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ˜แƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒ, แƒ แƒแƒ› แƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒกแƒขแƒแƒขแƒ˜แƒ”แƒ‘แƒ˜ แƒ›แƒ˜แƒ›แƒแƒคแƒแƒœแƒขแƒฃแƒšแƒ˜แƒ แƒ˜แƒœแƒขแƒ”แƒ แƒœแƒ”แƒขแƒจแƒ˜, แƒแƒ  แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒกแƒ แƒฃแƒšแƒ˜ แƒกแƒแƒฎแƒ”แƒšแƒ›แƒซแƒฆแƒ•แƒแƒœแƒ”แƒšแƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒแƒ˜แƒชแƒแƒ•แƒก แƒงแƒ•แƒ”แƒšแƒ แƒกแƒแƒคแƒ”แƒฎแƒฃแƒ แƒก แƒ—แƒแƒ•แƒ˜แƒ“แƒแƒœ แƒ‘แƒแƒšแƒแƒ›แƒ“แƒ” (แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒžแƒแƒกแƒขแƒ˜ Habrรฉ-แƒ–แƒ”, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ˜แƒฅ แƒ‘แƒ”แƒ•แƒ แƒ˜ แƒฅแƒฃแƒšแƒ แƒ’แƒแƒ›แƒแƒขแƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ).

WAL-G: แƒกแƒแƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ แƒแƒกแƒšแƒ”แƒ‘แƒ˜ แƒ“แƒ PostgreSQL DBMS-แƒ˜แƒก แƒแƒฆแƒ“แƒ’แƒ”แƒœแƒ

แƒ”แƒก แƒกแƒขแƒแƒขแƒ˜แƒ แƒ“แƒแƒ˜แƒฌแƒ”แƒ แƒ แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒแƒ“ แƒฉแƒ”แƒ›แƒ˜ แƒชแƒแƒ“แƒœแƒ˜แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒแƒขแƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ›แƒ” แƒแƒ  แƒ•แƒแƒ  DBA แƒ“แƒ แƒจแƒ”แƒ›แƒ˜แƒซแƒšแƒ˜แƒ แƒกแƒแƒ“แƒฆแƒแƒช แƒ’แƒแƒ›แƒแƒ•แƒฎแƒแƒขแƒ แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ แƒ—แƒแƒ•แƒ˜ แƒฎแƒแƒšแƒฎแƒฃแƒ  แƒ”แƒœแƒแƒ–แƒ”, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ แƒจแƒ”แƒกแƒฌแƒแƒ แƒ”แƒ‘แƒ แƒ›แƒ˜แƒกแƒแƒกแƒแƒšแƒ›แƒ”แƒ‘แƒ”แƒšแƒ˜แƒ!

แƒชแƒแƒšแƒ™แƒ”, แƒ›แƒ” แƒแƒฆแƒ•แƒœแƒ˜แƒจแƒœแƒแƒ•, แƒ แƒแƒ› แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒฅแƒ•แƒ”แƒ›แƒแƒ— แƒแƒ แƒ˜แƒก แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒ˜ แƒ“แƒ แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒ PostgreSQL 12.3-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก Ubuntu 18.04-แƒ–แƒ”, แƒงแƒ•แƒ”แƒšแƒ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ“แƒ”แƒก แƒ แƒแƒ’แƒแƒ แƒช แƒžแƒ แƒ˜แƒ•แƒ˜แƒšแƒ”แƒ’แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜.

แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก

แƒแƒ› แƒกแƒขแƒแƒขแƒ˜แƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒ“แƒ แƒแƒก WAL-G-แƒ˜แƒก แƒกแƒขแƒแƒ‘แƒ˜แƒšแƒฃแƒ แƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒแƒ v0.2.15 (2020 แƒฌแƒšแƒ˜แƒก แƒ›แƒแƒ แƒขแƒ˜). แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ˜แƒก, แƒ แƒแƒกแƒแƒช แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— (แƒ›แƒแƒ’แƒ แƒแƒ› แƒ—แƒฃ แƒ’แƒกแƒฃแƒ แƒ— แƒ›แƒ˜แƒกแƒ˜ แƒแƒจแƒ”แƒœแƒ”แƒ‘แƒ แƒกแƒแƒ›แƒแƒ’แƒ˜แƒกแƒขแƒ แƒ แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒ˜แƒ“แƒแƒœ, แƒ›แƒแƒจแƒ˜แƒœ github แƒกแƒแƒชแƒแƒ•แƒก แƒแƒฅแƒ•แƒก แƒงแƒ•แƒ”แƒšแƒ แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ แƒแƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก). แƒฉแƒแƒ›แƒแƒกแƒแƒขแƒ•แƒ˜แƒ แƒ—แƒแƒ“ แƒ“แƒ แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒแƒ™แƒ”แƒ—แƒแƒ—:

#!/bin/bash

curl -L "https://github.com/wal-g/wal-g/releases/download/v0.2.15/wal-g.linux-amd64.tar.gz" -o "wal-g.linux-amd64.tar.gz"
tar -xzf wal-g.linux-amd64.tar.gz
mv wal-g /usr/local/bin/

แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒฏแƒ”แƒ  แƒฃแƒœแƒ“แƒ แƒ“แƒแƒแƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒ˜แƒ แƒแƒ— WAL-G, แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ™แƒ˜ แƒ—แƒแƒ•แƒแƒ“ PostgreSQL.

WAL-G-แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ

แƒกแƒแƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ แƒแƒกแƒšแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ Amazon S3 (แƒ แƒแƒ“แƒ’แƒแƒœ แƒ˜แƒก แƒฃแƒคแƒ แƒ แƒแƒฎแƒšแƒแƒก แƒแƒ แƒ˜แƒก แƒฉแƒ”แƒ›แƒก แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒ—แƒแƒœ แƒ“แƒ แƒ›แƒ˜แƒกแƒ˜ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒซแƒแƒšแƒ˜แƒแƒœ แƒ˜แƒแƒคแƒ˜แƒ). แƒ›แƒแƒกแƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ— "s3 bucket" แƒ“แƒ แƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒก แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ”แƒ‘แƒ˜.

แƒงแƒ•แƒ”แƒšแƒ แƒฌแƒ˜แƒœแƒ แƒกแƒขแƒแƒขแƒ˜แƒ WAL-G-แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ“แƒ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒแƒก แƒ’แƒแƒ แƒ”แƒ›แƒแƒก แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ› แƒ’แƒแƒ›แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒ— แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒœแƒ—แƒแƒ•แƒกแƒ“แƒ”แƒก .walg.json แƒคแƒแƒ˜แƒšแƒ˜ postgres แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒกแƒแƒฎแƒšแƒ˜แƒก แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒแƒจแƒ˜. แƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฅแƒ›แƒœแƒ”แƒšแƒแƒ“, แƒ’แƒแƒฃแƒจแƒ•แƒ˜แƒ— แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ bash แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜:

#!/bin/bash

cat > /var/lib/postgresql/.walg.json << EOF
{
    "WALG_S3_PREFIX": "s3://your_bucket/path",
    "AWS_ACCESS_KEY_ID": "key_id",
    "AWS_SECRET_ACCESS_KEY": "secret_key",
    "WALG_COMPRESSION_METHOD": "brotli",
    "WALG_DELTA_MAX_STEPS": "5",
    "PGDATA": "/var/lib/postgresql/12/main",
    "PGHOST": "/var/run/postgresql/.s.PGSQL.5432"
}
EOF
# ะพะฑัะทะฐั‚ะตะปัŒะฝะพ ะผะตะฝัะตะผ ะฒะปะฐะดะตะปัŒั†ะฐ ั„ะฐะนะปะฐ:
chown postgres: /var/lib/postgresql/.walg.json

แƒœแƒ”แƒ‘แƒ แƒ›แƒแƒ›แƒ”แƒชแƒ˜แƒ— แƒแƒ’แƒ˜แƒฎแƒกแƒœแƒแƒ— แƒชแƒแƒขแƒแƒ—แƒ˜ แƒงแƒ•แƒ”แƒšแƒ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘:

  • WALG_S3_PREFIX โ€“ แƒ’แƒ–แƒ แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ S3 แƒ—แƒแƒ˜แƒ’แƒฃแƒšแƒ˜แƒกแƒ™แƒ”แƒœ, แƒกแƒแƒ“แƒแƒช แƒกแƒแƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ แƒแƒกแƒšแƒ”แƒ‘แƒ˜ แƒแƒ˜แƒขแƒ•แƒ˜แƒ แƒ—แƒ”แƒ‘แƒ (แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒแƒœ root-แƒจแƒ˜ แƒแƒœ แƒกแƒแƒฅแƒแƒฆแƒแƒšแƒ“แƒ”แƒจแƒ˜);
  • AWS_ACCESS_KEY_ID - แƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒก แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜ S3-แƒจแƒ˜ (แƒกแƒแƒขแƒ”แƒกแƒขแƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ” แƒแƒฆแƒ“แƒ’แƒ”แƒœแƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒแƒ› แƒ™แƒšแƒแƒ•แƒ˜แƒจแƒ”แƒ‘แƒก แƒฃแƒœแƒ“แƒ แƒฐแƒฅแƒแƒœแƒ“แƒ”แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒก แƒžแƒแƒšแƒ˜แƒขแƒ˜แƒ™แƒ! แƒ”แƒก แƒฃแƒคแƒ แƒ แƒ“แƒ”แƒขแƒแƒšแƒฃแƒ แƒแƒ“ แƒแƒ แƒ˜แƒก แƒแƒฆแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒแƒฆแƒ“แƒ’แƒ”แƒœแƒ˜แƒก แƒ’แƒแƒœแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒแƒจแƒ˜.);
  • AWS_SECRET_ACCESS_KEY โ€“ แƒกแƒแƒ˜แƒ“แƒฃแƒ›แƒšแƒ แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜ S3 แƒกแƒแƒชแƒแƒ•แƒจแƒ˜;
  • WALG_COMPRESSION_METHOD โ€“ แƒจแƒ”แƒ™แƒฃแƒ›แƒจแƒ•แƒ˜แƒก แƒ›แƒ”แƒ—แƒแƒ“แƒ˜, แƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒ˜แƒ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒ— แƒ‘แƒ แƒแƒขแƒšแƒ˜ (แƒ แƒแƒ“แƒ’แƒแƒœ แƒ”แƒก แƒแƒ แƒ˜แƒก แƒแƒฅแƒ แƒแƒก แƒจแƒฃแƒแƒšแƒ”แƒ“แƒ˜ แƒกแƒแƒ‘แƒแƒšแƒแƒ แƒ–แƒแƒ›แƒแƒกแƒ แƒ“แƒ แƒจแƒ”แƒ™แƒฃแƒ›แƒจแƒ•แƒ˜แƒก/แƒ“แƒ”แƒ™แƒแƒ›แƒžแƒ แƒ”แƒกแƒ˜แƒ˜แƒก แƒกแƒ˜แƒฉแƒฅแƒแƒ แƒ”แƒก แƒจแƒแƒ แƒ˜แƒก);
  • WALG_DELTA_MAX_STEPS โ€“ โ€žแƒ“แƒ”แƒšแƒขแƒแƒกโ€œ แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ แƒกแƒ แƒฃแƒšแƒ˜ แƒกแƒแƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ แƒแƒกแƒšแƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒแƒ›แƒ“แƒ” (แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒ“แƒแƒ–แƒแƒ’แƒแƒ•แƒ”แƒœ แƒ“แƒ แƒแƒก แƒ“แƒ แƒ’แƒแƒ“แƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ–แƒแƒ›แƒแƒก, แƒ›แƒแƒ’แƒ แƒแƒ› แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒแƒ— แƒแƒ“แƒœแƒแƒ• แƒจแƒ”แƒแƒœแƒ”แƒšแƒแƒœ แƒแƒฆแƒ“แƒ’แƒ”แƒœแƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒแƒ  แƒแƒ แƒ˜แƒก แƒ›แƒ˜แƒ–แƒแƒœแƒจแƒ”แƒฌแƒแƒœแƒ˜แƒšแƒ˜ แƒ“แƒ˜แƒ“แƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ);
  • PGDATA โ€“ แƒ‘แƒ˜แƒšแƒ˜แƒ™แƒ˜ แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒแƒจแƒ˜ แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒ— (แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒ•แƒ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒ— pg_lsclusters);
  • PGHOST โ€“ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒกแƒ—แƒแƒœ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒ, แƒšแƒแƒ™แƒแƒšแƒฃแƒ แƒ˜ แƒกแƒแƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ— แƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒ˜แƒ แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ unix-แƒกแƒแƒ™แƒ”แƒขแƒ˜แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ—, แƒ แƒแƒ’แƒแƒ แƒช แƒแƒ› แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒจแƒ˜.

แƒกแƒฎแƒ•แƒ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ˜แƒฎแƒ˜แƒšแƒแƒ— แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒแƒจแƒ˜: https://github.com/wal-g/wal-g/blob/v0.2.15/PostgreSQL.md#configuration.

PostgreSQL-แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ

แƒ˜แƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ› แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒจแƒ˜ แƒแƒ แƒฅแƒ˜แƒ•แƒแƒขแƒแƒ แƒ›แƒ แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒแƒก WAL แƒŸแƒฃแƒ แƒœแƒแƒšแƒ”แƒ‘แƒ˜ แƒฆแƒ แƒฃแƒ‘แƒ”แƒšแƒจแƒ˜ แƒ“แƒ แƒแƒฆแƒแƒ“แƒ’แƒ˜แƒœแƒแƒก แƒ˜แƒกแƒ˜แƒœแƒ˜ (แƒกแƒแƒญแƒ˜แƒ แƒแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜), แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒแƒงแƒ”แƒœแƒแƒ— แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ˜ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒคแƒแƒ˜แƒšแƒจแƒ˜. /etc/postgresql/12/main/postgresql.conf. แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ“แƒแƒ›แƒฌแƒงแƒ”แƒ‘แƒ—แƒแƒ—แƒ•แƒ˜แƒก แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ แƒฌแƒ›แƒฃแƒœแƒ“แƒ”แƒ—แƒ แƒแƒ› แƒแƒ แƒชแƒ”แƒ แƒ—แƒ˜ แƒฅแƒ•แƒ”แƒ›แƒแƒ— แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒฎแƒ•แƒ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ–แƒ”, แƒแƒกแƒ” แƒ แƒแƒ›, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ แƒฎแƒ”แƒšแƒแƒฎแƒšแƒ แƒฉแƒแƒ˜แƒขแƒ•แƒ˜แƒ แƒ—แƒ”แƒ‘แƒ, DBMS แƒแƒ  แƒ˜แƒจแƒšแƒ”แƒ‘แƒ. แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ“แƒแƒแƒ›แƒแƒขแƒแƒ— แƒ”แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜:

#!/bin/bash

echo "wal_level=replica" >> /etc/postgresql/12/main/postgresql.conf
echo "archive_mode=on" >> /etc/postgresql/12/main/postgresql.conf
echo "archive_command='/usr/local/bin/wal-g wal-push "%p" >> /var/log/postgresql/archive_command.log 2>&1' " >> /etc/postgresql/12/main/postgresql.conf
echo โ€œarchive_timeout=60โ€ >> /etc/postgresql/12/main/postgresql.conf
echo "restore_command='/usr/local/bin/wal-g wal-fetch "%f" "%p" >> /var/log/postgresql/restore_command.log 2>&1' " >> /etc/postgresql/12/main/postgresql.conf

# ะฟะตั€ะตะทะฐะณั€ัƒะถะฐะตะผ ะบะพะฝั„ะธะณ ั‡ะตั€ะตะท ะพั‚ะฟั€ะฐะฒะบัƒ SIGHUP ัะธะณะฝะฐะปะฐ ะฒัะตะผ ะฟั€ะพั†ะตััะฐะผ ะ‘ะ”
killall -s HUP postgres

แƒ“แƒแƒกแƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜แƒก แƒแƒฆแƒฌแƒ”แƒ แƒ:

  • wal_level โ€“ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜ แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ แƒฃแƒœแƒ“แƒ แƒฉแƒแƒฌแƒ”แƒ แƒแƒ— WAL-แƒ˜แƒก แƒŸแƒฃแƒ แƒœแƒแƒšแƒ”แƒ‘แƒจแƒ˜, โ€žแƒ แƒ”แƒžแƒšแƒ˜แƒ™แƒโ€œ โ€“ แƒฉแƒแƒฌแƒ”แƒ แƒ”แƒ— แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜;
  • แƒแƒ แƒฅแƒ˜แƒ•แƒ˜แƒก_แƒ แƒ”แƒŸแƒ˜แƒ›แƒ˜ - แƒฉแƒแƒ แƒ—แƒ”แƒ— WAL แƒŸแƒฃแƒ แƒœแƒแƒšแƒ”แƒ‘แƒ˜แƒก แƒฉแƒแƒ›แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ˜แƒก แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— แƒแƒ แƒฅแƒ˜แƒ•แƒ˜_แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ;
  • แƒแƒ แƒฅแƒ˜แƒ•แƒ˜_แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ โ€“ แƒ“แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜ WAL แƒŸแƒฃแƒ แƒœแƒแƒšแƒ˜แƒก แƒแƒ แƒฅแƒ˜แƒ•แƒ˜แƒก แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ;
  • archive_timeout - แƒŸแƒฃแƒ แƒœแƒแƒšแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒแƒ แƒฅแƒ˜แƒ•แƒ”แƒ‘แƒ แƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ“แƒ”แƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ“แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ—แƒฃ แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜ แƒชแƒ•แƒšแƒ˜แƒก/แƒ“แƒแƒแƒ›แƒแƒขแƒ”แƒ‘แƒก แƒ›แƒชแƒ˜แƒ แƒ” แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒจแƒ˜, แƒ›แƒแƒจแƒ˜แƒœ แƒแƒ–แƒ แƒ˜ แƒแƒฅแƒ•แƒก แƒแƒฅ แƒšแƒ˜แƒ›แƒ˜แƒขแƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒกแƒ”แƒ‘แƒแƒก แƒฌแƒแƒ›แƒ”แƒ‘แƒจแƒ˜, แƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒแƒช แƒ˜แƒซแƒฃแƒšแƒ”แƒ‘แƒ˜แƒ— แƒ’แƒแƒ›แƒแƒ˜แƒซแƒแƒฎแƒ”แƒ‘แƒ แƒ“แƒแƒแƒ แƒฅแƒ˜แƒ•แƒ”แƒ‘แƒ˜แƒก แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ (แƒงแƒแƒ•แƒ”แƒš แƒฌแƒแƒ›แƒก แƒ˜แƒœแƒขแƒ”แƒœแƒกแƒ˜แƒฃแƒ แƒแƒ“ แƒ•แƒฌแƒ”แƒ  แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒจแƒ˜, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ” แƒแƒ  แƒ“แƒแƒ›แƒ”แƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒœแƒ แƒ”แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ˜ แƒฌแƒแƒ แƒ›แƒแƒ”แƒ‘แƒแƒจแƒ˜);
  • restore_command โ€“ แƒกแƒแƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ แƒแƒกแƒšแƒ˜แƒ“แƒแƒœ WAL แƒŸแƒฃแƒ แƒœแƒแƒšแƒ˜แƒก แƒแƒฆแƒ“แƒ’แƒ”แƒœแƒ˜แƒก แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ˜แƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ—แƒฃ โ€žแƒกแƒ แƒฃแƒšแƒ˜ แƒกแƒแƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ แƒแƒกแƒšแƒ˜โ€œ (แƒ‘แƒแƒ–แƒ˜แƒก แƒกแƒแƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ แƒแƒกแƒšแƒก) แƒแƒ™แƒšแƒ˜แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒจแƒ˜ แƒฃแƒแƒฎแƒšแƒ”แƒกแƒ˜ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜.

แƒงแƒ•แƒ”แƒšแƒ แƒแƒ› แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒ›แƒ”แƒขแƒ˜ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒฌแƒแƒ˜แƒ™แƒ˜แƒ—แƒฎแƒแƒ— แƒแƒคแƒ˜แƒชแƒ˜แƒแƒšแƒฃแƒ แƒ˜ แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒ˜แƒก แƒ—แƒแƒ แƒ’แƒ›แƒแƒœแƒจแƒ˜: https://postgrespro.ru/docs/postgresql/12/runtime-config-wal.

แƒกแƒแƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ แƒ’แƒแƒœแƒ แƒ˜แƒ’แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ

แƒ แƒแƒช แƒแƒ  แƒฃแƒœแƒ“แƒ แƒ—แƒฅแƒ•แƒแƒก, แƒ›แƒ˜แƒกแƒ˜ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ›แƒแƒกแƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ’แƒ–แƒแƒ cron. แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ˜แƒก, แƒ แƒแƒกแƒแƒช แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒ•แƒแƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒ˜แƒ แƒ”แƒ‘แƒ— แƒกแƒแƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ แƒแƒกแƒšแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฅแƒ›แƒœแƒ”แƒšแƒแƒ“. แƒ“แƒแƒ•แƒ˜แƒฌแƒงแƒแƒ— แƒกแƒ แƒฃแƒšแƒ˜ แƒกแƒแƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ แƒแƒกแƒšแƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒก แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ˜แƒ—: wal-g-แƒจแƒ˜ แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒก แƒแƒ แƒ’แƒฃแƒ›แƒ”แƒœแƒขแƒ˜ แƒกแƒแƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ-แƒ‘แƒ˜แƒซแƒ’แƒ˜. แƒ›แƒแƒ’แƒ แƒแƒ› แƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒ แƒ˜แƒ’แƒจแƒ˜, แƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒ˜แƒ แƒ”แƒก แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ แƒฎแƒ”แƒšแƒ˜แƒ— แƒ’แƒแƒฃแƒจแƒ•แƒแƒ— postgres-แƒ˜แƒก แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒกแƒ’แƒแƒœ, แƒ แƒแƒ—แƒ แƒ“แƒแƒ แƒฌแƒ›แƒฃแƒœแƒ“แƒ”แƒ—, แƒ แƒแƒ› แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ™แƒแƒ แƒ’แƒแƒ“ แƒแƒ แƒ˜แƒก (แƒ“แƒ แƒแƒ  แƒแƒ แƒ˜แƒก แƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜):

#!/bin/bash

su - postgres -c '/usr/local/bin/wal-g backup-push /var/lib/postgresql/12/main'

แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒก แƒแƒ แƒ’แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜ แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒ”แƒ‘แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒแƒจแƒ˜ แƒ›แƒ˜แƒ›แƒแƒ•แƒแƒš แƒ’แƒ–แƒแƒ–แƒ” - แƒจแƒ”แƒ’แƒแƒฎแƒกแƒ”แƒœแƒ”แƒ‘แƒ—, แƒ แƒแƒ› แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒ•แƒ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒ— pg_lsclusters.

แƒ—แƒฃ แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” แƒฉแƒแƒ˜แƒแƒ แƒ แƒ“แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒฉแƒแƒ˜แƒขแƒ•แƒ˜แƒ แƒ—แƒ S3 แƒกแƒแƒชแƒแƒ•แƒจแƒ˜, แƒ›แƒแƒจแƒ˜แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ“แƒแƒแƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒ˜แƒ แƒแƒ— แƒžแƒ”แƒ แƒ˜แƒแƒ“แƒฃแƒšแƒ˜ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ crontab-แƒจแƒ˜:

#!/bin/bash

echo "15 4 * * *    /usr/local/bin/wal-g backup-push /var/lib/postgresql/12/main >> /var/log/postgresql/walg_backup.log 2>&1" >> /var/spool/cron/crontabs/postgres
# ะทะฐะดะฐะตะผ ะฒะปะฐะดะตะปัŒั†ะฐ ะธ ะฒั‹ัั‚ะฐะฒะปัะตะผ ะฟั€ะฐะฒะธะปัŒะฝั‹ะต ะฟั€ะฐะฒะฐ ั„ะฐะนะปัƒ
chown postgres: /var/spool/cron/crontabs/postgres
chmod 600 /var/spool/cron/crontabs/postgres

แƒแƒ› แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒจแƒ˜, แƒกแƒแƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜ แƒ˜แƒฌแƒงแƒ”แƒ‘แƒ แƒงแƒแƒ•แƒ”แƒšแƒ“แƒฆแƒ” แƒ“แƒ˜แƒšแƒ˜แƒก 4:15 แƒกแƒแƒแƒ—แƒ–แƒ”.

แƒซแƒ•แƒ”แƒšแƒ˜ แƒกแƒแƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ แƒแƒกแƒšแƒ”แƒ‘แƒ˜แƒก แƒฌแƒแƒจแƒšแƒ

แƒกแƒแƒ•แƒแƒ แƒแƒฃแƒ“แƒแƒ“, แƒ—แƒฅแƒ•แƒ”แƒœ แƒแƒ  แƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ— แƒ›แƒ”แƒ–แƒแƒ–แƒแƒฃแƒ แƒ˜ แƒ”แƒžแƒแƒฅแƒ˜แƒก แƒแƒ‘แƒกแƒแƒšแƒฃแƒขแƒฃแƒ แƒแƒ“ แƒงแƒ•แƒ”แƒšแƒ แƒกแƒแƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ แƒแƒกแƒšแƒ˜แƒก แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒกแƒแƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒžแƒ”แƒ แƒ˜แƒแƒ“แƒฃแƒšแƒแƒ“ โ€žแƒ’แƒแƒกแƒฃแƒคแƒ—แƒแƒ•แƒ”แƒ‘แƒโ€œ (แƒ แƒแƒ’แƒแƒ แƒช โ€žแƒกแƒ แƒฃแƒšแƒ˜ แƒกแƒแƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ แƒแƒกแƒšแƒ”แƒ‘แƒ˜โ€œ โ€‹โ€‹แƒแƒกแƒ”แƒ•แƒ” WAL แƒŸแƒฃแƒ แƒœแƒแƒšแƒ”แƒ‘แƒ˜). แƒฉแƒ•แƒ”แƒœ แƒแƒ›แƒแƒก แƒ’แƒแƒ•แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ— แƒ™แƒ แƒแƒœแƒ˜แƒก แƒแƒ›แƒแƒชแƒแƒœแƒ˜แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ—:

#!/bin/bash

echo "30 6 * * *    /usr/local/bin/wal-g delete before FIND_FULL $(date -d '-10 days' '+%FT%TZ') --confirm >> /var/log/postgresql/walg_delete.log 2>&1" >> /var/spool/cron/crontabs/postgres
# ะตั‰ั‘ ั€ะฐะท ะทะฐะดะฐะตะผ ะฒะปะฐะดะตะปัŒั†ะฐ ะธ ะฒั‹ัั‚ะฐะฒะปัะตะผ ะฟั€ะฐะฒะธะปัŒะฝั‹ะต ะฟั€ะฐะฒะฐ ั„ะฐะนะปัƒ (ั…ะพั‚ัŒ ัั‚ะพ ะพะฑั‹ั‡ะฝะพ ัั‚ะพ ะธ ะฝะต ะฝัƒะถะฝะพ ะฟะพะฒั‚ะพั€ะฝะพ ะดะตะปะฐั‚ัŒ)
chown postgres: /var/spool/cron/crontabs/postgres
chmod 600 /var/spool/cron/crontabs/postgres

Cron แƒจแƒ”แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒก แƒแƒ› แƒแƒ›แƒแƒชแƒแƒœแƒแƒก แƒงแƒแƒ•แƒ”แƒšแƒ“แƒฆแƒ” แƒ“แƒ˜แƒšแƒ˜แƒก 6:30 แƒกแƒแƒแƒ—แƒ–แƒ”, แƒฌแƒแƒจแƒšแƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒก (แƒกแƒ แƒฃแƒš แƒกแƒแƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ แƒแƒกแƒšแƒ”แƒ‘แƒก, แƒ“แƒ”แƒšแƒขแƒแƒก แƒ“แƒ WAL-แƒ”แƒ‘แƒก) แƒ‘แƒแƒšแƒ 10 แƒ“แƒฆแƒ˜แƒก แƒแƒกแƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ“แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ“แƒแƒขแƒแƒ•แƒ”แƒ‘แƒก แƒ›แƒ˜แƒœแƒ˜แƒ›แƒฃแƒ› แƒ”แƒ แƒ— แƒกแƒแƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ แƒแƒกแƒšแƒก. แƒ“แƒแƒœ แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ—แƒแƒ แƒ˜แƒฆแƒ˜ แƒ˜แƒกแƒ”, แƒ แƒแƒ› แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ แƒฌแƒ”แƒ แƒขแƒ˜แƒšแƒ˜ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ—แƒแƒ แƒ˜แƒฆแƒ”แƒ‘แƒ˜ แƒฉแƒแƒ แƒ—แƒฃแƒšแƒ˜ แƒ˜แƒงแƒ PITR-แƒจแƒ˜.

แƒแƒฆแƒ“แƒ’แƒ”แƒœแƒ แƒกแƒแƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒแƒ“แƒแƒœ

แƒกแƒแƒ˜แƒ“แƒฃแƒ›แƒšแƒ แƒแƒ  แƒแƒ แƒ˜แƒก, แƒ แƒแƒ› แƒฏแƒแƒœแƒกแƒแƒฆแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ˜แƒก แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜ แƒแƒ แƒ˜แƒก แƒžแƒ”แƒ แƒ˜แƒแƒ“แƒฃแƒšแƒ˜ แƒแƒฆแƒ“แƒ’แƒ”แƒœแƒ แƒ“แƒ แƒจแƒ˜แƒ“แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ—แƒšแƒ˜แƒแƒœแƒแƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ. แƒ›แƒ” แƒ’แƒ”แƒขแƒงแƒ•แƒ˜แƒ—, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒฃแƒœแƒ“แƒ แƒแƒฆแƒ“แƒ’แƒ”แƒก WAL-G-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— แƒแƒ› แƒ’แƒแƒœแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒแƒจแƒ˜, แƒฎแƒแƒšแƒ แƒฉแƒ”แƒ™แƒ”แƒ‘แƒ–แƒ” แƒ›แƒแƒ’แƒ•แƒ˜แƒแƒœแƒ”แƒ‘แƒ˜แƒ— แƒ•แƒ˜แƒกแƒแƒฃแƒ‘แƒ แƒ”แƒ‘แƒ—.

แƒชแƒแƒšแƒ™แƒ” แƒฃแƒœแƒ“แƒ แƒแƒฆแƒ˜แƒœแƒ˜แƒจแƒœแƒแƒก แƒ แƒแƒ› แƒกแƒแƒขแƒ”แƒกแƒขแƒ แƒ’แƒแƒ แƒ”แƒ›แƒแƒจแƒ˜ แƒแƒฆแƒกแƒแƒ“แƒ’แƒ”แƒœแƒแƒ“ (แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜, แƒ แƒแƒช แƒแƒ  แƒแƒ แƒ˜แƒก แƒฌแƒแƒ แƒ›แƒแƒ”แƒ‘แƒฃแƒšแƒ˜) แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒ— Read Only แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ˜ S3-แƒจแƒ˜, แƒ แƒแƒ—แƒ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ˜แƒ— แƒแƒ  แƒ›แƒแƒฎแƒ“แƒ”แƒก แƒกแƒแƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ แƒแƒกแƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ“แƒแƒฌแƒ”แƒ แƒ. WAL-G-แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒแƒงแƒ”แƒœแƒแƒ— แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒฃแƒคแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ S3 แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒฏแƒ’แƒฃแƒคแƒฃแƒ  แƒžแƒแƒšแƒ˜แƒขแƒ˜แƒ™แƒแƒจแƒ˜ (แƒ”แƒคแƒ”แƒฅแƒขแƒ˜: แƒœแƒ”แƒ‘แƒ): s3: GetObject, s3:ListBucket, s3: GetBucketLocation. แƒ“แƒ, แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒแƒ  แƒ“แƒแƒ’แƒแƒ•แƒ˜แƒฌแƒงแƒ“แƒ”แƒ— แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ archive_mode=แƒ’แƒแƒ›แƒแƒ แƒ—แƒฃแƒšแƒ˜แƒ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜แƒก แƒคแƒแƒ˜แƒšแƒจแƒ˜ postgresql.conf, แƒ˜แƒกแƒ”, แƒ แƒแƒ› แƒ—แƒฅแƒ•แƒ”แƒœแƒก แƒกแƒแƒขแƒ”แƒกแƒขแƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒก แƒแƒ  แƒกแƒฃแƒ แƒก แƒฉแƒฃแƒ›แƒแƒ“ แƒกแƒแƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ แƒแƒกแƒšแƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ.

แƒ แƒ”แƒกแƒขแƒแƒ•แƒ แƒแƒชแƒ˜แƒ แƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ“แƒ”แƒ‘แƒ แƒฎแƒ”แƒšแƒ˜แƒก แƒ›แƒชแƒ˜แƒ แƒ” แƒ›แƒแƒซแƒ แƒแƒแƒ‘แƒ˜แƒ— แƒงแƒ•แƒ”แƒšแƒ PostgreSQL แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒฌแƒแƒจแƒšแƒ (แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜แƒก แƒฉแƒแƒ—แƒ•แƒšแƒ˜แƒ—), แƒแƒกแƒ” แƒ แƒแƒ›, แƒ’แƒ—แƒฎแƒแƒ•แƒ—, แƒ˜แƒงแƒแƒ•แƒ˜แƒ— แƒฃแƒ™แƒ˜แƒ“แƒฃแƒ แƒ”แƒกแƒแƒ“ แƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒแƒ“, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒแƒฌแƒแƒ แƒ›แƒแƒ”แƒ‘แƒ— แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒก.

#!/bin/bash

# ะตัะปะธ ะตัั‚ัŒ ะฑะฐะปะฐะฝัะธั€ะพะฒั‰ะธะบ ะฟะพะดะบะปัŽั‡ะตะฝะธะน (ะฝะฐะฟั€ะธะผะตั€, pgbouncer), ั‚ะพ ะฒะฝะฐั‡ะฐะปะต ะพั‚ะบะปัŽั‡ะฐะตะผ ะตะณะพ, ั‡ั‚ะพะฑั‹ ะพะฝ ะฝะต ะฝะฐั€ั‹ะณะฐะป ะพัˆะธะฑะพะบ ะฒ ะปะพะณ
service pgbouncer stop
# ะตัะปะธ ะตัั‚ัŒ ะดะตะผะพะฝ, ะบะพั‚ะพั€ั‹ะน ะฟะตั€ะตะทะฐะฟัƒัะบะฐะตั‚ ัƒะฟะฐะฒัˆะธะต ะฟั€ะพั†ะตััั‹ (ะฝะฐะฟั€ะธะผะตั€, monit), ั‚ะพ ะพัั‚ะฐะฝะฐะฒะปะธะฒะฐะตะผ ะฒ ะฝั‘ะผ ะฟั€ะพั†ะตัั ะผะพะฝะธั‚ะพั€ะธะฝะณะฐ ะฑะฐะทั‹ (ัƒ ะผะตะฝั ัั‚ะพ pgsql12)
monit stop pgsql12
# ะธะปะธ ะพัั‚ะฐะฝะฐะฒะปะธะฒะฐะตะผ ะผะพะฝะธั‚ะพั€ะธะฝะณ ะฟะพะปะฝะพัั‚ัŒัŽ
service monit stop
# ะพัั‚ะฐะฝะฐะฒะปะธะฒะฐะตะผ ัะฐะผัƒ ะฑะฐะทัƒ ะดะฐะฝะฝั‹ั…
service postgresql stop
# ัƒะดะฐะปัะตะผ ะฒัะต ะดะฐะฝะฝั‹ะต ะธะท ั‚ะตะบัƒั‰ะตะน ะฑะฐะทั‹ (!!!); ะปัƒั‡ัˆะต ะฟั€ะตะดะฒะฐั€ะธั‚ะตะปัŒะฝะพ ัะดะตะปะฐั‚ัŒ ะธั… ะบะพะฟะธัŽ, ะตัะปะธ ะตัั‚ัŒ ัะฒะพะฑะพะดะฝะพะต ะผะตัั‚ะพ ะฝะฐ ะดะธัะบะต
rm -rf /var/lib/postgresql/12/main
# ัะบะฐั‡ะธะฒะฐะตะผ ั€ะตะทะตั€ะฒะฝัƒัŽ ะบะพะฟะธัŽ ะธ ั€ะฐะทะฐั€ั…ะธะฒะธั€ัƒะตะผ ะตั‘
su - postgres -c '/usr/local/bin/wal-g backup-fetch /var/lib/postgresql/12/main LATEST'
# ะฟะพะผะตั‰ะฐะตะผ ั€ัะดะพะผ ั ะฑะฐะทะพะน ัะฟะตั†ะธะฐะปัŒะฝั‹ะน ั„ะฐะนะป-ัะธะณะฝะฐะป ะดะปั ะฒะพััั‚ะฐะฝะพะฒะปะตะฝะธั (ัะผ. https://postgrespro.ru/docs/postgresql/12/runtime-config-wal#RUNTIME-CONFIG-WAL-ARCHIVE-RECOVERY ), ะพะฝ ะพะฑัะทะฐั‚ะตะปัŒะฝะพ ะดะพะปะถะตะฝ ะฑั‹ั‚ัŒ ัะพะทะดะฐะฝ ะพั‚ ะฟะพะปัŒะทะพะฒะฐั‚ะตะปั postgres
su - postgres -c 'touch /var/lib/postgresql/12/main/recovery.signal'
# ะทะฐะฟัƒัะบะฐะตะผ ะฑะฐะทัƒ ะดะฐะฝะฝั‹ั…, ั‡ั‚ะพะฑั‹ ะพะฝะฐ ะธะฝะธั†ะธะธั€ะพะฒะฐะปะฐ ะฟั€ะพั†ะตัั ะฒะพััั‚ะฐะฝะพะฒะปะตะฝะธั
service postgresql start

แƒ›แƒแƒ—แƒ—แƒ•แƒ˜แƒก, แƒ•แƒ˜แƒกแƒแƒช แƒกแƒฃแƒ แƒก แƒ’แƒแƒ“แƒแƒแƒ›แƒแƒฌแƒ›แƒแƒก แƒแƒฆแƒ“แƒ’แƒ”แƒœแƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜, แƒฅแƒ•แƒ”แƒ›แƒแƒ— แƒ›แƒแƒ›แƒ–แƒแƒ“แƒ“แƒ แƒ‘แƒแƒจแƒ˜แƒก แƒ›แƒแƒ’แƒ˜แƒ˜แƒก แƒžแƒแƒขแƒแƒ แƒ แƒœแƒแƒญแƒ”แƒ แƒ˜, แƒ แƒแƒ—แƒ แƒแƒฆแƒ“แƒ’แƒ”แƒœแƒ˜แƒก แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜ แƒ’แƒแƒคแƒฃแƒญแƒ“แƒ”แƒก แƒแƒ แƒแƒœแƒฃแƒšแƒแƒ•แƒแƒœแƒ˜ แƒ’แƒแƒกแƒแƒกแƒ•แƒšแƒ”แƒšแƒ˜ แƒ™แƒแƒ“แƒ˜แƒ—. แƒแƒ› แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒจแƒ˜ แƒ™แƒ”แƒ—แƒ“แƒ”แƒ‘แƒ 120 แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ 5 แƒฌแƒแƒ›แƒ˜แƒก แƒ“แƒ แƒแƒ˜แƒ— (แƒกแƒฃแƒš 10 แƒฌแƒฃแƒ—แƒ˜ แƒแƒฆแƒ“แƒ’แƒ”แƒœแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก), แƒ แƒแƒ—แƒ แƒ’แƒแƒ˜แƒ แƒ™แƒ•แƒ”แƒก, แƒฌแƒแƒ˜แƒจแƒแƒšแƒ แƒ—แƒฃ แƒแƒ แƒ แƒกแƒ˜แƒ’แƒœแƒแƒšแƒ˜แƒก แƒคแƒแƒ˜แƒšแƒ˜ (แƒ”แƒก แƒœแƒ˜แƒจแƒœแƒแƒ•แƒก, แƒ แƒแƒ› แƒแƒฆแƒ“แƒ’แƒ”แƒœแƒ แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ— แƒ“แƒแƒกแƒ แƒฃแƒšแƒ“แƒ):

#!/bin/bash

CHECK_RECOVERY_SIGNAL_ITER=0
while [ ${CHECK_RECOVERY_SIGNAL_ITER} -le 120 ]
do
    if [ ! -f "/var/lib/postgresql/12/main/recovery.signal" ]
    then
        echo "recovery.signal removed"
        break
    fi
    sleep 5
    ((CHECK_RECOVERY_SIGNAL_ITER+1))
done

# ะตัะปะธ ะฟะพัะปะต ะฒัะตั… ะฟั€ะพะฒะตั€ะพะบ ั„ะฐะนะป ะฒัั‘ ั€ะฐะฒะฝะพ ััƒั‰ะตัั‚ะฒัƒะตั‚, ั‚ะพ ะฟะฐะดะฐะตะผ ั ะพัˆะธะฑะบะพะน
if [ -f "/var/lib/postgresql/12/main/recovery.signal" ]
then
    echo "recovery.signal still exists!"
    exit 17
fi

แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒแƒฆแƒ“แƒ’แƒ”แƒœแƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒแƒ  แƒ“แƒแƒ’แƒแƒ•แƒ˜แƒฌแƒงแƒ“แƒ”แƒ— แƒงแƒ•แƒ”แƒšแƒ แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก แƒฃแƒ™แƒแƒœ แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒ (pgbouncer/monit แƒ“แƒ แƒ.แƒจ.).

แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ แƒแƒฆแƒ“แƒ’แƒ”แƒœแƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’

แƒแƒฃแƒชแƒ˜แƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ˜แƒก แƒ›แƒ—แƒšแƒ˜แƒแƒœแƒแƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ แƒแƒฆแƒ“แƒ’แƒ”แƒœแƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ แƒแƒ—แƒ แƒแƒ  แƒจแƒ”แƒ˜แƒฅแƒ›แƒœแƒแƒก แƒกแƒ˜แƒขแƒฃแƒแƒชแƒ˜แƒ แƒ’แƒแƒขแƒ”แƒฎแƒ˜แƒšแƒ˜/แƒ“แƒแƒฎแƒ แƒ˜แƒšแƒ˜ แƒกแƒแƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ แƒแƒกแƒšแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘. แƒ“แƒ แƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒ˜แƒ แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒš แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒš แƒแƒ แƒฅแƒ˜แƒ•แƒ—แƒแƒœ แƒ”แƒ แƒ—แƒแƒ“, แƒ›แƒแƒ’แƒ แƒแƒ› แƒกแƒแƒ“ แƒ“แƒ แƒ แƒแƒ’แƒแƒ  แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ—แƒฅแƒ•แƒ”แƒœแƒก แƒคแƒแƒœแƒขแƒแƒ–แƒ˜แƒแƒ–แƒ” (แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒ–แƒแƒ แƒ“แƒแƒ— แƒ˜แƒœแƒ“แƒ˜แƒ•แƒ˜แƒ“แƒฃแƒแƒšแƒฃแƒ แƒ˜ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒ˜ แƒกแƒแƒแƒ—แƒแƒ‘แƒ แƒ˜แƒ•แƒแƒ“ แƒแƒœ แƒฉแƒแƒแƒขแƒแƒ แƒแƒ— แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ CI-แƒจแƒ˜). แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒ˜แƒœแƒ˜แƒ›แƒฃแƒ›, แƒกแƒแƒญแƒ˜แƒ แƒแƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒจแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ.

แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒšแƒแƒ“ แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜แƒ แƒ›แƒ˜แƒกแƒ˜ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ แƒœแƒแƒ’แƒแƒ•แƒกแƒแƒงแƒ แƒ”แƒšแƒ–แƒ”, แƒ›แƒแƒ’แƒ แƒแƒ› แƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒ˜แƒ, แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒกแƒแƒก แƒฉแƒแƒ แƒ—แƒฃแƒšแƒ˜ แƒ’แƒฅแƒแƒœแƒ“แƒ”แƒ— แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ˜แƒก แƒฏแƒแƒ›แƒ”แƒ‘แƒ˜ (แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ˜แƒก แƒฏแƒแƒ›แƒ”แƒ‘แƒ˜):

#!/bin/bash

if ! su - postgres -c 'pg_dumpall > /dev/null'
then
    echo 'pg_dumpall failed'
    exit 125
fi

แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒšแƒแƒ“ - แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก amcheck แƒ›แƒแƒ“แƒฃแƒšแƒ˜, แƒแƒ•แƒ˜แƒฆแƒแƒ— sql-แƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ WAL-G แƒขแƒ”แƒกแƒขแƒ”แƒ‘แƒ˜ แƒ“แƒ แƒจแƒ”แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— แƒชแƒแƒขแƒ แƒšแƒแƒ’แƒ˜แƒ™แƒ แƒ›แƒ˜แƒก แƒ’แƒแƒ แƒจแƒ”แƒ›แƒ:

#!/bin/bash

# ะดะพะฑะฐะฒะปัะตะผ sql-ะทะฐะฟั€ะพั ะดะปั ะฟั€ะพะฒะตั€ะบะธ ะฒ ั„ะฐะนะป ะฒะพ ะฒั€ะตะผะตะฝะฝะพะน ะดะธั€ะตะบั‚ะพั€ะธะธ
cat > /tmp/amcheck.sql << EOF
CREATE EXTENSION IF NOT EXISTS amcheck;
SELECT bt_index_check(c.oid), c.relname, c.relpages
FROM pg_index i
JOIN pg_opclass op ON i.indclass[0] = op.oid
JOIN pg_am am ON op.opcmethod = am.oid
JOIN pg_class c ON i.indexrelid = c.oid
JOIN pg_namespace n ON c.relnamespace = n.oid
WHERE am.amname = 'btree'
AND c.relpersistence != 't'
AND i.indisready AND i.indisvalid;
EOF
chown postgres: /tmp/amcheck.sql

# ะดะพะฑะฐะฒะปัะตะผ ัะบั€ะธะฟั‚ ะดะปั ะทะฐะฟัƒัะบะฐ ะฟั€ะพะฒะตั€ะพะบ ะฒัะตั… ะดะพัั‚ัƒะฟะฝั‹ั… ะฑะฐะท ะฒ ะบะปะฐัั‚ะตั€ะต
# (ะพะฑั€ะฐั‚ะธั‚ะต ะฒะฝะธะผะฐะฝะธะต ั‡ั‚ะพ ะฟะตั€ะตะผะตะฝะฝั‹ะต ะธ ะทะฐะฟัƒัะบ ะบะพะผะฐะฝะด โ€“ ัะบั€ะฐะฝะธั€ะพะฒะฐะฝั‹)
cat > /tmp/run_amcheck.sh << EOF
for DBNAME in $(su - postgres -c 'psql -q -A -t -c "SELECT datname FROM pg_database WHERE datistemplate = false;" ')
do
    echo "Database: ${DBNAME}"
    su - postgres -c "psql -f /tmp/amcheck.sql -v 'ON_ERROR_STOP=1' ${DBNAME}" && EXIT_STATUS=$? || EXIT_STATUS=$?
    if [ "${EXIT_STATUS}" -ne 0 ]
    then
        echo "amcheck failed on DB: ${DBNAME}"
        exit 125
    fi
done
EOF
chmod +x /tmp/run_amcheck.sh

# ะทะฐะฟัƒัะบะฐะตะผ ัะบั€ะธะฟั‚
/tmp/run_amcheck.sh > /tmp/amcheck.log

# ะดะปั ะฟั€ะพะฒะตั€ะบะธ ั‡ั‚ะพ ะฒัั‘ ะฟั€ะพัˆะปะพ ัƒัะฟะตัˆะฝะพ ะผะพะถะฝะพ ะฟั€ะพะฒะตั€ะธั‚ัŒ exit code ะธะปะธ grepโ€™ะฝัƒั‚ัŒ ะพัˆะธะฑะบัƒ
if grep 'amcheck failed' "/tmp/amcheck.log"
then
    echo 'amcheck failed: '
    cat /tmp/amcheck.log
    exit 125
fi

แฒจแƒ”แƒฏแƒแƒ›แƒ”แƒ‘แƒ

แƒ›แƒ˜แƒœแƒ“แƒ แƒ›แƒแƒ“แƒšแƒแƒ‘แƒ แƒ’แƒแƒ“แƒแƒ•แƒฃแƒฎแƒแƒ“แƒ แƒแƒœแƒ“แƒ แƒ”แƒ˜ แƒ‘แƒแƒ แƒแƒ“แƒ˜แƒœแƒก แƒžแƒฃแƒ‘แƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒแƒ›แƒ–แƒแƒ“แƒ”แƒ‘แƒแƒจแƒ˜ แƒ“แƒแƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒ’แƒแƒœแƒกแƒแƒ™แƒฃแƒ—แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ“แƒšแƒแƒ‘แƒ WAL-G-แƒ˜แƒก แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒแƒจแƒ˜ แƒจแƒ”แƒขแƒแƒœแƒ˜แƒšแƒ˜ แƒฌแƒ•แƒšแƒ˜แƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก!

แƒแƒ›แƒ˜แƒ— แƒ›แƒ—แƒแƒ•แƒ แƒ“แƒ”แƒ‘แƒ แƒ”แƒก แƒจแƒ”แƒœแƒ˜แƒจแƒ•แƒœแƒ. แƒ•แƒ˜แƒ›แƒ”แƒ“แƒแƒ•แƒœแƒ”แƒ‘, แƒ แƒแƒ› แƒจแƒ”แƒ•แƒซแƒ”แƒšแƒ˜ แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜แƒก แƒ“แƒ แƒ—แƒฅแƒ•แƒ”แƒœแƒก แƒ™แƒแƒ›แƒžแƒแƒœแƒ˜แƒแƒจแƒ˜ แƒแƒ› แƒฎแƒ”แƒšแƒกแƒแƒฌแƒงแƒแƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒฃแƒ–แƒแƒ แƒ›แƒแƒ–แƒแƒ แƒ˜ แƒžแƒแƒขแƒ”แƒœแƒชแƒ˜แƒแƒšแƒ˜แƒก แƒ’แƒแƒ“แƒ›แƒแƒชแƒ”แƒ›แƒ. แƒ‘แƒ”แƒ•แƒ แƒ˜ แƒ แƒแƒ› แƒ›แƒกแƒ›แƒ”แƒœแƒ˜แƒ WAL-G-แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ แƒแƒกแƒ“แƒ แƒแƒก แƒ›แƒฅแƒแƒœแƒ˜แƒ แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜ แƒ“แƒ แƒ, แƒ แƒแƒ› แƒ“แƒแƒ•แƒฏแƒ“แƒ” แƒ“แƒ แƒ’แƒแƒ›แƒ”แƒ’แƒ. แƒ“แƒ แƒ›แƒแƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ แƒแƒช แƒกแƒแƒฎแƒšแƒจแƒ˜ แƒ’แƒแƒœแƒ•แƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”, แƒ”แƒก แƒกแƒขแƒแƒขแƒ˜แƒ แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒ“แƒ แƒฉแƒ”แƒ›แƒ’แƒแƒœ.

แƒชแƒแƒšแƒ™แƒ”, แƒแƒฆแƒกแƒแƒœแƒ˜แƒจแƒœแƒแƒ•แƒ˜แƒ, แƒ แƒแƒ› WAL-G แƒแƒกแƒ”แƒ•แƒ” แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒ˜แƒ›แƒฃแƒจแƒแƒแƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ DBMS-แƒ—แƒแƒœ:

  • MySQL / MariaDB;
  • MongoDB;
  • FoundationDB;
  • แƒ“แƒ แƒ—แƒฃ แƒ•แƒ˜แƒ›แƒกแƒฏแƒ”แƒšแƒ”แƒ‘แƒ— แƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ—, แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ”แƒ แƒ›แƒแƒกแƒแƒšแƒแƒ“แƒœแƒ”แƒšแƒ˜!

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ