آشنایی با SaltStack؛ ابزار مدیریت و خودکارسازی فرایندها
SaltStack یک نرمافزار اوپن سورس نوشته شده به زبان پایتون و یک انجین اجرای دستورات از راه دور است که به واسطه یک ابزار کامند لاین، امکان مدیریت پیکربندی را فراهم میکند. در این مقاله به این موضوع میپردازیم که سالت استک چیست و چه تفاوتها و شباهتهایی با سایر ابزارهای مشابه دارد
پیشازاین، ابزارهایی مانند Puppet و Chef برای مدیریت پیکربندی استفاده میشدند که از سرعت کمی برخوردار بودند و گاهی در روند پردازش، مشکلاتی ایجاد میکردند. با SaltStack دیگر این موارد وجود ندارد و این ابزار، عملکردی سریع دارد. در ادامه به شکل دقیقتر بررسی میکنیم که SaltStack چیست و با دیگر پلتفرمهای موجود چه تفاوتهایی دارد.
Saltstack چیست؟
قبل از بررسی جزئیات بیشتر درباره این فریمورک، بیایید ببینیم که SaltStack چیست و برای چه کاری طراحی شده است. «سالت استک» که گاه به طور ساده به آن «سالت» هم میگویند یک ابزار اتوماسیون قدرتمند با معماری مبتنی بر ایده اجرای دستورها از راه دور است. این عملکردهای از راه دور میتواند به سادگی درخواست از یک وب سرور برای نمایش یک صفحه وب داینامیک باشد یا حتی به پیچیدگی استفاده از یک Session شِل برای صدور دستورات به سرور از راه دور. سالت استک ابزاری برای اجرای پیچیدهترین دستورهای از راه دور به شمار میرود. این نرمافزار را بهعنوان رقیبی برای سایر ابزارهای خودکارسازی فرایندها مانند Chef ،Puppet و Ansible میشناسیم.
در سالت استک، مدیریت پیکربندی به شکلی ساده و روان انجام میشود. پلتفرم salt از مدل push کردن دستورات از راه دور به واسطه پروتکل SSH استفاده میکند. به طور پیش فرض، سیستم پیکربندی این ابزار، بر قالبهای YAML و Jinja مبتنی است. طراحی سالت استک به شکلی است که امکان دستور همزمان به چندین ماشین را برای کاربران فراهم میکند. ایده عملکرد سالت بر اساس عملکرد Master و Minions است. در این ابزار، مَسترها، یک یا چند مینیوم را کنترل میکنند. دستورات معمولا از سمت مستر، برای گروهی از مینیونها صادر شده، در مینیونها اجرا میشود و سپس دادههای نتایج از سمت مینیونها به مستر باز میگردد. ارتباطهای بین مستر و مینیونها بر بستر باس پیام ZeroMQ (یا به عبارتی ZeroMQ message bus) انجام میشود.
ماژولهای SaltStack با سیستمعاملهای پشتیبانی شده مینیون ارتباط برقرار میکند. ابزار سمت مستر، به شکل پیشفرض روی لینوکس قابلاجرا است، اما مینیونها میتوانند روی هر سیستمعاملی اجرا شوند و در حال حاضر، ویندوز، VMware vSphere و BSD Unix هم پشتیبانی میشود. مستر و مینیونها از کلیدها برای ارتباط استفاده میکنند. هنگامی که یک مینیون برای اولین بار با مستر ارتباط برقرار میکند، به طور خودکار، کلیدها را روی مستر ذخیره میکند. سالت استک همچنین ابزار Salt SSH را ارائه میکند که امکان مدیریت سیستمها بدون نیاز به نیاز به عامل (Agent) را فراهم میآورد.
حالا که میدانیم سالت استک چیست و چه کاری انجام میدهد، نحوه عملکرد و ساختار آن را هم در ادامه بررسی خواهیم کرد.
چرا به SaltStack نیاز داریم؟
اگر بخواهیم بررسی کنیم که دلیل اصلی نیاز به SaltStack چیست، میتوانیم بهسرعت و مقیاسپذیری آن اشاره کنیم. به دلیل همین سرعت و مقیاسپذیری بالا، از این پلتفرم برای مدیریت زیرساختهای بزرگ با هزاران سرور در لینکدین، ویکیپدیا و گوگل استفاده میشود. برای درک بهتر نیاز به این ابزار، تصور کنید سرورهای متعددی دارید و میخواهید عملکردهای مختلفی را روی آنها اجرا کنید. برای این کار، باید به هریک از سرورها وارد شده و عملکردها را بهصورت مجزا در آن اجرا کنید. این روند زمانی که بخواهید عملکردهای پیچیده و زمانبر؛ مانند نصب نرمافزارها و پیکربندی آنها بر اساس معیارهای خاص را انجام دهید، سختتر میشود.
سناریویی را تصور کنید که ۱۰۰ سرور در اختیار شما است و قصد دارید به هر یک از آنها لاگین کرده، دستورات مشابه را در همه آنها اجرا کنید و سپس فایلهای پیکربندی را به صورت تک به تک در این ۱۰۰ سرور ویرایش نمایید. بیشک انجام چنین کاری، فرایندی، زمانبر، مستعد خطا، پیچیده و طاقتفرسا را میطلبد. ولی اگر راهکاری باشد که تمامی این کارها روی ۱۰۰ سرور را تنها با اجرای یک دستور انجام دهد، عالی خواهد بود. سالت استک ابزاری است که دقیقا همین کار را انجام میدهد. با این مثال ساده، بهتر متوجه میشویم که اهمیت استفاده از سالت استک چیست.
ویژگیهای SaltStack چیست؟
برای بررسی مزایای این پلتفرم، باید ببینیم که ویژگیهای متمایز SaltStack چیست و چه قابلیتهای متفاوتی را ارائه میدهد. برخی از مهمترین ویژگیهای سالت استک عبارت است از:
تحمل خطا یا Fault tolerance
مینیونهای سالت میتوانند به طور همزمان به چندین مستر متصل شوند. به این منظور میتوان پارامترهای مستر را تحت لیست YAML پیکربندی کرد و این لیست را در دسترس تمامی مسترهای موجود قرار داد. هر مستر میتواند دستورات خود را به زیرساخت سالت ارسال نماید.
انعطافپذیری
انعطافپذیری یکی از مهمترین ویژگیهای سالت استک است که در تمام رویکرد مدیریت و پیکربندی آن دیده میشود. میتوانید این ابزار را برای استفاده در محبوبترین مدلهای مدیریت سیستم از جمله Agent and Server ،Agent-only ،Server-only یا حتی در محیطهایی با ترکیبی از آنها پیادهسازی کنید.
مقیاسپذیری مدیریت پیکربندی
طراحی سالت استک به شکلی است که امکان مدیریت دههزار مینیون در هر master را فراهم میکند.
مدل اجرای موازی
در salt میتوانید از امکان اجرای دستورات موازی روی سیستمهای از راه دور، استفاده کنید.
رابط برنامهنویسی Python API
در قسمت سالت استک چیست دیدیم که این ابزار با زبان پایتون نوشته شده است. این پلتفرم از یک رابط برنامهنویسی ساده بهره میبرد و به گونهای طراحی شده که با استفاده از APIهای پایتون، به سادگی قابل گسترش است و میتواند برای کاربردهای متنوع تطبیق داده شود.
راهاندازی ساده
راهاندازی و کار با سالت استک ساده است. این ابزار یک معماری اجرایی از راه دور ارائه میکند که برای مدیریت نیازهای متنوع هر تعداد سرور مناسب خواهد بود.
قابلیت Language Agnostic
در سالت، فایلهای پیکربندی state در saltstack، انجین قالب یا نوع فایل، قابلیت پشتیبانی از هر نوع زبانی را دارند.
همه این ویژگیها و قابلیتهای اساسی، نشان میدهد که دلیل محبوبیت SaltStack چیست.
بیشتر بخوانید: انسیبل چیست؟
اجزای اصلی معماری SaltStack
برای آن که نحوه عملکرد این ابزار را درک کنیم، لازم است بدانیم که ساختار معماری SaltStack چیست و از چه اجزایی تشکیل میشود. همانطور که اشاره کردیم، اساس این پلتفرم بر پایه ایده Master است که یک یا چند minion را کنترل میکند. دستورها از master برای گروهی از مینیونها ارسال شده و سپس وظایفی تعیین شده در آنها، اجرا میشود. پس از آن دادههای حاصل به master بازگردانده میشود. این ارتباط بین minion و master از طریق ZeroMQ ایجاد میشود.
مهمترین اجزای معماری سالت استک شامل موارد زیر است:
ZeroMQ
سالت بر کتابخانه ZeroMQ مبتنی است. ZeroMQ یک کتابخانه پیامرسانی سبک و سریع بوده که پیادهسازی اولیه آن بر اساس C و ++C است و البته پیادهسازی بومی برای برخی از زبانها از جمله جاوا و داتنت نیز موجود است. ZeroMQ یک ابزار پردازش پیام نظیر به نظیر بدون واسطه محسوب میشود و این امکان را فراهم میکند که بتوان سیستمهای ارتباطی پیچیده را به روشی ساده طراحی کرد.
SaltMaster
Salt-master بهعنوان یک daemon برای ارسال تنظیمات و دستورها به Salt Slaves استفاده میشود. بهعبارتدیگر، SaltMaster یک ماشین است که مدیریت زیرساختها و سیاستهای تعیین شده سرور را برعهده دارد. هر مَستر میتواند مدیریت چندین مستر دیگر را انجام دهد.
Salt Minions
مینیون از واژههایی است که در سالت بسیار شنیده میشود و شاید برایتان سوال باشد که معنای این واژه در سالت استک چیست؟ مینیونها همان Deamonهای Salt Slave هستند که به آنها اشاره کردیم. مینیونها، پیکربندیها و دستورات را از مستر دریافت میکنند. این مینیونها با نصب روی هر ماشین مدیریت شده، برای تعامل با مستر پیکربندی میشوند. اجرای دستورهای دریافت شده از مستر، ارسال گزارش موفقیت اجرای دستور موردنظر و ارائه دادههای مربوط به میزبان اصلی، از وظایف مینیونها هستند.
Execution
دستورات و ماژولهای Ad-hoc در مقابل یک یا چند مینیون و به واسطه خط فرمان که مانیتورینگ را ارائه میدهد، اجرا میشوند.
Formula
فرمولها، حالتهای از قبل نوشته شده هستند که برای عملکردهای مختلفی از جمله نصب پکیج، پیکربندی یک سرویس، تنظیم کاربران یا مجوزها و … استفاده میشوند.
Grains
رابط گرینها بخش دیگری از سالت استک هستند که برای ارائه اطلاعات ثابت مربوط به مینیونها طراحی شدهاند. با شروع عملکرد یک مینیون، grainها نیز بارگذاری میشود که این روند نشان میدهد اطلاعات درون آنها، قابلتغییر نیست. اطلاعات قرار گرفته در گرینها میتواند به سیستمعامل برای کرنل در حال اجرا مربوط باشد.
Pillar
رابط پیلار برای تولید یا ذخیره اطلاعات بسیار حساس، مانند رمزهای عبور یا کلیدهای رمزنگاری شده، طراحی شده است. این اطلاعات در یک جفت key-value ذخیره میشود.
Top file
این بخش برای تطبیق وضعیتهای salt و دادههای پیلار با Daemonهای slave استفاده میشود.
Runners
Runners یک ماژول در مستر است که مسئولیت اجرای وظایفی از جمله خواندن دادهها از APهای خارجی، وضعیت اتصال و جابها، جستجوی مینیونهای متصل و … را دارد.
Returners
وظیفه برگرداندن اطلاعات از مینیونها به سیستم دیگر، برعهده این بخش است.
Reactor
وظیفه تحریک واکنشها در زمان رخ دادن هر رویداد در محیط SaltStack، برعهده راکتور است.
Salt Cloud
یک رابط قدرتمند برای برقراری ارتباط با مینیون را در اختیار کاربر قرار میدهد.
SaltSSH
برای اجرای دستورات سالت روی Secure shell در سیستمها از SaltSSH استفاده میشود. این کار بدون هیچگونه تداخلی از سوی مینیون انجام خواهد شد.
با بررسی اجزای اصلی و وظایف هریک از آنها، حالا میدانیم که ساختار سالت استک چیست و روند مدیریت در این پلتفرم به چه صورتی اجرا میشود.
مزایای SaltStack چیست؟
از آنجاییکه سالت استک ساده بوده و مجموعه کاملی از ویژگیها و قابلیتهای مهم را ارائه میدهد، استفاده از آن مزایای متنوعی دارد. بیایید ببینیم مهمترین مزایای SaltStack چیست و چه نقاط قوتی دارد که باعث شده نسبت به رقبای آن ترجیح داده شود. مهمترین مزایا عبارتاند از:
- ارائه یک چارچوب مدیریت پیکربندی قوی و با امکان کار با دهها هزار سیستم
- ارائه زوج کلیدهای ساده SSH برای احراز هویت
- امکان مدیریت امن دادهها با استفاده از یک پروتکل رمزگذاری شده
- طراحی بهصورت یک ابزار بسیار سریع و سبک با فراهم کردن پایه و اساس یک انجین اجرای از راه دور
- استفاده از قابلیت Salt Virt Cloud Controller برای خودکارسازی فرایندهای ماشین مجازی
- ارائه قابلیتهایی از جمله: استقرار ساده، مدیریت پیکربندی مبتنی بر مدل و نیز فریم ورک اجرای دستور
همه اینها از مهمترین نقاط قوت Salt هستند. در ادامه به این موضوع میپردازیم که مهمترین دلایل تفاوت سایر ابزارهای موجود با سالت استک چیست.
مقایسه SaltStack با Ansible، پاپت و Chef
علاوه بر سالت استک، Chef ،Puppet و Ansible نیز جزو برترین ابزارهای مدیریت ارکستراسیون و پیکربندی هستند. هر کدام از این ابزارها، روند مشخصی برای اتوماسیون سرور دارد و برای پیکربندی و مدیریت آسان هزاران سرور طراحی شدهاند. اما سوال اصلی اینجاست که تفاوت آنها با SaltStack چیست و از جهات مختلف، چه ویژگیهایی ارائه میدهند. بسیاری افراد معتقدند که Salt از تمام ابزارهای مشابه، بهتر است. در جدول زیر، یک مقایسه کامل و همهجانبه از این پلتفرمها خواهیم داشت.
SaltStack | Ansible | Chef | Puppet | |
پلتفرم و پشتیبانی | نسخههای مختلف لینوکس، macOS، ویندوز و یونیکس | پشتیبانی از Scientific Linux از طریق بستههای اضافی برای Enterprise Linux (EPEL)، توزیع فدورا و برخی سیستمعاملهای دیگر | ویندوز، سولاریس، CentOS، ردهت انترپرایز، FreeBSD، AIX و اوبونتو | ردهت انترپرایز، CentOS، اوراکل لینوکس، SUSE Linux Enterprise Server، اوبونتو، Scientific Linux |
زبان طراحی | پایتون | پایتون | Ruby | Ruby |
زبانهای پشتیبانی شده | همه زبانها | همه زبانها | Ruby | Ruby |
رابط کاربری وب | ارائه نمای جابهای در حال اجرا، گزارش رویدادها و وضعیت مینیون | ارائه امکان پیکربندی کاربران، گروهها و اینونتوریها و با امکان اعمال پلیبوکها روی اینونتوریها | امکان پیدا کردن نودهای اینونتوری، مشاهده فعالیتهای نود و تخصیص نقشها | مدیریت اینونتوری، گزارشدهی و مدیریت در لحظه نود |
ابزارهای مدیریت | استفاده از سالت استک انترپرایز به عنوان ابزار اصلی برای مدیریت ارکستریشن کلود، عملکردهای آیتی و نیز مدیریت موارد مربوط به DevOps | Ansible1.3 | CFE Engine | ابزار Open Source Puppet و نیز ابزار Puppet Enterprise که علاوه بر امکانات «اوپن سورس پاپت» ابزار کاند لاین برای مدیریت نودها، رابط کاربری گرافیکی و API را ارائه میکند. |
کارایی و عملکرد | ارائه مقیاسبندی در سطح بالا و کارایی بهبودیافته، ایجاد یک سیستم ارتباطی بین master و slave با استفاده از ZeroMQ | امنیت بالا، کارایی بالا و عدم دخیل کردن هیچ یک از Agentها | مشکلات مرتبط با روند جستجوی کند | امنیت بالا، کارایی بالا و عدم نیاز به Agentها |
هزینه | طراحی بهصورت رایگان و منبعباز، امکان هزینه تا ۱۵۰ دلار در سال برای هر ماشین در نسخه انترپرایز | منبعباز و رایگان تا ۱۰ ماشین، پس از آن، پرداخت تا ۲۵۰ دلار در هر سال برای هر ماشین، جهت پشتیبانی پیشرفته و بسته به سطح پشتیبانی | طراحی منبعباز و رایگان. نسخه انترپرایز رایگان برای ۵ دستگاه، نیاز به پرداخت ۱۲۰ دلار در ماه برای ۲۰ ماشین و ۳۰۰ دلار در ماه برای ۵۰ ماشین | طراحی رایگان و منبعباز، امکان هزینه تا ۱۰۰۰ دلار در سال برای هر ماشین برای نسخه انترپرایز |
موارد استفاده | قابلیت ادعام با هر با هر پلتفرم مبتنی بر کلود و استفاده توسط سیسکو و رک اسپیس | امکان پیادهسازی در محیطهای ابری و محیطهای مجازیسازی، دیجیتال اوشن، AWS، کلود استک، گوگل کلاد پلتفرم | امکان ادغام با پلتفرمهای مبتنی بر ابر شامل Amazon EC2، اوپن استک، مایکروسافت اژور، گوگل کلاد پلتفرم، رک اسپیس و Internap | استفاده شده توسط پلتفرمهای توییتر، پیپال، زینگا، بورس اوراق بهادار نیویورک و گوگل |
با بررسی این جدول میتوانید ببینید که مهمترین تفاوتهای پلتفرمهای مشابه به سالت استک چیست و هر یک چه ویژگیهایی را ارائه میدهد.
بیشتر بخوانید: ابزار خودکارسازی Puppet چیست؟
سخن پایانی
در این مطلب به طور کامل بررسی کردیم که SaltStack چیست و با ساختار معماری و اجزای آن آشنا شدیم. همچنین دیدیم مزایای سالت استک چیست و این ابزار چه تفاوتی با سایر پلتفرمهای مدیریت پیکربندی مانند Puppet ،Ansible و Chef دارد.