بۆ ئەندازیارانی DevOps و بەڕێوەبەرانی سیستەم، وێنەگرتنی (snapshot) ئامێرە وێرتواڵەکان (VM) ئامرازێکی بنەڕەتییە. ئەوان ڕێگایەکی خێرا و ئاسان بۆ گرتنی دۆخی سێرڤەرێک پێشکەش دەکەن پێش ئەنجامدانی پاتچێکی مەترسیدار، گۆڕانکارییەکی گەورەی ڕێکخستن، یان بڵاوکردنەوەی ئەپڵیکەیشنێک. ئەگەر شتێک بە هەڵە بڕوات، گەڕانەوە بۆ دۆخی پێشوو تەنها چەند چرکەیەکی پێ دەچێت.
بەڵام، کاتێک هەمان ئەم میتۆدۆلۆژییە بۆ داتابەیسە ترانساکشناڵەکان (وەک PostgreSQL، MySQL، Oracle، یان Microsoft SQL Server) بەکاردێت، وێنەگرتنی VM لە ئامرازێکی پاراستنەوە دەبێتە بۆمبێکی کاتژمێری.
پشت بەستن بە وێنەگرتنی ئاسایی هایپەرڤایزەر بۆ باکئەپی داتابەیس یەکێکە لە باوترین هۆکارەکانی تێکچوونی داتا، لاپەڕەی دڕاو (torn pages)، و پچڕانی کارکردنی سیستەم کە ناکرێت چاک بکرێتەوە. لەم وتارەدا، ئێمە باسی ناکۆکی تەلارسازی نێوان هایپەرڤایزەرەکان و بزوێنەری داتابەیسەکان دەکەین، میکانیزمی تێکچوونی داتا لە کاتی وێنەگرتندا، و باشترین ڕێکارە ئەندازیارییەکان کە پێویستن بۆ باکئەپکردنی سەلامەتی داتابەیسە وێرتواڵکراوەکان.
ناکۆکی تەلارسازی: هایپەرڤایزەرەکان بەرامبەر بزوێنەری داتابەیسەکان
بۆ تێگەیشتن لەوەی بۆچی وێنەگرتنی VM مەترسی بۆ سەر داتابەیسەکان دروست دەکات، دەبێت سەرەتا بزانین چۆن هەردوو سیستەمەکە دۆخ و ئۆپەراسیۆنەکانی I/O بەڕێوەدەبەن.
هایپەرڤایزەرەکان چۆن وێنەگرتن (Snapshot) ئەنجام دەدەن
کاتێک هایپەرڤایزەرێک (وەک VMware ESXi، Microsoft Hyper-V، یان KVM) وێنەگرتنێک ئەنجام دەدات، ئەو دیسکەکە کۆپی ناکات. لە جیاتی ئەوە، فایلە وێرتواڵەکەی دیسکەکە (بۆ نموونە .vmdk یان .vhdx) لە دۆخی تەنها-خوێندنەوە (read-only) دەیبەستێت و دیسکێکی نوێی جیاوازی (delta disk) دروست دەکات. هەموو نووسینەکانی دواتر ئاراستەی ئەم دیسکە جیاوازە دەکرێن.
کاتێک وێنەگرتنەکە دەسڕدرێتەوە، هایپەرڤایزەرەکە دەبێت داتا لە دیسکە جیاوازەکەوە بگەڕێنێتەوە بۆ دیسکە بنەڕەتییەکە. وێنەگرتنە ئاساییەکان بە تەواوی بێ ئاگان لەو ئەپڵیکەیشنانەی لە ناو سیستەمی کارپێکردنی میواندا کاردەکەن. ئەوان دۆخی دیسکەکە بەو شێوەیە دەگرن کە لەو ساتە وردەدا هەیە.
داتابەیسە ترانساکشناڵەکان چۆن دۆخ بەڕێوەدەبەن
داتابەیسە ترانساکشناڵەکان بەپێی تایبەتمەندییەکانی ACID (Atomicity, Consistency, Isolation, Durability) دیزاین کراون. بۆ بەدەستهێنانی کارایی بەرز لە کاتێکدا پابەندبوون بە ACID دەپارێزرێت، داتابەیسەکان هەموو ترانساکشنێک ڕاستەوخۆ بۆ فایلە سەرەکییەکانی داتا لەسەر دیسک نانووسن. لە جیاتی ئەوە، ئەوان تەلارسازییەکی ئاڵۆز و فرە-ئاست بەکاردەهێنن:
- Buffer Pool / Shared Buffers: داتا دەخوێنرێتەوە و لە ناو بیرگەی سیستەمدا دەستکاری دەکرێت.
- Write-Ahead Log (WAL) / Redo Logs: گۆڕانکارییەکان بەدوای یەکدا بۆ فایلێکی لۆگی زۆر ئۆپتیمایزکراو لەسەر دیسک دەنووسرێن بۆ دڵنیابوون لە مانەوەی داتا.
- Checkpoints / Lazy Writers: بە شێوەیەکی خولی، داتابەیسەکە ئەو لاپەڕانەی دەستکاری کراون (dirty pages) لە بیرگەوە بۆ فایلە ڕاستەقینەکانی داتا لەسەر دیسک دەگوازێتەوە.
بەهۆی ئەم تەلارسازییەوە، فایلە فیزیکییەکانی داتا لەسەر دیسک نزیکەی هەمیشە لەگەڵ دۆخی ڕاستەقینەی داتابەیسەکەدا ناگونجێن. دۆخی ڕاستەقینەی داتابەیسەکە تەنها وەک تێکەڵەیەک لە فایلەکانی داتا لەسەر دیسک، لۆگەکانی WAL/Redo، و ئەو داتایەی ئێستا لە بیرگەدایە بوونی هەیە.
ناوچەی مەترسی: چی ڕوودەدات لە کاتی وێنەگرتنی VM
کاتێک وێنەگرتنێکی ئاسایی VM بۆ سێرڤەری داتابەیسێک ئەنجام دەدەیت، تۆ دۆخێکی crash-consistent (گونجاو لەگەڵ تێکچوون) دەگریت.
Crash Consistency بەرامبەر Application Consistency
وێنەگرتنی crash-consistent هاوتایە لەگەڵ کێشانی کێبڵی کارەبای سێرڤەرە فیزیکییەکە. دۆخی دیسکەکە دەگیرێت، بەڵام هەرچی لە بیرگەدا بووە لەدەست دەچێت، و هەرچی لە ناوەڕاستی گواستنەوەدا بووە بۆ کۆنترۆڵەری کۆگاکردن بە خێرایی دەپچڕێت.
لە کاتێکدا داتابەیسە مۆدێرنەکان دیزاین کراون بۆ ئەوەی لە لەدەستدانی کارەبای چاوەڕواننەکراو چاک ببنەوە بە دووبارە ئەنجامدانەوەی Write-Ahead Log، پشت بەستن بە چاکبوونەوەی تێکچوون وەک ستراتیژی سەرەکی باکئەپ زۆر مەترسیدارە. ئەگەر داتابەیسەکەت چەند دیسکێکی وێرتواڵ لەخۆ دەگرێت (بۆ نموونە فایلەکانی داتا لە Drive D: و WAL لە Drive E:)، هایپەرڤایزەرەکە ڕەنگە نەتوانێت هەردوو دیسکەکە لە هەمان ساتدا وێنە بگرێت. ئەگەر وێنەی دیسکی WAL تەنانەت بەشێک لە چرکەیەک دوای وێنەی دیسکی داتا بگیرێت، داتابەیسەکە ناتوانێت ژمارەی زنجیرەکان لە کاتی گەڕاندنەوەدا ڕێکبخات، کە دەبێتە هۆی تێکچوونی کوشندە.
کاریگەری “VM Stun” لەسەر سیستەمە ترانساکشن بەرزەکان
پرۆسەی دروستکردنی وێنەگرتن—و گرنگتر لەوە، پرۆسەی یەکخستنی وێنەگرتن—دەبێتە هۆی دیاردەیەک کە بە “VM Stun” ناسراوە.
بۆ ئەوەی بە سەلامەتی I/O لە دیسکە بنەڕەتییەکەوە بۆ دیسکە جیاوازەکە بگوازرێتەوە، هایپەرڤایزەرەکە دەبێت بۆ ساتێک ئامێرە وێرتواڵەکە ڕابگرێت (stun). بۆ سێرڤەرێکی وێبی سووک، ئەم ڕاگرتنە ڕەنگە 10-50 میلی چرکە بخایەنێت و هەستی پێ نەکرێت. بەڵام، بۆ داتابەیسێکی خێرایی بەرز کە I/O ی زۆری هەیە، یەکخستنی دیسکێکی جیاوازی گەورە دەتوانێت VM بۆ چەند چرکەیەک ڕابگرێت.
لە کاتی VM stun:
* پەیوەندییەکانی تۆڕ دەپچڕێن، دەبێتە هۆی کات بەسەرچوونی (timeout) ئەپڵیکەیشن.
* کڵاستەرە بەرز-بەردەستەکان (وەک SQL Server Always On، PostgreSQL Patroni، یان MySQL Galera) پشکنینی دڵ (heartbeat) لەدەست دەدەن.
* کڵاستەرەکە ڕەنگە وا بیر بکاتەوە کە نۆدەکە مردووە، و دەبێتە هۆی ئەنجامدانی failoverێکی ناپێویست و تێکدەر (دۆخی split-brain).
لاپەڕەی دڕاو (Torn Pages) و ناگونجانی I/O
بزوێنەری داتابەیسەکان بە شێوەیەکی گشتی داتا بە قەبارەی لاپەڕەی دیاریکراو دەنووسن (بۆ نموونە 8KB بۆ PostgreSQL و SQL Server، 16KB بۆ InnoDB). بەڵام، سیستەمی کارپێکردن و کۆگاکانی بنەڕەتی I/O بە بلۆکی بچووکتر (بۆ نموونە 4KB یان 512 بایت) ئەنجام دەدەن.
ئەگەر هایپەرڤایزەرێک وێنەگرتنێک ئەنجام بدات لەو ساتەدا کە داتابەیسەکە لاپەڕەیەکی 8KB دەنووسێت، وێنەگرتنەکە ڕەنگە 4KB ی یەکەمی داتا نوێیەکە و 4KB ی کۆتایی داتا کۆنەکە بگرێت. ئەمە لاپەڕەیەکی دڕاو دروست دەکات. کاتێک هەوڵ دەدەیت وێنەگرتنەکە بگەڕێنیتەوە، داتابەیسەکە لاپەڕەکە دەخوێنێتەوە، پشکنینی checksum شکست دەهێنێت، و داتابەیسەکە وەک تێکچوو نیشان دەکات.
دەرئەنجامە ڕاستەقینەکان بۆ بزوێنەری داتابەیسە دیاریکراوەکان
بزوێنەری داتابەیسە جیاوازەکان بە شێوەی جیاواز کاردانەوەیان بۆ وێنەگرتنی crash-consistent دەبێت، بەڵام هیچ کامیان بە شێوەیەکی باش لە ژینگەی بەرهەمهێناندا مامەڵەی لەگەڵ ناکەن.
- PostgreSQL: PostgreSQL بە شێوەیەکی زۆر پشت بە بوخچەی
pg_walدەبەستێت. ئەگەر وێنەگرتنێک بوخچەی داتا ($PGDATA) و WAL بە ناگونجاوی بگرێت، PostgreSQL شکست دەهێنێت لە کارکردن، و هەڵەیPANIC: could not locate a valid checkpoint recordدەردەکات. - MySQL/InnoDB: InnoDB بوفرێکی دووبارە-نووسین (doublewrite buffer) بەکاردەهێنێت بۆ ڕێگریکردن لە لاپەڕەی دڕاو، کە هەندێک پاراستن دژی دۆخی crash-consistent دابین دەکات. بەڵام، ئەگەر فایلی
ibdata1وib_logfileبە ناگونجاوی بگیرێن، بزوێنەری InnoDB لە کاتی چاکبوونەوەدا تێکدەچێت. - Microsoft SQL Server: SQL Server زۆر هەستیارە بەرامبەر بە بەستنی I/O. بەبێ یەکخستنی دروستی VSS (Volume Shadow Copy Service)، گەڕاندنەوەی SQL Server لە وێنەگرتنی ئاسایی VM زۆرجار دەبێتە هۆی داتابەیسی گوماناوی و زنجیرە لۆگی شکاو، کە تواناکانی گەڕاندنەوەی کاتی (PITR) لەناودەبات.
باشترین ڕێکارەکان بۆ باکئەپکردنی سەلامەتی داتابەیسە وێرتواڵکراوەکان
بۆ پاراستنی داتابەیسە ترانساکشناڵەکان، دەبێت لە باکئەپی crash-consistent بەرەو باکئەپی application-consistent (گونجاو لەگەڵ ئەپڵیکەیشن) هەنگاو بنێیت. ئەمە پێویستی بەوەیە میکانیزمی باکئەپەکە پەیوەندی لەگەڵ بزوێنەری داتابەیسەکەدا بکات، و ناچاری بکات بیرگە بۆ دیسک بەتاڵ بکات و ئۆپەراسیۆنەکانی I/O بۆ ساتێک ڕابگرێت لە کاتێکدا وێنەگرتنەکە ئەنجام دەدرێت.
1. سوودوەرگرتن لە Application-Aware Quiescing (VSS و fsfreeze)
بۆ ویندۆز (SQL Server):
هەمیشە دڵنیابە کە چارەسەری باکئەپەکەت خزمەتگوزاری Microsoft Volume Shadow Copy Service (VSS) بەکاردەهێنێت. کاتێک باکئەپێکی VSS-aware دەست پێ دەکات، SQL Server VSS Writer ئۆپەراسیۆنەکانی I/O ی داتابەیسەکە دەبەستێت، ترانساکشنە چاوەڕوانکراوەکان بۆ دیسک دەگوازێتەوە، و دڵنیایی دەدات کە وێنەگرتنەکە بە تەواوی لەگەڵ ئەپڵیکەیشنەکەدا گونجاوە.
بۆ لینوکس (PostgreSQL / MySQL):
لینوکس هاوتایەکی ڕەسەنی VSS نییە. بۆ بەدەستهێنانی گونجانی ئەپڵیکەیشن، دەبێت سکریپتەکانی pre-freeze و post-thaw لەگەڵ ئامرازەکانی میوانی هایپەرڤایزەرەکە (وەک VMware Tools) بەکاربهێنیت.
ئەمە نموونەیەکی VMware pre-freeze-script بۆ PostgreSQL 15+ کە بە سەلامەتی داتابەیسەکە بۆ وێنەگرتن ئامادە دەکات:
#!/bin/bash
# /usr/sbin/pre-freeze-script
# دڵنیابە ئەم سکریپتە دەتوانرێت جێبەجێ بکرێت (chmod +x)
# 1. بە PostgreSQL بڵێ بۆ باکئەپ ئامادە بێت
su - postgres -c "psql -c "SELECT pg_backup_start('vm_snapshot', true);""
# 2. بوفرەکانی سیستەمی فایل بۆ دیسک بەتاڵ بکە
sync
# 3. سیستەمی فایلەکە ببەستە (بە گریمانەی ئەوەی داتا لە /var/lib/pgsql دایە)
fsfreeze -f /var/lib/pgsql
و post-thaw-script ی هاوتای بۆ دەستپێکردنەوەی ئۆپەراسیۆنەکان:
#!/bin/bash
# /usr/sbin/post-thaw-script
# 1. سیستەمی فایلەکە بکەرەوە
fsfreeze -u /var/lib/pgsql
# 2. بە PostgreSQL بڵێ باکئەپەکە تەواو بوو
su - postgres -c "psql -c "SELECT pg_backup_stop();""
2. بەکارهێنانی ئامرازەکانی باکئەپی ڕەسەنی داتابەیس
لە کاتێکدا وێنەگرتنی application-consistent لە وێنەگرتنی ئاسایی باشترە، هێشتا مەترسی VM stun یان هەیە. سەلامەتترین ڕێگا بۆ باکئەپی داتابەیس بەکارهێنانی ئامرازەکانی باکئەپی ڕەسەن و ستریمینگە کە بە سەربەخۆیی لە هایپەرڤایزەرەکە کاردەکەن.
PostgreSQL (pg_basebackup):
pg_basebackup -h localhost -U replication_user -D /mnt/backups/pg_backup -Ft -z -P
MySQL/MariaDB (Percona XtraBackup / Mariabackup):
ئەم ئامرازانە باکئەپی گەرم و بێ-ڕاگرتن ئەنجام دەدەن بە کۆپیکردنی فایلەکانی داتا و لە هەمان کاتدا چاودێریکردنی گۆڕانکارییەکان لە redo log.
mariabackup --backup --target-dir=/mnt/backups/mysql_backup --user=root --password=SecurePass
SQL Server (T-SQL):
BACKUP DATABASE [ProductionDB]
TO DISK = N'Z:BackupsProductionDB.bak'
WITH NOFORMAT, NOINIT, NAME = N'ProductionDB-Full Backup',
SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 10;
GO
3. جێبەجێکردنی گەڕاندنەوەی کاتی (PITR) لە ڕێگەی ئەرشیفکردنی لۆگ
وێنەگرتنێکی ڕۆژانە یان باکئەپێکی تەواو تەنها تا ئەو ساتەی گیراوە دەتپارێزێت. ئەگەر داتابەیسەکەت کاتژمێر 4:00 ی پاشنیوەڕۆ تێکبچێت و دوایین وێنەگرتنت کاتژمێر 2:00 ی بەیانی بووبێت، 14 کاتژمێر لە داتای ترانساکشن لەدەست دەدەیت.
بۆ بەدەستهێنانی خۆڕاگری ڕاستەقینەی کۆمپانیاکان، دەبێت باکئەپی تەواوی application-consistent لەگەڵ ئەرشیفکردنی بەردەوامی لۆگ (باکئەپکردنی WAL، Redo Logs، یان Transaction Logs هەموو چەند خولەکێک) تێکەڵ بکەیت. ئەمە ڕێگە بە بەڕێوەبەرانی داتابەیس دەدات داتابەیسەکە بۆ خولەکێکی دیاریکراو یان تەنانەت ID ی ترانساکشنێکی دیاریکراو پێش کارەساتەکە بگەڕێننەوە.
ستراتیژییەکانی باکئەپی کۆمپانیاکان لەگەڵ CloudSave
بەڕێوەبردنی سکریپتی custom pre-freeze، کرۆن جۆب بۆ دەمپە ڕەسەنەکان، و ناردنی لۆگ لەسەر دەیان سێرڤەری داتابەیس بۆ تیمەکانی DevOps خەونێکی ناخۆشە. لێرەدایە کە پلاتفۆرمێکی ئاستی کۆمپانیاکان وەک CloudSave دەبێتە شتێکی گرنگ.
CloudSave بۆشایی نێوان وێرتواڵیزەیشن و تەلارسازی داتابەیس پڕ دەکاتەوە. لە جیاتی پشت بەستن بە وێنەگرتنی کوێرانەی هایپەرڤایزەر، CloudSave بریکاری application-aware بەکاردەهێنێت کە بە شێوەیەکی ڕەسەن لەگەڵ SQL Server، PostgreSQL، MySQL، و Oracle یەکدەگرێت.
کاتێک CloudSave باکئەپێک دەست پێ دەکات:
1. ڕاستەوخۆ لە ڕێگەی API یە ڕەسەنەکانەوە (وەک VSS بۆ ویندۆز یان ستریمینگی ڕەسەنی WAL بۆ لینوکس) پەیوەندی لەگەڵ بزوێنەری داتابەیسەکە دەکات.
2. بەتاڵکردنی بوفرەکانی بیرگە بۆ دیسک ڕێکدەخات بەبێ ئەوەی ببێتە هۆی VM stun ی تێکدەر.
3. بە سەلامەتی فایلەکانی داتا دەگرێت و بە شێوەیەکی ئۆتۆماتیکی بڕینی لۆگی ترانساکشن بەڕێوەدەبات.
4. بە بەردەوامی باکئەپی لۆگەکانی ترانساکشن دەکات، کە ڕێگە بە گەڕاندنەوەی وردی کاتی (PITR) دەدات بە چەند کلیکێک.
بە لابردنی ئاڵۆزی گونجانی ئەپڵیکەیشن بۆ CloudSave، بەڕێوەبەرانی داتابەیس و بەڕێوەبەرانی سیستەم دەتوانن دڵنیایی بدەن لە پاراستنی داتا بەبێ ئەوەی کارایی یان بەردەستبوونی کڵاستەرەکانی بەرهەمهێنان قوربانی بکەن.
دەرەنجام
وێنەگرتنی ئامێرە وێرتواڵەکان ئامرازێکی سەرسوڕهێنەرە بۆ بەڕێوەبردنی ژێرخان، بەڵام ئەوان بە بنەڕەتی لەگەڵ پێداویستییەکانی ACID ی داتابەیسە ترانساکشناڵەکان ناگونجێن. پشت بەستن بە وێنەگرتنی crash-consistent ی هایپەرڤایزەر ڕێکخراوەکەت تووشی لاپەڕەی دڕاو، زنجیرەی ڕیپلیکەیشنی شکاو، و لەدەستدانی داتای کارەساتبار دەکات.
بۆ پاراستنی داتا گرنگەکانت، دەبێت application-aware quiescing جێبەجێ بکەیت، میتۆدۆلۆژییەکانی باکئەپی ڕەسەنی داتابەیس بەکاربهێنیت، و ئەرشیفی بەردەوامی لۆگی ترانساکشن بپارێزیت. بە پەسەندکردنی چارەسەرەکانی باکئەپی کۆمپانیاکان کە بۆ ئەم مەبەستە دروستکراون، دەتوانیت دڵنیابیت کە داتابەیسەکانت بە بەرزی بەردەست دەمێننەوە، بە تەواوی دەگەڕێنرێنەوە، و بە تەواوی پارێزراون.