Wal-g қалай жұмыс істейтіні туралы мәліметтерді мақалада табуға болады:
S3 сақтау протоколы деректерді сақтау үшін танымал болды. S3 артықшылықтарының бірі API арқылы қол жеткізу мүмкіндігі болып табылады, ол жадпен икемді өзара әрекеттесуді, оның ішінде жалпы оқуға қолжетімділікті ұйымдастыруға мүмкіндік береді, бұл ретте қоймадағы ақпаратты жаңарту тек уәкілетті тұлғалармен жүзеге асады.
S3 протоколын пайдаланатын бірнеше жалпыға ортақ және жеке сақтауды іске асыру бар. Бүгін біз шағын сақтауды ұйымдастырудың танымал шешімін қарастырамыз - Minio.
Жалғыз PostgreSQL сервері wal-g сынағы үшін жақсы, ал Minio S3 үшін ауыстыру ретінде пайдаланылады.
Minio сервері
Минионы орнату
yum -y install yum-plugin-copr
yum copr enable -y lkiesow/minio
yum install -y minio
AccessKey және SecretKey файлдарын /etc/minio/minio.conf ішінде өңдеңіз
vi /etc/minio/minio.conf
Егер сіз Minio алдында nginx қолданбайтын болсаңыз, өзгертуіңіз керек
--address 127.0.0.1:9000
--address 0.0.0.0:9000
Minio іске қосылуда
systemctl start minio
Minio веб-интерфейсіне өтіңіз
МҚ сервері
Айналымдағы WAL-G мен жинадым (Антон Пацев).
Кімде 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 нұсқасынан төмен мұрағаттау үшін wal_level параметрін және PostgreSQL 10 және одан жоғары нұсқасы үшін репликаны қайта конфигурациялау қажет.
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-де мәліметтер қорын жасаңыз
Деректер базасында кесте құру test1.
create database test1;
Дерекқор сынауына ауысыңыз.
postgres=# c test1;
Біз индекстеу_кестесін жасаймыз.
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
Бротли
После генерации 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
Диаграммадағы нәтижелерді салыстыру.
Көріп отырғаныңыздай, Бротли өлшемі бойынша LZMA-мен салыстыруға болады, бірақ сақтық көшірме LZ4 уақытында орындалады.
Орыс тілді PostgreSQL қауымдастығының чаты:
Егер пайдалансаңыз, Github-қа жұлдыз беріңіз
Ақпарат көзі: www.habr.com