یکی از شروط پیشرفت کسبوکارها اطمینان از امنیت و ذخیرهسازی درست اطلاعات و دادهها است. سیستمها سنتی ذخیرهساز داده در حجم بالای اطلاعات میتوانند مشکلات زیادی ایجاد کنند. ذخیرهسازی شیء محور به عنوان راهحلی جایگزین برای روشهای سنتی مطرح شده است که میتواند مدیریت دادهها را سادهتر کند.
مینیو (MinIO) یک سرور مناسب برای ذخیرهسازی به این روش است که عملکردی بالا دارد و اپنسورس است. این سیستم قابلیتهای بالایی دارد که در ادامه بیشتر با آنها آشنا خواهیم شد.
معرفی مینیو
MinIO سروری برای ذخیرهسازی در محیط ابری با قابلیت ذخیرهسازی شیء محور است که قابلیتهای زیادی دارد. از جمله:
قیاسپذیری و انطباقپذیری
سرمایهگذاری اقتصادی مناسب باتوجهبه قابلیتهای بالای آن
انعطافپذیری و قابلیت هماهنگسازی بر اساس نیازهای کاربر
ماندگاری بالا
هماهنگی با API
همچنین این سیستم قابلیتهایی خاص برای شرایط خاص نیز ارائه میدهد:
ذخیرهسازی دادههای برنامهها در فضای ابری بومی
پلتفرم آنالیزور حجم بالای دادهها
بکآپ و قابلیت آرشیوسازی
مخزن مناسب برای فایلهای مدیا
ذخیرهسازی شیء محور چطور کار میکند؟
روش سنتی ذخیرهسازی از سیستمی شامل پوشهها و فایلها برای ذخیرهکردن دادهها استفاده میکند. این روش در حین آشنابودن، میتواند در مواجهۀ با حجم زیادی از دادهها ناکارآمد و دشوار باشد.
درعینحال، ذخیرهسازی شیء محور روش جدیدتر و کاربردیتری است که در ادامه دربارۀ ویژگیهای اصلی آن بیشتر صحبت خواهیم کرد:
اشیا (Objects): دادهها دیگر به شکل فایل ذخیره نمیشوند. بلکه به شکل واحدهای مستقلی با نام اشیا یا همان Objects ذخیره میشوند. هر کدام از این اشیا حاوی متادادهها (Metadata) هستند.
متادادهها (Metadata): متاداده شامل اطلاعاتی مانند نام، اندازه و تاریخ ایجاد تعیین شده توسط کاربر است. وجود این متادادهها جستجو و دستهبندی دادهها را آسانتر میکند.
Storage pool تخت: اشیا در محیطی بزرگ و تخت به نام Storage pool ذخیره میشوند. این کار دستهبندی و یافتن دادهها را آسانتر میکند.
شناسههای اختصاصی: هر شیء یک شناسۀ اختصاصی دارد که به عنوان آدرس آن عمل میکند. این شناسهها جستجو را آسانتر میکند.
HTTP API: برای ذخیرهسازی اشیا اغلب از یک API استاندارد مبتنی بر پروتکل HTTP این کار تعامل با سیستمها و ابزارها را ساده خواهد کرد.
یک شیء ذخیره شده شکلی شبیه به کد زیر خواهد داشت.
/
/images/
imge1.png
image2.jpg
/videos/
video1.mp4
/users/
/john.doe/
3rd quarter revenue report.docx
روند ذخیرهسازی به این شکل اتفاق میافتد:
آپلود داده: وقتی یک شیء وارد سیستم ذخیرهسازی شود، تبدیل به چند شیء خواهد شد. در ادامه متاداده ضمیمه و شناسهای خاص به آن مجموعه اختصاص داده میشود.
مخزن ذخیرۀ داده: اشیا در Storage pool تخت قرار میگیرند.
بازیابی دادهها: برای بازیابی اشیا از شناسههای اختصاصی استفاده کنید تا سیستم بهراحتی آنها را برایتان پیدا کند.
راهنمای نصب مینیو
سرور مینیو فایلی باینری یا پکیجی با فرمت .deb است که میتوان از برای نصب سیستم استفاده کرد.
ssh sammy@your-server-ip
پکیج پایگاه داده را بهروزرسانی کنید.
sudo apt update
حال سیستم را بهروزرسانی کنید.
sudo apt upgrade
نصب را تأیید کنید.
ممکن است در طی فرایند نصب به ورودی فایل پیکربندی Open SSH نیاز داشته باشید. برای جلوگیری از بازنویسی تغییرات خودکار در فایل پیکربندی، بر روی کلید Entre را کلیک کنید تا گزینۀ پیشفرض یعنی حفظ نسخۀ نصبشده انتخاب شود.
جدیدترین پکیج .deb را دانلود کنید.
wget https://dl.min.io/server/minio/release/linux-amd64/minio_20220523184511.0.0_amd64.deb
ادامهٔ کار شما با فایل minio_20220523184511.0.0_amd64.deb خواهد بود. برای نصب فایل دانلود شده از دستور dpkg برای مدیریت پکیجهای .deb استفاده کنید.
sudo dpkg -i minio_20220523184511.0.0_amd64.deb
با مشخصکردن -i پکیج نصب خواهد شد.
این دستور یک متن نصب و یک دستور اختصاصی برای مینیو ایجاد میکند. هر دوی اینها را برای اجرای سرور MinIO نیاز خواهید داشت.
کار با سیستم
برای استفاده و مدیریت اشیا در سرور مینیو روشهای مختلفی وجود دارد. در ادامه سه روش را بررسی خواهیم کرد.
مینیوکلاینت
این سیستم برای استفاده از MinIO از راه دور طراحی شده و کاملاً با AWS S3
هماهنگ است.
برای استفاده از مینیوکلاینت آن را با سیستم ذخیرهسازی ابری هماهنگی کنید.
$ mc alias set docker_minio http://127.0.0.1:9000 minioadmin minioadmin
با استفاده از این دستور میتوانید از طریق localhost پورت 9000 به نام مستعاری برای MinIO دسترسی پیدا کنید.
این دستور برای معتبرسازی اتصال استفاده میشود.
$ mc admin info docker_minio
127.0.0.1:9000
Uptime: 3 minutes
Version: 2023-05-04T21:44:30Z
Network: 1/1 OK
Drives: 1/1 OK
Pool: 1
Pools:
1st, Erasure sets: 1, Drives per erasure set: 1
1 drive online, 0 drives offline
اکنون میتوانید عملیات اساسی مانند ایجاد کانتینرها و اشیا را شروع کنید. بسیاری از دستورات اجرایی در مینیوکلاینت مانند Unix است:
CP: روند کپیکردن فایلها و اشیا
Ls: فهرستی از اشیا ایجاد میکند.
Mb: کانتینر ایجاد میکند.
Mv: اشیا را از فایلی به فایلی دیگر جابهجا میکند.
Rb: کانتینرها از بین میبرد.
Rm: فایلها یا اشیا را از بین میبرد.
اکثر این دستورات با سیستمهای ذخیرهسازی ابری سازگار هستند.
$ mc mb user1
$ mc cp ~/Resume.pdf prattm
$ mc mb user2
$ mc cp user1/Resume.pdf user2
$ mc rb user1
$ mc ls user2
[2023-05-15 21:39:10 MDT] 491K Resume.pdf
کنسول مینیو
امکان مدیریت دادهها از طریق کنسول مدیریتی مبتنی بر وب وجود دارد. برای شروع آن به آدرس http://127.0.0.1:9001 بروید. اطلاعات اولیه برای ورود minioadmin/minioadmin
هستند.
در ادامه میتوانید برای ساخت باکتهای اولیه اقدام کنید.
ممکن است تمام گزینهها برای راهاندازی مینیو مناسب نباشند. اکنون امکان جستجوی اشیا برایتان وجود دارد. با انتخاب گزینۀ Create new path میتوانید یک باکت فرعی ایجاد کنید.
عملکرد کنسول مدیریتی مینیو شبیه به command-line client است. البته با ذرهای تفاوت:
اولازهمه، کنسول مینیو نمیتواند اشیا را میان کانتینرها جابهجا کند.
علاوهبرآن بعضی از دستورات مختص command-line client هستند. مانند du، diff و pipe.
مینیو Java SDK
برای استفاده از این روش ابتدا نیاز است تنظیمات لازم را انجام دهید:
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.5.2</version>
</dependency>
اجرای Java SDK با ایجاد کاربری آزمایشی شروع میشود:
MinioClient minioClient =
MinioClient.builder()
.endpoint(“http://127.0.0.1:9000”)
.credentials(“minioadmin”, “minioadmin”)
.build();
عملکرد این کاربر مانند command-line client
و کنسول مدیریتی است. برای استفادۀ بهتر ممکن است بخواهید یک باکت ایجاد کنید.
minioClient.makeBucket(
MakeBucketArgs
.builder()
.bucket(“user1”)
.build());
در ادامه اشیا را میتوانید در آن کانتینر جایگذاری کنید.
minioClient.putObject(PutObjectArgs
.builder()
.bucket(“user1”)
.object(“Resume.pdf”)
.stream(new FileInputStream(“/tmp/Resume.pdf”)
.build());
در آخر با این دستور میتوانید یک شیء را از یک باکت بازیابی کنید.
try (InputStream stream =
minioClient.getObject(GetObjectArgs
.builder()
.bucket(“user2”)
.object(“Resume.pdf”)
.build())) {
// Read the stream
}
پیشنیازها برای استفاده از مینیو
سختافزار
در حین رایج بودن پردازندههای x86-64 و ARM64 ، مینیو با بسیاری از پردازندهها سازگاری دارد. البته برای عملکرد بالاتر، بهتر است حداقل چهار هسته برای هر سرور در نظر بگیرید.
حداقل رم 8 گیگ
HDD و SSD باتوجهبه میزان دادههایی که در نظر دارید.
حداقل شبکۀ 1 گیگ در ثانیه و برای عملکرد بالا 10 گیگ در ثانیه
نرمافزار
مینیو با اکثر سیستمهای لینوکس مانند Ubunto، Debian، CentOS و Red Hat.
سناریوهای راهاندازی
حالت مستقل
این گزینه بهترین روش راهاندازی که برای حجم دادۀ پایین ساده و مناسب است. همچنین مدیریت آن نیز آسان است. اما برای حجم دادههای بالا پیشنهاد نمیشود.
حالت توزیعی
این روش برای حجم بالای داده مناسب است و عملکرد قدرتمندی دارد. اما نسبت به حالت مستقل پیچیده بوده و نیاز به منابع بیشتری دارد.
حالت NAS Gateway
این روش میتواند به عنوان مسیر ذخیرهسازی متصل به شبکه، امکان ذخیرهسازی اشیا با دستگاه NAS را فراهم سازد. اما ممکن است نیاز به پیکربندی منحصربهفرد داشته باشد.
روش مناسب راهاندازی برای سیستم شما
مدیریت پکیجها
برای سیستمهای مبتنی بر Debian میتوانید از این روش استفاده کنید که برای سیستمهای مستقل بر روی سرورهای تککاربره مناسب است.
باینری مستقل
مینیو باینریهای مختلفی برای شرایط مختلف ارائه میدهد. این روش برای استفاده در سیستمهای مختلف مناسب است.
داکر (Docker)
کانتینر داکر گزینهای آسان برای راهاندازی فراهم میکنند. این روش مدیریت را سادهتر کرده و برای ابزارهای مانند Kubernetes بهراحتی قابلاستفاده است.
Kubernetes
مینیو میتواند به عنوان یک اپراتور Kubernetes راهاندازی شده و به طور کامل با آن هماهنگ شود.
راهاندازی در فضای ابری
مینیو فضایی پیشفرض برای پلتفرمهای ابری مانند Azure، AWS و GCP ارائه میدهد. با استفاده از این گزینه میتوانید در کنار مینیو، از قابلیتهای فضای ابری نیز بهره ببرید.
سخن پایانی
در جهان شتابزدۀ امروز، ذخیره و مدیریت دادهها برای پیشرفت شما امری حیاتی است. پلتفرم MinIO میتواند در انجام این کار در حین حفظ امنیت و سرعت عمل، به شما کمک کند.