النسخ الاحتياطية تواصل تعطيل منتداي

أواجه دورات متكررة حيث يؤدي إنشاء النسخ الاحتياطي إلى تعطيل موقعي بسبب مشاكل المساحة.

لقد قمت بإعداده بحيث أستخدم وحدة تخزين منفصلة من DigitalOcean لتخزين النسخ الاحتياطية والتحميلات. حجم الوحدة هو 300 جيجابايت.

إعدادات النسخ الاحتياطي الخاصة بي:

المشكلة تتكرر منذ أشهر. أتلقى رسائل حول فشل النسخ الاحتياطي في صندوق الوارد الخاص بالمسؤول (انظر أدناه).

لا توجد مساحة متبقية على الجهاز
[2024-02-14 03:43:34] Finalizing backup...
[2024-02-14 03:43:34] Creating archive: elite-fourum-2024-02-14-033845-v20240204204532.tar.gz
[2024-02-14 03:43:34] Making sure archive does not already exist...
[2024-02-14 03:43:34] Creating empty archive...
[2024-02-14 03:43:34] Archiving data dump...
[2024-02-14 03:43:58] Archiving uploads...
[2024-02-14 03:55:03] Removing tmp '/var/www/discourse/tmp/backups/default/2024-02-14-033845' directory...
[2024-02-14 03:55:03] Gzipping archive, this may take a while...
[2024-02-14 04:25:38] EXCEPTION: /var/www/discourse/lib/discourse.rb:138:in `exec': Failed to gzip archive.

gzip: /var/www/discourse/public/backups/default/elite-fourum-2024-02-14-033845-v20240204204532.tar.gz: No space left on device

[2024-02-14 04:25:38] /var/www/discourse/lib/discourse.rb:172:in `execute_command'
/var/www/discourse/lib/discourse.rb:138:in `exec'
/var/www/discourse/lib/discourse.rb:34:in `execute_command'
/var/www/discourse/lib/backup_restore/backuper.rb:253:in `create_archive'
/var/www/discourse/lib/backup_restore/backuper.rb:40:in `run'
/var/www/discourse/lib/backup_restore.rb:13:in `backup!'
/var/www/discourse/app/jobs/regular/create_backup.rb:10:in `execute'
/var/www/discourse/app/jobs/base.rb:297:in `block (2 levels) in perform'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rails_multisite-5.0.0/lib/rails_multisite/connection_management.rb:82:in `with_connection'
/var/www/discourse/app/jobs/base.rb:284:in `block in perform'
/var/www/discourse/app/jobs/base.rb:280:in `each'
/var/www/discourse/app/jobs/base.rb:280:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:202:in `execute_job'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:170:in `block (2 levels) in process'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:177:in `block in invoke'
/var/www/discourse/lib/sidekiq/pausable.rb:132:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:179:in `block in invoke'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:182:in `invoke'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:169:in `block in process'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:136:in `block (6 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/job_retry.rb:113:in `local'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:135:in `block (5 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq.rb:44:in `block in <module:Sidekiq>'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:131:in `block (4 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:263:in `stats'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:126:in `block (3 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/job_logger.rb:13:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:125:in `block (2 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/job_retry.rb:80:in `global'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:124:in `block in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/job_logger.rb:39:in `prepare'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:123:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:168:in `process'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:78:in `process_one'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:68:in `run'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/component.rb:8:in `watchdog'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/component.rb:17:in `block in safe_thread'
[2024-02-14 04:25:38] Deleting old backups...
[2024-02-14 04:25:38] Cleaning stuff up...
[2024-02-14 04:25:38] Removing '.tar' leftovers...
[2024-02-14 04:25:39] Marking backup as finished...
[2024-02-14 04:25:39] Notifying 'system' of the end of the backup...

ولكن بعد ذلك، سأحصل على سلسلة من النسخ الاحتياطية المكتملة جزئيًا على ما يبدو، والتي لا يتم إعلامي بها على ما أعتقد. تتراكم حتى تصل إلى النقطة التي يتم فيها محاولة إنشاء نسخة احتياطية جديدة كل يوم، مما يؤدي إلى تعطيل موقعي في نفس الوقت.

يجب عليّ تسجيل الدخول يدويًا عبر SSH وإزالة هذه النسخ لأنها لا تظهر في صفحة /admin/backups.

أعلم أنه من الصعب تكرار هذه المشكلة وبالتالي من الصعب إصلاحها، ولكن كنت أتساءل عما إذا كان هناك شيء خاطئ بشكل واضح أفعله أو إذا كان الآخرون يواجهون نفس المشكلة؟

أول شيء يجب تجربته، بعد إزالة الأجزاء التي ليست ملفات نسخ احتياطي مضغوطة، هو تقليل الحد الأقصى للنسخ الاحتياطية إلى 2.

أعتقد أنه في أي حال من الأحوال من الأفضل أن تكون هناك طريقة لجلب هذه النسخ الاحتياطية إلى مكان آخر - منزلك على سبيل المثال. إذا واجهت مشكلة مع المستضيف الخاص بك وقام بحذف حسابك، فستجد نفسك بلا شيء. وبالمثل إذا تم اختراق حسابك، وربما أيضًا إذا تعرضوا لحريق.

بمجرد أن يكون لديك طريقة - ربما يدوية، ربما تلقائية - للحصول على نسخ خارجية، ستكون قريبًا جدًا من الحصول على طريقة للتحقق من الأجزاء وحذفها.

لقد اقترحت من قبل أن تعرض لوحة التحكم تحذيرًا إذا لم يتم قراءة ملفات النسخ الاحتياطي لعدة أيام منذ إنشائها. هذا فحص سهل نسبيًا، وفي رأيي هو مؤشر جيد للتحقق من وجود نسخة خارجية.

يمكنك أيضًا اختيار وضع النسخ الاحتياطية الخاصة بك في تخزين الكتل (block storage)، ويمكنك القيام بذلك باستخدام مزود مختلف. عندها ستكون أقل عرضة لفقدان كل من تثبيتك ونسخك الاحتياطية.

أعتقد أن هناك عملًا معلقًا منذ فترة طويلة يجب القيام به والذي لن يحتاج إلى وجود كل من النسخ الاحتياطي وملف النسخ الاحتياطي المضغوط لفترة وجيزة، ولكنه لا يستحق الانتظار. في هذه الأثناء، تحتاج إلى مساحة للنسخ الاحتياطية N التي تحتفظ بها، بالإضافة إلى 1 للنسخة الاحتياطية التي يتم إنشاؤها في شكل غير مضغوط، بالإضافة إلى 1 للنسخة الاحتياطية المضغوطة التي تحتاجها لفترة وجيزة قبل حذف أقدم نسخة من N.

تحتاج إلى مساحة قرص لـ N+2 نسخة احتياطية، وإذا فشلت النسخة الاحتياطية، فأنت بحاجة إلى حذف الأجزاء.

5 إعجابات

تحتاج إلى التأكد من وضع هذا الدليل أيضًا على قسم 300 جيجابايت الخاص بك. هذا هو الذي يملأ القرص.

يمكنك أيضًا التفكير في نقل التحميلات إلى هذا القسم.

إعجاب واحد (1)

هل تعرف كيف تفعل ذلك عن ظهر قلب؟ هل هناك إعداد yml أو شيء أحتاج إلى تغييره؟

لقد قمت أيضًا بإعداده ليكون لدي شاشة ثابتة غير متصلة بالإنترنت عند إعادة البناء، لذا لا أعرف ما إذا كان ذلك يعقد الأمور

شيء مثل

volumes:
  - volume:
      host: /your/big/partition/tmp
      guest: /var/www/discourse/tmp

من المفترض أنك تفعل شيئًا كهذا بالفعل لوضع النسخ الاحتياطية على القسم الكبير؟

إنه كذلك. من المحتمل ألا تكون هذه هي المشكلة، إلا إذا كانت المشكلة هي أنه يستمر في عرض صفحة عدم الاتصال بالإنترنت الثابتة على الرغم من أن Discourse يعمل.

إعجاب واحد (1)

اكتشفت بعد إنشاء هذا الموضوع أنك بحاجة إلى تشغيل أمر في وحدة التحكم عند توسيع حجم DigitalOcean الخاص بك. لذلك، لم أكن أستخدم فعليًا كل مساحة 300 جيجابايت الخاصة بي.

لقد قمت بإصلاح ذلك ولم أغير أي شيء آخر، وقد تكررت المشكلة اليوم. كان هناك ملفا tar غير مضغوطين و 3 ملفات مضغوطة gzip عندما تعطل موقعي.

سأجرب الاستراتيجية المذكورة أعلاه بعد ذلك.

ولكن ما أردت قوله هو أنه سيكون من الجيد وجود مؤشر في واجهة المستخدم الإدارية يشير إلى وجود نسخ احتياطية فاشلة. أو ربما مسح أي ملفات *.tar عند تشغيل عملية نسخ احتياطي جديدة؟ في هذه الحالة، كان لدي 90 جيجابايت من النسخ الاحتياطية غير المضغوطة التي لا يمكن رؤيتها من واجهة المستخدم الإدارية. وأيضًا لا يوجد إشعار “فشل النسخ الاحتياطي” من أي منهما.

إعجابَين (2)

كيف هو استخدام الذاكرة على القطرة الخاصة بك؟ يجب أن تقوم عملية النسخ الاحتياطي بتشغيل إجراءات التنظيف وإرسال إشعار إلى المسؤولين عند فشلها. لن يحدث ذلك إذا تم إنهاء العملية بواسطة قاتل نفاد الذاكرة.

ربما هذا ما يحدث! لقد رأيت هذا السيناريو “النسخ الاحتياطي المتقطع يترك نسخًا احتياطية جزئية تملأ القرص” في عدد قليل من المواقع. كان تفسيري الأفضل هو إعادة تشغيل نظام التشغيل في منتصف النسخ الاحتياطي، لكنني رأيته في حالات عدم وجود عمليات إعادة تشغيل لنظام التشغيل.

يبدو أن إنهاء عملية النسخ الاحتياطي بواسطة نفاد الذاكرة هو تفسير محتمل يصعب تكراره بما يكفي لشرح ذلك.

. . . .

أوه. اللعنة. أحد المواقع التي أتذكر أنها واجهت هذه المشكلة لديها 16 جيجابايت من ذاكرة الوصول العشوائي، لذلك لا أعتقد أن هذا يفسر ذلك. في هذا الموقع، تكمن المشكلة في أنه كل أسبوع أو نحو ذلك، يتم ترك نسخة احتياطية على القرص المحلي بعد دفعها (أو ربما لم يتم دفعها) إلى S3. لديهم أيضًا أكثر من 100 جيجابايت من مساحة القرص المجانية، لذا يستغرق الأمر أشهر حتى تصبح المشكلة كبيرة بما يكفي لامتلاء القرص.

إليك مجموعة الملفات التي قمت بحذفها للتو:

forum-2024-03-11-123904-v20240202052058.tar.gz
forum-2024-03-09-123159-v20240202052058.tar.gz                           
forum-2024-03-07-123727-v20240202052058.tar.gz                           
forum-2024-03-05-123019-v20240202052058.tar.gz
forum-2024-03-03-123934-v20240202052058.tar.gz  

+1 لذلك، المنتدى الذي أساعد في تشغيله لديه نسخ احتياطية تُترك على الخادم بدلاً من دفعها إلى S3، وقد أدى ذلك إلى تعطل المنتدى مرة واحدة على الأقل.

إعجاب واحد (1)

لست متأكدًا مما إذا كان هذا مفيدًا، ولكن إليك المقاييس من DO

7 أيام

24 ساعة

تكبير