এডাব্লুএস ইলাস্টিকবিয়ানস্টাল্ক ডকার-পাতলা পুল পূর্ণ হচ্ছে এবং কেবল পঠনযোগ্য হিসাবে ফাইল সিস্টেমের পুনরায় মাউন্টের কারণ?


10

আমি বুঝতে পারি না যে কীভাবে এডাব্লুএস তাদের ডকারকে 'পাতলা পুল' সেট করে ইলাস্টিকবিস্টালকে এবং কীভাবে এটি পূরণ হচ্ছে। আমার ডকার পাতলা পুলটি কোনওভাবে পূরণ করছে এবং যখন আমার অ্যাপ্লিকেশনগুলি ডিস্কে লেখার চেষ্টা করছে তখন আমার ক্র্যাশ ঘটায়।

এটি ধারকটির ভিতরে থেকে:

>df -h
>     /dev/xvda1                  25G  1.4G   24G   6%

ইবিএস আসলে এটিতে একটি 25 গিগাবাইট ডিস্ক বিযুক্ত করে; 1.6 গিগাবাইট কি du -sh /ফিরে আসে।

ইসি 2 এর বাইরে এটি নিরপেক্ষভাবে যথেষ্ট শুরু হয় ... (মাধ্যমে lvs)

LV          VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
docker-pool docker twi-aot--- 11.86g             37.50  14.65

তবে ফাইল সিস্টেমটি শীঘ্রই কেবল পঠনযোগ্য হিসাবে পুনরায় মাউন্ট করবে mount dmesg মাধ্যমে:

[2077620.433382] Buffer I/O error on device dm-4, logical block 2501385
[2077620.437372] EXT4-fs warning (device dm-4): ext4_end_bio:329: I/O error -28 writing to inode 4988708 (offset 0 size 8388608 starting block 2501632)
[2077620.444394] EXT4-fs warning (device dm-4): ext4_end_bio:329: I/O error     [2077620.473581] EXT4-fs warning (device dm-4): ext4_end_bio:329: I/O error -28 writing to inode 4988708 (offset 8388608 size 5840896 starting block 2502912)

[2077623.814437] Aborting journal on device dm-4-8.
[2077649.052965] EXT4-fs error (device dm-4): ext4_journal_check_start:56: Detected aborted journal
[2077649.058116] EXT4-fs (dm-4): Remounting filesystem read-only

ইসি 2 উদাহরণ-জমিতে পিছনে ফিরে ডকার এই প্রতিবেদন করেছেন: (থেকে docker info)

Pool Name: docker-docker--pool
Pool Blocksize: 524.3 kB
Base Device Size: 107.4 GB
Backing Filesystem: ext4
Data file:
Metadata file:
Data Space Used: 12.73 GB
Data Space Total: 12.73 GB
Data Space Available: 0 B
Metadata Space Used: 3.015 MB
Metadata Space Total: 16.78 MB
Metadata Space Available: 13.76 MB
Thin Pool Minimum Free Space: 1.273 GB

এলভিএস এই তথ্যটি ফেলে দেয়:

  --- Logical volume ---
  LV Name                docker-pool
  VG Name                docker
  LV UUID                xxxxxxxxxxxxxxxxxxxxxxxxxxxx
  LV Write Access        read/write
  LV Creation host, time ip-10-0-0-65, 2017-03-25 22:37:38 +0000
  LV Pool metadata       docker-pool_tmeta
  LV Pool data           docker-pool_tdata
  LV Status              available
  # open                 2
  LV Size                11.86 GiB
  Allocated pool data    100.00%
  Allocated metadata     17.77%
  Current LE             3036
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:2

এই পাতলা পুলটি কী, এটি কেন পূর্ণ হয় এবং আমি কীভাবে এটি থামাতে পারি? এছাড়াও, আমার / ভলিউমের কনটেইনারের ভিতরে যদি আমার 20+ জিবি বিনামূল্যে থাকে তবে কেন এটি নতুন লেখা বন্ধ করে দেয়? আমি যতদূর বলতে পারি এটি আমার প্রোগ্রামগুলিতে লিখিত ফাইলগুলির সাথে সংযুক্ত নয়।

ধন্যবাদ!

উত্তর:


8

.ebextensionsডেভিড এলিস দ্বারা প্রস্তাবিত আমার জন্য কাজ করেন। আমি তার উত্তরে মন্তব্য করতে অক্ষম, তবে আমি যুক্ত করতে চেয়েছিলাম যে আপনি স্ন্যাপশট ব্যবহার না করে একটি নতুন ইবিএস ভলিউম তৈরি করতে পারেন। একটি 40 জিবি ইবিএস ভলিউম মাউন্ট করতে আমি নিম্নলিখিতটি ব্যবহার করেছি:

option_settings:
  - namespace: aws:autoscaling:launchconfiguration
    option_name: BlockDeviceMappings
    value: /dev/xvdcz=:40:true

আরও দেখুন এই ডকুমেন্টেশন , যা একটি নতুন 100GB EBS ভলিউম ম্যাপিং একটি উদাহরণ রয়েছে /dev/sdh

trueশেষ মানে এ "তে মুছতে বিনষ্ট"।

আমি উপরের কোড সহ .ebextensionsএকটি ebs.configফাইল যুক্ত একটি নতুন ডিরেক্টরি তৈরি করেছি , তারপরে আমার সাথে ডিরেক্টরিটি জিপ করে Dockerrun.aws.json। নোট করুন যে ডকাররুন ফাইল অবশ্যই কোনও জিপের শীর্ষ স্তরে থাকতে হবে, কোনও উপ-ডিরেক্টরিতে নেই।

ইলাস্টিক বিয়ানস্টাল্ক কোথায় ভলিউম মাউন্ট করছে তা জানতে, lsblkব্যর্থতার উদাহরণটি ব্যবহার করুন। এটি আমার জন্যও ছিল /dev/xvdcz, তাই সম্ভবত এটি স্ট্যান্ডার্ড।


3

আমরা একই ইস্যুতে আঘাত পেয়েছি। মূল কারণটি মনে হয় যে ডকার তার স্টোরেজ ইঞ্জিনটি ( devicemapperইলাস্টিক বিয়ানস্টালকে ডিফল্টরূপে পাতলা- সরবরাহিত) discardবিকল্পগুলি সহ মাউন্ট করবেন না , যা এটি বিরতি না হওয়া অবধি ব্লকগুলি পূরণ করে।

আমি এর একটি সুনির্দিষ্ট সমাধান খুঁজে পেতে সক্ষম হইনি, তবে এখানে একটি কার্যকর ( এই মন্তব্যটি দেখুন ) যা আমি প্রভাবিত দৃষ্টান্তগুলিতে ব্যবহার করতে সক্ষম হয়েছি:

docker ps -qa | xargs docker inspect --format='{{ .State.Pid }}' | xargs -IZ fstrim /proc/Z/root/

1
ধন্যবাদ। আমি একই উপসংহারে এসে পৌঁছেছি এবং সমস্ত ডেটা স্টোরেজ ইবিএসের পরিবর্তে শেষ করেছি। আমি মনে করি এটি সত্যিকারের ক্ষণস্থায়ী / অস্থায়ী ফাইলগুলির জন্য কিছুটা বোকামি (যা ওভাররাইট করে চলেছে) তবে ওহে আপনি কী করতে পারেন?
std''OrgnlDave

দেখা যাচ্ছে যে এর জন্য একটি ক্রোনজব ইসি 2 ডকুমেন্টেশনে রয়েছে, তবে এটি বিস্টনল ডক্সে উল্লেখ করা হয়নি। বিয়ানস্টালকে আপনাকে দেখতে হবে যে আপনি কোনও বিশেষ ক্রন্টাব বা কোনও কিছুর জন্য একটি হুক যোগ করতে পারেন কিনা।
std''OrgnlDave

ওহ, জেনে ভাল লাগল! আপনি কি এখানে লিঙ্কটি একটি রেফারেন্স হিসাবে অনুলিপি করতে আপত্তি করবেন?
এফএক্স

1
"ট্রিম" অনুসন্ধান করুন ডকস.এওএস.আমজোন.com/ আমাজোনসিএস / স্লেট / ডেভেলপারগাইড / … খুব সুস্পষ্ট জিনিসের একেবারে সরল উল্লেখ নয়
স্টাডি'অরগনাল ডেভ

1
@ থমাসগ্রেনগার .এবেক্সটেনশন ফাইলগুলি। পৃথিবীতে বিরক্তিকর সম্ভাব্য সৃষ্টির বাটগুলির মধ্যে সবচেয়ে ব্যথা। তারা সিস্টেম বুটআপ চালায়।
std''OrgnlDave

2

আমি এডাব্লুএস ডকুমেন্টেশনে প্রদত্ত পরামর্শগুলি অনুসরণ করেছি এবং এখন সবকিছুই কাজ করছে।
তবে আমাকে দুটি সমাধান একত্রিত করতে হয়েছিল: স্থান বাড়ানো এবং পুরানো ফাইলগুলি সরাতে ক্রোনজব যুক্ত করা।
আমি যা করেছি তা এখানে।

প্রথমত, আমি xvdcz12 গিগাবাইটের পরিবর্তে 50 গিগাবাইট ব্যবহার করতে ভলিউমটি পরিবর্তন করেছি । এটি স্টোরেজ যা আমরা দেখতে পাচ্ছি docker system info। আমার ক্ষেত্রে এটি সর্বদা পূর্ণ ছিল কারণ আমি প্রতিদিন প্রচুর ফাইল আপলোড করি।

.ebextensions / blockdevice-xvdcz.config

option_settings:
  aws:autoscaling:launchconfiguration:
    BlockDeviceMappings: /dev/xvdcz=:50:true

আমি মুছে ফেলা ফাইলগুলি আর ব্যবহার করা হয়নি তা পরিষ্কার করার জন্য ক্রোনজব যুক্ত করেছি। এটি প্রয়োজনীয় ছিল কারণ ডকার এখনও কোনও কারণে তাদের রেখেছিল। আমার ক্ষেত্রে দিনে একবারই যথেষ্ট। আমার চেয়ে বেশি আপলোড থাকলে আপনার কতবার প্রয়োজন তা চালানোর জন্য ক্রোনজব কনফিগার করতে পারেন।

.ebextensions / cronjob.config

files:
    "/etc/cron.d/mycron":
        mode: "000644"
        owner: root
        group: root
        content: |
            0 23 * * * root /usr/local/bin/remove_old_files.sh

     "/usr/local/bin/remove_old_files.sh":
        mode: "000755"
        owner: root
        group: root
        content: |
            #!/bin/bash
            docker ps -q | xargs docker inspect --format='{{ .State.Pid }}' | xargs -IZ sudo fstrim /proc/Z/root/
            exit 0

 commands:
    remove_old_cron:
        command: "rm -f /etc/cron.d/*.bak"

সূত্র: https://docs.aws.amazon.com/pt_br/elasticbeanstalk/latest/dg/create_deploy_docker.container.console.html#docker-volume


1

এডাব্লুএস ইলাস্টিকীয় স্টিলক ডকার বিভাগ পরিবেশ কনফিগারেশন এটি কীভাবে কাজ করে তা নথি করে:

উন্নত পারফরম্যান্সের জন্য, ইলাস্টিক বিয়ানস্টালক আপনার ডকার পরিবেশের ইসি 2 উদাহরণগুলির জন্য দুটি অ্যামাজন ইবিএস স্টোরেজ ভলিউমকে কনফিগার করে। সমস্ত ইলাস্টিক বিয়ানস্টাল্ক পরিবেশের জন্য সরবরাহ করা মূলের পরিমাণের অতিরিক্ত ছাড়াও, ডকোর পরিবেশে চিত্র স্টোরেজ করার জন্য xvdcz নামে একটি দ্বিতীয় 12 জিবি ভলিউম সরবরাহ করা হয়েছে।

ডকার ইমেজগুলির জন্য আপনার যদি আরও স্টোরেজ স্পেস বা বর্ধিত আইওপিএস প্রয়োজন হয় তবে আপনি ব্লকডেভাইসম্যাপিং কনফিগারেশন বিকল্পটি অ্যাডস: অটোক্ল্যাসিং: লঞ্চ কনফিগারেশন নেমস্পেস ব্যবহার করে ইমেজ স্টোরেজ ভলিউমটি কাস্টমাইজ করতে পারেন।

উদাহরণস্বরূপ, নিম্নলিখিত কনফিগারেশন ফাইলটি 500 বিধানযুক্ত আইওপিএস সহ স্টোরেজ ভলিউমের আকার 100 গিগাবাইটে বাড়িয়েছে:

উদাহরণ .ebextensions / blockdevice-xvdcz.config

option_settings:
  aws:autoscaling:launchconfiguration:
    BlockDeviceMappings: /dev/xvdcz=:100::io1:500

আপনি যদি আপনার অ্যাপ্লিকেশনটির জন্য অতিরিক্ত ভলিউম কনফিগার করার জন্য ব্লকডেভাইসম্যাপিংস বিকল্পটি ব্যবহার করেন তবে আপনাকে এটি তৈরি করা হয়েছে তা নিশ্চিত করার জন্য xvdcz এর জন্য একটি ম্যাপিং অন্তর্ভুক্ত করা উচিত। নিম্নলিখিত উদাহরণটি দুটি ভলিউমকে কনফিগার করে, ডিফল্ট সেটিংস সহ চিত্র স্টোরেজ ভলিউম xvdcz এবং এসডিএআই নামে একটি অতিরিক্ত 24 জিবি অ্যাপ্লিকেশন ভলিউম কনফিগার করে:

উদাহরণ .ebextensions / blockdevice-sd.config

option_settings:
  aws:autoscaling:launchconfiguration:
    BlockDeviceMappings: /dev/xvdcz=:12:true:gp2,/dev/sdh=:24

0

আমি একদিন ধরে এই সমস্যার বিরুদ্ধে আমার মাথাটি মারলাম এবং অবশেষে এটি বের করে ফেললাম।

এডাব্লুএস devicemapperব্যাকএন্ড ব্যবহার করছে এবং এটি একটি 12 জিবি এসএসডি ভলিউম তৈরি করে যা এটি ডকার চিত্রগুলির জন্য মাউন্ট করে এবং ব্যবহার করে। আপনি ইলাস্টিকীয়নস্টালক এক্সটেনশন ধারণার মধ্য দিয়ে মাউন্ট করে ভলিউমটি ওভাররাইড করতে হবে এবং সি এল এলির মাধ্যমে মোতায়েন করতে হবে (দুর্ভাগ্যক্রমে, তাদের জিইউআইয়ের মাধ্যমে এটি করার কোনও উপায় নেই)।

যে ডিরেক্টরিতে আপনার Dockerrun.aws.jsonফাইল রয়েছে, সেখানে ডিরেক্টরি বলা একটি ডিরেক্টরি .ebextensionsতৈরি করুন এবং তারপরে একটি ফাইল তৈরি করুন যা এর .configঅভ্যন্তরে শেষ হয় । আমি আমার ফোন 01.correctebsvolume.config। তারপরে নীচের বিষয়বস্তুগুলি সেখানে রাখুন:

option_settings: - namespace: aws:autoscaling:launchconfiguration option_name: BlockDeviceMappings value: /dev/xvdcz=snap-066cZZZZZZZZ:40:true:gp2

আমি আমার ব্যর্থ সরাসরি boxed এক মধ্যে ssh'ed করে দেখা গেল মাউন্ট করা হয় /dev/xvdcz। আপনার জন্য এটি ভিন্ন হতে পারে। snap-066cZZZZZZZZচাহিদা একটি বৈধ স্ন্যাপশট আইডি যাবে। আমি ব্যর্থতার উদাহরণের একটি এএমআই চিত্র তৈরি করেছি এবং এটি প্রক্রিয়াটিতে তৈরি হওয়া স্ন্যাপশটটি ব্যবহার করেছি। 40আপনার যা প্রয়োজন কত জিবি ভলিউম হতে হবে, তাই বিকল্প। আমি কী করব trueবা জানি gp2না, তবে তারা এএমআই ইমেজ ব্লক ডিভাইস ডেটা থেকে এসেছে, তাই আমি এগুলি রেখে দিয়েছি।

যাদু namespaceএবং ডকুমেন্টেশন এখানoption_name থেকে আসা ।


সুতরাং ... এটি পাতলা পুলের পরিবর্তে ইবিএসে মূল ডকার ভলিউমটিকে মাউন্ট করে?
std''OrgnlDave

একটি ডাবর থিনপুল একটি ইবিএস ভলিউম (ঠিক 12 গিগাবাইটের) চালানোর জন্য সেট আপ করা হয়েছে। এটি সেই ভলিউমটিকে একটি বৃহত্তর সাথে প্রতিস্থাপন করে এবং এটি কাজ করার জন্য সর্বনিম্ন আক্রমণাত্মক উপায়।

ওহ, থিমপুল কনফিগারেশনটি অ্যামাজন সেটআপ 100 গিগাবাইটের জন্য, সুতরাং এটি এই উত্তরের উপরের সীমা, এবং আমি নিশ্চিত নই যে এটি সামঞ্জস্য করা যায় কিনা।

0

কেবলমাত্র ডিস্কের আকার বাড়ানো সমস্যার সমাধান করবে না, এটি পরে ত্রুটি ঘটবে। এডাব্লুএস আপনার ধারকটিতে একটি নতুন ডিস্ক ম্যাপ করার পরামর্শ দেয় যাতে কোনও ফাইল তৈরি / মুছুন ফাইল ডকার পোল স্তরকে প্রভাবিত না করে।

আমি বর্তমানে এটি সন্ধান করছি, আমি এখনও পরীক্ষা করিনি তবে আমি যে সলিউশনটি পেয়েছি তা আমার ব্লকডভাইস.কনফাইগে রয়েছে

commands:
  01mount:
    command: "mount /dev/sdh /tmp"
option_settings:
  aws:autoscaling:launchconfiguration:
    BlockDeviceMappings: /dev/xvda=:16:true:gp2,/dev/xvdcz=:12:true:gp2,/dev/sdh=:12:true:ephemeral0

কোন মন্তব্য প্রশংসা।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.