استفاده از یک فضای ذخیرهسازی یکپارچه و سریع برای ذخیره فایلهای پیکربندی در هر فضای توزیع یافته (Distrebuted) ضرورتیست که متخصصین DevOps به خوبی از آن مطلع هستند.
افرادی که با استفاده از کوبرنتیز مشکلات مربوط به مدیریت کانتینرها را حل میکنند، ضرورت چنین سرویسی را به خوبی حس میکنند. خوشبختانه در مواجه با چنین حالتی فضای ذخیرهسازی etcd وجود دارد که با داشتن مزایا و ویژگیهای منحصر به فردی که دارد بسیاری از مشکلات مربوط به ذخیرهسازی دادههای حساس مربوط به کلاستر را میتواند حل کند.
در این مطلب از وبلاگ همروش قصد داریم با چیستی etcd و چگونگی کار کردن آن به خوبی آشنا شویم و همچنین از مزایای استفاده کردن از آن در کنار کوبرنتیز صحبت کنیم.
etcd چیست؟
etcd یک فضای ذخیرهسازی مبتنی بر ساختار Key-Value است که بهصورت توزیع شده توسعه یافته است. از این تکنولوژی برای ذخیرهسازی و مدیریت دادهها و اطلاعات حساسی که برای اجرای سیستمهای توزیع یافته حیاتی است استفاده میشود. منظور از اطلاعات حساس، دادههایی مانند اطلاعات پیکربندی، دادههای وضعیت یا State، متاداده و… است که در فضای کوبرنتیز مورد استفاده قرار میگیرد.
از آنجایی که کوبرنتیز تلاش دارد تا فرایندهای مدیریت کانتینر را بهبود بخشیده و آنها را با سهولت بیشتری انجام دهد، etcd نیز در فرایندهای مختلفی به کوبرنتیز در هر چه بهتر انجام دادن کارها کمک میکند.
برای مثال کوبرنتیز همواره به یک منبع اصلی و قابل اعتماد برای درک و ذخیرهسازی وضعیت سیستم نیاز دارد (منظور از این سیستم تمام کلاسترها، پادها و نمونههای اپلیکیشن است). Etcd تلاش دارد تا به عنوان یک فضای ذخیرهسازی این هدف کوبرنتیز را به خوبی دنبال کرده و تمام ویژگیهای مورد نیاز برای انجام این کار را فراهم کند.
اسم etcd از کجا میآد؟
واژه etcd اشارهای مستقیم به یکی از دایرکتوریهای اصلی لینوکس یعنی /etc دارد. در بین دایرکتوریهای لینوکس /etc از اهمیت بسیار بالایی برخوردار است چرا که اطلاعات مربوط به پیکربندی فایلها و اپلیکیشنهای نصب شده در این دایرکتوری و زیردایرکتوریهای مربوطه قرار میگیرد.
درست به همین منوال، etcd اطلاعات مربوط به پیکربندیهای مربوط به کلاستر و سرویسهایی که در کوبرنتیز اجرا میشوند را در خود نگهداری میکند و از این جهت انتخاب اسم بسیار هوشمندانهای است. همچنین حرف d که در آخر اسم وارد شده است مخفف کلمه Distributed یا توزیع شده است. تلفظ اسم این تکنولوژی نیز به صورت «اِت-سی-دی» یا (Et-C-D) است.
نقش etcd در کوبرنتیز
از آنجایی که etcd به عنوان اصلیترین فضای ذخیرهسازی برای دادههای پیکربندی کوبرنتیز شناخته میشود، وضعیت کلاسترها و تمام آنچه که یک اپلیکیشن را روی کوبرنتیز قابل اجرا میکند (اطلاعات مربوط به پیکربندی)، در این محل ذخیرهسازی میشود.
از این نظر بسیار مهم است که etcd بتواند یک فضای امن و قابل اطمینان را ارائه کند چرا که کوبرنتیز در بسیاری از مواقع برای اطلاع از وضعیت کلی کلاستر به آن رجوع میکند.
از آنجایی که etcd براساس یک الگوی ساختاری توزیعیافته ساخته شده است، پیکربندی کلاستر در آن کاری بسیار پیچیده است. کارهایی مانند مدیریت فایلهای ریکاوری یا پشتیبانی، پیادهسازی اولیه، بررسی رخدادهای حساس و… از جمله کارهایی هستند که باید در این محیط انجام شوند که در نهایت برای انجام این موارد نیاز به یک متخصص حرفهای وجود دارد. این موضوع باعث میشود که پیادهسازی و کار با etcd به یک چالش بزرگ تبدیل شود.
Etcd تمام اطلاعات مربوط به کلاستر را در خود ذخیره میکند، این اطلاعات شامل وضعیت کنونی کلاستر، وضعیت ایدهآل، پیکربندی منابع و دادههای محیط اجرایی. از این طریق، متخصصین DevOps میتواند با استفاده از APIهای در اختیار گرفته، کلاسترهایی با یک یا چند نود را اجرا کنند. از آنجایی که درخواستها بوسیله چندین نود در کلاستر مدیریت میشود، دادهها در etcd تغییر پیدا میکنند (در ادامه مطلب که مربوط به الگوریتم Raft است با این نکته بیشتر آشنا میشوید). حال تمام این موارد به صورت عملی براساس مراحل زیر پیش خواهد رفت:
- etcd نودهای مختلف را بررسی میکند تا منابع آزاد را پیدا کند. براساس این ساختار، درخواست یا Task دریافتی به یکی از این منابع آزاد داده میشود.
- etcd برای اینکه از سلامت نودها مطمئن شود آنها را بررسی میکند. بنابراین اگر یکی از نودها مشکلی داشته باشد، پردازش مورد نظر به یک نود دیگر انتقال مییابد.
- برای اینکه با گرسنگی یا Starvation نودها روبرو نشویم، etcd از مکانیزمهای مختلفی استفاده میکند تا مطمئن شود که از همه منابع به خوبی استفاده میشود.
- ویژگیهای etcd که شامل مواردی مانند پیکربندیهای به اشتراک گذاری شده، پیدا کردن منابع آزاد، انتخاب نود رهبر (در ادامه توضیح خواهیم داد)، Watch API و… میشود به صورت دسته جمعی به ایجاد روشی امن برای حل مشکل Cross-Communication در کوبرنتیز کمک میکند.
آشنایی با ساختار etcd و الگوریتم Raft
etcd فضای ذخیرهسازی مبتنی بر Key-Value است که به شدت تلاش دارد تا سیستمی یکپارچه را ارائه کند. دادهها در این سیستم براساس دایرکتوریهای سلسله مراتبی ذخیره میشوند (درست مانند یک سیستم فایل استاندارد). در عمل، کلیدها یا Keys در این ساختار به منابع و مقادیر یا Values به وضعیتها یا States اشاره میکنند.
بر اساس چنین ساختاری هر تغییری در منابع یا وضعیتها باعث میشود تا etcd مقدار مربوط به Keys و Values را تغییر دهد. این موضوع باعث میشود که etcd بتواند در مواجه با عملیاتهایی مانند Scheduling Tasks یا زمانبندی کارها به خوبی عمل کند.
دلیلی که etcd تا به این حد یکپارچه و همخوان است در استفاده کردن از الگوریتمی تحت عنوان Raft است. براساس این الگوریتم اگر چندین نود در سیستم وجود داشته باشد، یک نود به عنوان رهبر یا Leader از طریق یک سیستم شبیه به رای گیری انتخاب میشود. نودهای مختلف سیستم باید به صورت مشترک به یک نود رای داده و آن را به عنوان نود رهبر تعیین کنند.
هدف از انتخاب این رهبر پیدا کردن یک منبع اصلی برای اعلان وضعیت است که به اصطلاح به آن Source of Truth یا منبع اصلی واقعیت گفته میشود.
در این حالت هر زمان که یک درخواست برای انجام عملیات Read یا Write در هر کدام از نودهای مربوط به سیستم صورت بگیرد، درخواست به نود رهبر ارسال میشود.
نود رهبر که تمام جفت کلید-مقدار ها را در اختیار دارد، درخواست را بررسی کرده و براساس آن تغییراتی را در مقادیر Key-Value ایجاد میکند. پس از انجام این موارد، نود رهبر، نودهای دیگر را در جریان تغییرات قرار میدهد.
زمانی که نود رهبر این اطلاعات را به نودهای دیگر ارسال کرد، آنها نیز براساس تغییراتی که اعمال شده، در محدوده دسترسی خود تغییرات را به همان شیوه اعمال میکنند.
در این شرایط اگر نود رهبر به هر دلیلی شکست بخورد (به مشکلی برخورد کند) و نتواند این فرایند را مدیریت کند، سریعا یک نود دیگر به عنوان نود رهبر انتخاب شده و اموارت را در دست میگیرد. تا زمانی که حداکثر نودها به خوبی بتوانند در سیستم کار بکنند، فرایند انتخاب نود رهبر جدید تکرار میشود و در نهایت درخواستها پذیرفته و مدیریت میشوند. در غیر اینصورت کلیت فرایندها با مشکل مواجه شده و نیاز به انجام عملیاتهای دیگر است.
مزایا و ویژگیهای etcd
همانطور که تا به این قسمت مطالعه کردید میتوان به این نتیجه رسید که استفاده کردن از etcd میتواند ویژگیهای بسیار زیادی را به فرایند مدیریت کانتینرها اضافه کند. اما اگر میخواهید به صورت کلی با مزایای etcd آشنا شوید میتوانید لیست زیر را مطالعه کنید:
تکرارپذیری بالا
هر نود در کلاستر etcd توانایی دسترسی به تمام دادههای ذخیره شده را دارد.
در دسترس بودن
etcd به صورتی طراحی شده که به صورت حداکثری با مشکلات و Failureها روبرو شود و آنها را به حالت عادی خود در بیاورد.
یکپارچه بودن
در etcd میان دادههایی که read و write میشوند هیچ شکلی از تناقض و ناهمخوانی بوجود نخواهد آمد.
سریع بودن
بنچمارکهای مربوط به etcd نشان داده که میتواند ۱۰ هزار عملیات write را در ثانیه انجام دهد.
امن بودن
etcd از TLS خودکار و SSL پشتیبانی میکند. همچنین وجود قابلیت مدیریت دسترسی باعث میشود تا هر کسی بدون داشتن مجوز دسترسی نتواند به دادههای ذخیره شده دسترسی داشته باشد.
ساده بودن
هر نوع از اپلیکیشنی، چه یک وب اپلیکیشن ساده باش چه یک کانتینر پیچیده که از کوبرنتیز استفاده میکند، میتواند با استفاده از ابزارهای HTTP/JSON از etcd استفاده کرده و عملیاتهای read و write را انجام دهد.
جمعبندی
مدیریت و ذخیرهسازی دادههای حساس مربوط به پیکربندی اپلیکیشنها همواره یکی از چالشهای متخصصین کوبرنتیز بوده است. خوشبختانه با ظهور تکنولوژی etcd این مشکل به کاملی حل شده و افرادی که در این حوزه تخصص دارند میتوانند به خوبی از مزایا و توانمندیهای این سرویس استفاده بکنند.
در این مطلب از وبلاگ همروش ما با چیستی etcd، چگونگی کار کردن آن، مزایا و الگوریتم Raft آشنا شدیم. مطمئنا استفاده از این سرویس در فرایند توسعه و دیپلوی اپلیکیشنهایتان میتواند حجم عظیمی از کارهایتان را به خوبی مدیریت کند.