wal-g кантип иштээри жөнүндө маалымат макалада тапса болот:
S3 сактоо протоколу маалыматтарды сактоо үчүн популярдуу болуп калды. S3 артыкчылыктарынын бири - бул API аркылуу кирүү мүмкүнчүлүгү, ал сактоочу менен ийкемдүү өз ара аракеттенүүнү, анын ичинде жалпыга ачык окуу мүмкүнчүлүгүн уюштурууга мүмкүндүк берет, ал эми сактагычтагы маалыматты жаңыртуу ыйгарым укуктуу адамдар тарабынан гана ишке ашат.
S3 протоколун колдонгон бир нече коомдук жана жеке сактоо программалары бар. Бүгүн биз кичинекей сактоону уюштуруу үчүн популярдуу чечимди карап чыгабыз - Minio.
Жалгыз PostgreSQL сервери wal-g тестирлөө үчүн жакшы, ал эми Minio S3 үчүн алмаштыруу катары колдонулат.
Minio сервер
Minio орнотуу
yum -y install yum-plugin-copr
yum copr enable -y lkiesow/minio
yum install -y minio
/etc/minio/minio.conf ичинде AccessKey жана SecretKeyди түзөтүңүз
vi /etc/minio/minio.conf
Эгер сиз Minio чейин nginx колдонбосоңуз, анда сиз өзгөртүүгө туура келет
--address 127.0.0.1:9000
--address 0.0.0.0:9000
Minio ишке киргизилүүдө
systemctl start minio
Minio веб интерфейсине өтүңүз
DB сервери
WAL-G мин rpm менен чогултулган (Антон Пацев).
Ким RPM негизделген системасы жок, расмий колдонуу
wal-g бинардык менен бирге rpm /etc/wal-gd/server-s3.conf файлынан өзгөрмөлөрдү импорттоочу скрипттерди камтыйт.
backup-fetch.sh
backup-list.sh
backup-push.sh
wal-fetch.sh
wal-g-run.sh
wal-push.sh
Walg орнотуу.
yum -y install yum-plugin-copr
yum copr enable -y antonpatsev/wal-g
yum install -y wal-g
wal-g версия текшерилүүдө.
wal-g --version
wal-g version v0.2.14
/etc/wal-gd/server-s3.conf керектөөлөрүңүзгө түзөтүңүз.
Берилиштер базасы кластери тарабынан колдонулган конфигурация файлдары жана маалымат файлдары адатта кластердин маалымат каталогунда чогуу сакталат, адатта деп аталат. PGDATA
#!/bin/bash
export PG_VER="9.6"
export WALE_S3_PREFIX="s3://pg-backups" # бакет, который мы создали в S3
export AWS_ACCESS_KEY_ID="xxxx" # AccessKey из /etc/minio/minio.conf
export AWS_ENDPOINT="http://ip-адрес-сервера-minio:9000"
export AWS_S3_FORCE_PATH_STYLE="true"
export AWS_SECRET_ACCESS_KEY="yyyy" # SecretKey из /etc/minio/minio.conf
export PGDATA=/var/lib/pgsql/$PG_VER/data/
export PGHOST=/var/run/postgresql/.s.PGSQL.5432 # Сокет для подключения к PostgreSQL
export WALG_UPLOAD_CONCURRENCY=2 # Кол-во потоков для закачки
export WALG_DOWNLOAD_CONCURRENCY=2 # Кол-во потоков для скачивания
export WALG_UPLOAD_DISK_CONCURRENCY=2 # Кол-во потоков на диске для закачки
export WALG_DELTA_MAX_STEPS=7
export WALG_COMPRESSION_METHOD=brotli # Какой метод сжатия использовать.
WAL-G конфигурациялоодо, сиз WALG_DELTA_MAX_STEPS - базалык камдык көчүрмөдөн дельтанын камдык көчүрмөсү максималдуу болгон кадамдардын санын белгилейсиз жана дельтаны көчүрүү саясатын белгилейсиз. Же сиз акыркы дельтадан көчүрмө жасайсыз, же түпнуска толук камдык көчүрмөдөн дельтаны жасайсыз. Бул маалымат базасынын бир эле компоненти сиздин маалымат базаңызда дайыма өзгөрүп турганда, ошол эле маалыматтар тынымсыз өзгөрүп турган учурда зарыл.
Маалыматтар базасын орнотуу.
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.
noarch.rpm
yum install -y postgresql96 postgresql96-server mc
Биз маалымат базасын инициализациялайбыз.
/usr/pgsql-9.6/bin/postgresql96-setup initdb
Initializing database ... OK
Эгер сиз 1 серверде сынап жаткан болсоңуз, анда PostgreSQL 10 версиясынан азыраак жана PostgreSQL 10 жана андан улуу версиясы үчүн репликаны архивдөө үчүн wal_level параметрин кайра конфигурациялашыңыз керек.
wal_level = archive
Келгиле, PostgreSQLдин өзүн колдонуп, WAL архивдерин ар бир 60 секундада камдык көчүрмөсүн жасайлы. Продукцияда сизде башка archive_timeout мааниси болот.
archive_mode = on
archive_command = '/usr/local/bin/wal-push.sh %p'
archive_timeout = 60 # Каждые 60 секунд будет выполнятся команда archive_command.
PostgreSQL башталат
systemctl start postgresql-9.6
Өзүнчө консолдо биз каталар үчүн PostgreSQL журналдарын карайбыз: (postgresql-Wed.logди учурдагыга өзгөртүү).
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.log
Келгиле, psqlге баралы.
su - postgres
psql
psqlде маалымат базасын түзүңүз
Берилиштер базасы тестинде таблица түзүңүз1.
create database test1;
Маалыматтар базасын сыноого өтүү.
postgres=# c test1;
Биз indexing_table таблицасын түзөбүз.
test1=# CREATE TABLE indexing_table(created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW());
Дайындарды кошуу.
Биз маалыматтарды киргизе баштайбыз. Биз 10-20 мүнөт күтүп жатабыз.
#!/bin/bash
# postgres
while true; do
psql -U postgres -d test1 -c "INSERT INTO indexing_table(created_at) VALUES (CURRENT_TIMESTAMP);"
sleep 60;
done
Толук камдык көчүрмөнү жасоону унутпаңыз.
su - postgres
/usr/local/bin/backup-push.sh
Тест1 базасында таблицадагы жазууларды карайбыз
select * from indexing_table;
2020-01-29 09:41:25.226198+
2020-01-29 09:42:25.336989+
2020-01-29 09:43:25.356069+
2020-01-29 09:44:25.37381+
2020-01-29 09:45:25.392944+
2020-01-29 09:46:25.412327+
2020-01-29 09:47:25.432564+
2020-01-29 09:48:25.451985+
2020-01-29 09:49:25.472653+
2020-01-29 09:50:25.491974+
2020-01-29 09:51:25.510178+
Сап - учурдагы убакыт.
Толук камдык көчүрмөлөрдүн тизмесин караңыз
/usr/local/bin/backup-list.sh
Калыбына келтирүү тести
Бардык жеткиликтүү WAL жылдыруу менен толук калыбына келтирүү.
Postgresql токтотуу.
/var/lib/pgsql/9.6/data папкасынан баарын жок кылыңыз.
/usr/local/bin/backup-fetch.sh скриптин postgres колдонуучусу катары иштетиңиз.
su - postgres
/usr/local/bin/backup-fetch.sh
Камдык көчүрмөнү алуу аяктады.
Recovery.conf файлын /var/lib/pgsql/9.6/data папкасына төмөнкү мазмун менен кошуңуз.
restore_command = '/usr/local/bin/wal-fetch.sh "%f" "%p"'
Биз PostgreSQLди баштайбыз. PostgreSQL архивделген WALлардан калыбына келтирүү процессин баштайт жана андан кийин гана маалымат базасы ачылат.
systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.log
Белгилүү бир убакытка калыбына келтирүү.
Эгерде биз маалымат базасын белгилүү бир мүнөткө чейин калыбына келтиргибиз келсе, анда recovery.conf дегенге recovery_target_time параметрин кошобуз – биз маалымат базасын кайсы убакта калыбына келтириш керек экенин көрсөтөбүз.
restore_command = '/usr/local/bin/wal-fetch.sh "%f" "%p"'
recovery_target_time = '2020-01-29 09:46:25'
Калыбына келтиргенден кийин, indexing_table таблицасын караңыз
2020-01-29 09:41:25.226198+00
2020-01-29 09:42:25.336989+00
2020-01-29 09:43:25.356069+00
2020-01-29 09:44:25.37381+00
2020-01-29 09:45:25.392944+00
Биз PostgreSQLди баштайбыз. PostgreSQL архивделген WALлардан калыбына келтирүү процессин баштайт жана андан кийин гана маалымат базасы ачылат.
systemctl start postgresql-9.6
tail -fn100 /var/lib/pgsql/9.6/data/pg_log/postgresql-Wed.log
тестирлөө
Бул жерде сүрөттөлгөндөй 1 ГБ маалымат базасын түзүү
1 ГБ дайындарды чыгаргандан кийин челектин өлчөмүн суроо.
postgres=# SELECT pg_size_pretty(pg_database_size('test1'));
pg_size_pretty
----------------
1003 MB
s4cmd Amazon S3 сактагычында жайгашкан маалыматтар менен иштөө үчүн акысыз буйрук сабы куралы. Утилита python программалоо тилинде жазылган жана ушундан улам аны Windows жана Linux операциялык системаларында колдонсо болот.
s4cmd орнотулууда
pip install s4cmd
LZ4
s4cmd --endpoint-url=http://ip-адрес-сервера-minio:9000 --access-key=xxxx --secret-key=yyyy du -r s3://pg-backups
840540822 s3://pg-backups/wal_005/
840 МБ в формате lz4 только WAL логов
Полный бекап с lz4 - 1GB данных
time backup_push.sh
real 0m18.582s
Размер S3 бакета после полного бекапа
581480085 s3://pg-backups/basebackups_005/
842374424 s3://pg-backups/wal_005
581 МБ занимает полный бекап
LZMA
После генерации 1ГБ данных
338413694 s3://pg-backups/wal_005/
338 мб логов в формате lzma
Время генерации полного бекапа
time backup_push.sh
real 5m25.054s
Размер бакета в S3
270310495 s3://pg-backups/basebackups_005/
433485092 s3://pg-backups/wal_005/
270 мб занимает полный бекап в формате lzma
Brotli
После генерации 1ГБ данных
459229886 s3://pg-backups/wal_005/
459 мб логов в формате brotli
Время генерации полного бекапа
real 0m23.408s
Размер бакета в S3
312960942 s3://pg-backups/basebackups_005/
459309262 s3://pg-backups/wal_005/
312 мб занимает полный бекап в формате brotli
Диаграммадагы жыйынтыктарды салыштыруу.
Көрүнүп тургандай, Brotli өлчөмү LZMA менен салыштырууга болот, бирок камдык LZ4 убакытта жүзөгө ашырылат.
Орус тилдүү PostgreSQL коомчулугунун чаты:
Сураныч, эгер сиз колдонсоңуз, Githubга жылдыз бериңиз
Source: www.habr.com