Minio سرویس Object Storage متن بازی است که سهولت در راه اندازی و استفاده از آن و Stability این سرویس باعث شده انتخاب شرکت هایی مثل Paypal , Bloomberg و … باشد . البته در این متن اصلا قصد مقایسه مزایا یا تبلیغ آن را ندارم. قطعا در مقالات معتبری مزایا و معایب این سرویس به خوبی بیان شده است .در این متن تجربه راه اندازی و استفاده از این سرویس را بیان خواهم کرد .
در مرحله اول این سرویس با توجه به داکیومنت اصلی minio نصب کردیم .
سرویس را ما به صورت Distributed پیاده سازی کردیم. Minio با استفاده از الگوریتم Erasure Code دیتا را Shard میکند و با ساخت parity blocks این اطمینان به وجود می اورد که با ضریب خطایی مشخص دیتا همیشه در دسترس خواهد بود و از بین نمیرود .
یک موضوعی که تو بحث Performance و حجم دیتا تاثیر دارد موضوع storage classes هست . با انتخاب حالت بهینه تر ( باید حساسیت دیتا در نظر گرفته شود ) می توانیم کلاستر بهینه تر داشته باشیم . حتما این موضوع بررسی کنید که آیا حالت اولیه که Standard Class هست مناسب دیتا و کلاستر شما هست یا خیر .
موضوع بعد انتخاب دیسک های سخت افزار هست . اگر شما Best Practice های این سرویس بررسی کنید قطعا باید این سرویس بدون Raid ایجاد بشه و حتما مدل و سرعت دیسک های سخت افزاری شما در کیفیت کلاستر تاثیر داره . پیشنهاد من استفاده از دیسک های SSD یا SAS 15k – 10k هست . حتما در محاسبات اولیه به موضوع IOps سرویس Minio توجه کنین که به مشکلاتی مثل IOwait در ترافیک بالا برخورد نکنید . دیسک ها باید سایز یکسانی داشته باشن که بالانس حجمی در تمامی دیسک ها رعایت شده باشد . من راهکاری ندیدم که بتوان از دیسک هایی با حجم های متفاوت استفاده کرد و خود کلاستر این موضوع مدیریت کند . شاید در نسخه جدید اینجور قابلیت باشد . چون دیتا روی تمام دیسک ها به طور مرتب در حال نوشته شدن هست قطعا کند بودن حتی یک دیسک سخت افزاری روی Performance کل کلاستر تاثیر خواهد گذاشت .
این مقاله به خوبی موارد پیشنهادی برای Performance Optimization سرویس بیان کرده . مواردی چون Sysctl , بحث سایز و کیفیت دیسک ها و … در آخر هم میتونین با ابزار هایی مثل s3-benchmark کیفیت و توان کلاستر خودتون تست کنین .
یک موضوع دیگه باید بهش اشاره کنم بحث Scale Up کردن کلاستر هست . تا جایی که من بررسی کردم نمیشه به کلاستر دیسک جدید اضافه کرد . اما میشه به حالت Federate کلاستر جدیدی را اضافه کنین . ( این موضوع در داکیومنت جدید Deprecated شده )
در هر صورت بهتر با توجه به این موضوع از ابتدا تعداد Node ( حداقل ۴ Node ) و تعداد دیسک ( با سایز مناسب ) انتخاب کنید.
برای مانیتورینگ من از Integration مربوط به Prometheus استفاده کردم که به خوبی حجم کلاستر و دیتا مربوط به ارتباطات کلاستر را Expose میکنه و با داشبورد مناسب میشه به طور کامل کلاستر و کیفیت سرویس Object Storage را بررسی کرد .
بهتر یک وب سرور Nginx به عنوان Reverse Proxy سر راه کلاستر قرار بگیره که درخواست ها را Load Balance کنه بین Node های Minio و بحث Fail Over بین Node ها را برقرار کند .
کانفیگ کردن پروکسی Nginx برای سرور Minio
در مجموع اگر نیاز به یک سرویس Object Storage دارین Minio میتونه گزینه خوبی باشه . قطعا ممکن شما تجربه یا چالش بزرگتری در راه اندازی و استفاده از این سرویس داشتید و ممنون میشم که این تجربه رو با ما به اشتراک بگذارید .