ایلانماسک برای ارسال یک ماهواره به مدار زمین، نیازمند یک کلاستر ردیس میباشد؛ اما او، پس از ریزش شدید dogecoin، بهشدت بیپول شده است و نمیتواند هزینهی اجارهی چند سرور ابری برای ایجاد یک کلاستر ردیس را پرداخت کند. بنابراین میخواهد یک کلاستر ردیس را بر روی چند docker container با کمک Ansible بالا بیاورد. او در این مسیر نیازمند کمک شماست.
برای دانلود پروژهی اولیه روی این لینک کلیک کنید.
کانتینرهای Redis
در ابتدای کار، برای ایجاد کانتینرهای ردیس، نیاز است که فایل docker-compose.yml
را تکمیل کنید. توجه داشته باشید که شما اجازهی build کردن یک Image جدید نخواهید داشت و باید از Imageهای استاندارد استفاده کنید. بهطور خاص، برای Redis میتوانید از Image زیر استفاده کنید:
registry.gitlab.com/qio/standard/redis:latest
توجه داشته باشید که باید فایل docker-compose.yml
را بهشکلی تکمیل کنید که پس از up
کردن آن، ۶ کانتینر Redis اجرا شوند که ۳ تا از آنها برای Nodeهای master و ۳ تای دیگر آنها برای Nodeهای slave استفاده خواهند شد. پس توجه داشته باشید که ما از شما انتظار داریم که به ازای هر Node اصلی، یک replica ایجاد شود همچنین network همهی کانتینرها host
باشد و در نظر داشته باشید ایمیج registry.gitlab.com/qio/standard/redis:latest
برابر با همان ایمیج redis
اصلی است و داکیومنت آن در این لینک قابل مشاهده است.
شرایط containerها
۱. نام containerها باید حتماً به شکل زیر باشد:
master1
master2
master3
slave1
slave2
slave3
توجه کنید، آن کانتینری که نامش با master شروع میشود، در انتهای کار، باید واقعاً حاوی یک Node از ردیس Master باشد و آن کانتینری که نامش با slave شروع میشود، در انتهای کار، باید واقعاً حاوی یک Node از ردیس Slave یا replica باشد.
۲. هریک از این containerها باید روی پورت مشخصی که مربوط به آنها میباشد قرار گیرند. دقیقاً به شکل زیر:
port of master1 = 7000
port of master2 = 7001
port of master3 = 7002
port of slave1 = 7003
port of slave2 = 7004
port of slave3 = 7005
ایجاد Volume
در صورتیکه نیاز دارید فایل یا مسیری را به درون هریک از containerها Volume کنید، میتوانید از پوشهای بهنام data
استفاده کنید. و برای ایجاد Volume از Relative Path استفاده کنید. برای مثال:
services:
sample_container:
image: "registry.gitlab.com/qio/standard/redis:latest"
network_mode: host
volumes:
- ./data/somefile:/somefile
فراموش نکنید که فایل somefile
را درون پوشهی data
قرارداده و آن را برای داوری ارسال نمایید. برای مثال، پوشهی ارسالی شما برای داوری کوئرا به شکل زیر میتواند باشد:
.
├── data
│ └── somefile
├── docker-compose.yml
├── requirements.txt
├── roles
│ └── redis
│ ├── handlers
│ ├── tasks
│ │ ├── cluster.yml
│ │ └── main.yml
│ └── templates
└── site.yml
درصورتی که علاقهمند به استفاده از پوشهی data
نیستید نیز مشکلی نیست و میتوانید آن را ارسال نکنید.
توجه: سیستم داوری کوئرا بهصورت خودکار فایل docker-compose.yml
را با کامند up
اجرا میکند. شما نیازی به کد یا اسکریپتی برای اجرای این کار ندارید.
ایجاد cluster با Ansible
پس از بالا آمدن containerهای Redis، که سیستم داوری کوئرا بهصورت خودکار آنها را با استفاده از فایل docker-compose.yml
شما بالا میآورد، شما نیازمند ایجاد هماهنگی میان این Nodeهای Redis خواهید بود. برای ایجاد این هماهنگی (یا اصطلاحاً ایجاد cluster)، میتوانید از Ansible استفاده کنید.
پس از بالا آمدن کامل همهی containerهای Redis، فایل site.yml
با دستور ansible-playbook
اجرا خواهد شد. شما میتوانید فایل cluster.yml
را به هر صورتی که نیاز دارید تغییر دهید، بهشکلی که cluster مربوط به Nodeهای Redis ایجاد شود.
توجه: شما در سیستم host، به redis-cli
دسترسی ندارید. در واقع، redis-server
در سیستم host نصب نیست. (راهنمایی: اما در تمامی Nodeها نصب است!)
شرایط نمرهدهی
در صورتی که علاقهمند به استفاده از Ansible برای اجرای کلاستر نیستید، میتوانید از آن استفاده نکنید. تمامی نمرهای که شما دریافت میکنید، مربوط به اجرای درست و دقیق کلاستر خواهد بود. پس اگر میتوانید بدون استفاده از Ansible، یک کلاستر ردیس میان ۶ کانتینر ایجاد کنید، این کار را انجام دهید. بههرحال این امکان برای شما وجود دارد که از Ansible برای اجرای دستوراتی که علاقهمند به اجرای آنها در سیستم host هستید استفاده کنید.
نحوه ارسال پاسخ
شما فقط میتوانید مسیرهای هایلایت شده را تغییر دهید:
.
├── data
│ └── ...
├── docker-compose.yml
├── requirements.txt
├── roles
│ └── redis
│ ├── handlers
│ ├── tasks
│ │ ├── cluster.yml
│ │ └── main.yml
│ └── templates
└── site.yml
در نهایت این پوشه را zip کرده و ارسال کنید. توجه کنید که پس از extract کردن فایل zip شما، باید فایل docker-compose.yml
را ببینیم.
ارسال پاسخ برای این سؤال