تخزين مشكلة عامل تخزين (عامل ميناء الجذر) محفوظات الترحيل

في موعد لا يتجاوز يومين قبل ذلك ، تقرر على أحد الخوادم نقل وحدة تخزين عامل الرصيف (الدليل حيث يقوم عامل التخزين بتخزين جميع ملفات الحاويات والصور) إلى قسم منفصل ، والذي
تمتلك المزيد من القدرات. يبدو أن المهمة تافهة ولم تنذر بالمتاعب ...

البدء:

1. وقف وقتل جميع الحاويات من تطبيقنا:

docker-compose down 

إذا كان هناك الكثير من الحاويات ، وكانت في تكوين مختلف ، يمكنك القيام بذلك:

 docker rm -f $(docker ps -q) 

2. وقف الخفي عامل ميناء:

 systemctl stop docker 

3. انقل الدليل إلى الموقع المطلوب:

 cp -r /var/lib/docker /docker/data/storage 

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

5. نبدأ شيطان عامل الميناء ، ونرى أنه يبدو حيث يجب أن يكون:

 systemctl status docker 

في أحد خطوط الإخراج ، يجب أن نرى:
 ├─19493 /usr/bin/dockerd --data-root=/docker/data/storage 

لقد تأكدنا من أن الخيار قد تم تمريره إلى البرنامج الخفي ، والآن سوف نتحقق مما إذا كان قد تم تطبيقه (شكرًا inkvizitor68sl )!
 docker info | awk '/Root Dir/ {print $NF}' 

6. نبدأ طلبنا:
 docker-compose up -d 

7. تحقق

وهنا تبدأ المتعة ، DBMS ، MQ ، كل شيء على ما يرام! القاعدة سليمة ، كل شيء يعمل ... باستثناء nginx. لدينا التجمع nginx الخاصة بنا مع kerberos والمقبلات . ويظهر عرض سجلات الحاوية أنه لا يستطيع الكتابة إلى / var / tmp - تم رفض الإذن. أمد أصابعي بالويسكي وأحاول تحليل الموقف ... كيف يتم ذلك؟ صورة عامل الميناء لم تتغير. لقد انتقلنا للتو الدليل. لقد نجحت دائمًا ، وهنا من أجلك ... من أجل التجربة ، ذهبت إلى الحاوية مع الأقلام وقمت بتغيير حقوق هذا الدليل ، كان هناك الجذر ، الجذر 755 ، أعطى الجذر ، الجذر 777 . وبدأ كل شيء ... فكر في رأسي - نوع من الهراء ... ظننت ، حسنًا ، ربما لم أضع شيئًا في الاعتبار ...

قررت أننا أحبنا حقوق الوصول إلى الملفات أثناء النقل. لقد أوقفوا التطبيق ، وهو البرنامج الخفي لرسو السفن ، وقاموا بحذف الدليل الجديد وعملوا نسخة من دليل / var / lib / docker باستخدام rsync -a بالفعل.

أعتقد الآن أن كل شيء على ما يرام ، نحن نرفع عامل الميناء ، التطبيق.

ثالثا ... المشكلة لا تزال ... عيني رفت. هرعت إلى وحدة التحكم الخاصة بجهازي الافتراضي ، حيث أقوم بإجراء اختبارات مختلفة ، وصورت صورة nginx هذه ، وتسلقت داخل الحاوية ، وهنا حقوق الجذر 777 الموجودة في الدليل / var / tmp ، وهي نفس الحقوق التي اضطررت لإعدادها بيدي . لكن الصور متطابقة!

تستخدم في كل مكان FS XFS.

قارنت من خلال الأمر

 docker inspect my-nginx:12345 

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

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

لقد حذفت الصورة المحلية ، وحذفت الصورة أيضًا من سجل عامل ميناء وبدأتها مرة أخرى. وانها عملت. اتضح أنه أثناء النقل ، تعرضت الحقوق للضرب ، سواء داخل الصورة المحلية أو داخل الصورة الموجودة في السجل. كما قلت ، لعدد من الأسباب ، كانت موجودة على نفس السيارة. ونتيجة لذلك في دليل واحد / var / lib / docker.

واستباقًا لمسألة ما إذا كانوا حاولوا إرجاع نظرة عامل الميناء إلى الكتالوج القديم - لا ، لم يسمحوا ، للأسف ، لم تسمح الظروف. نعم ، وأردت حقًا معرفة ذلك.

بعد كتابة هذا المقال ، يبدو حل المشكلة واضحًا بالنسبة لي ، لكن في وقت التحليل لم يكن الأمر كذلك. أنا googled بصراحة ، ولم تجد حالات مماثلة.

خلاصة القول: لقد حلت المشكلة ، لم أفهم السبب = (

إذا كان شخص ما يعرف / يخمن / كان لديه رؤية حول الأسباب المحتملة لهذه المشكلة - سأكون سعيدًا جدًا لرؤيتك في التعليقات!

Source: https://habr.com/ru/post/ar462013/


All Articles