فاجعه‌ی دوج‌کوین


ایلان‌ماسک برای ارسال یک ماهواره به مدار زمین، نیازمند یک کلاستر ردیس می‌باشد؛ اما او، پس از ریزش شدید dogecoin، به‌شدت بی‌پول شده است و نمی‌تواند هزینه‌ی اجاره‌ی چند سرور ابری برای ایجاد یک کلاستر ردیس را پرداخت کند. بنابراین می‌خواهد یک کلاستر ردیس را بر روی چند docker container با کمک Ansible بالا بیاورد. او در این مسیر نیازمند کمک شماست.

برای دانلود پروژه‌ی اولیه روی این لینک کلیک کنید.

کانتینرهای Redis🔗

در ابتدای کار، برای ایجاد کانتینرهای ردیس، نیاز است که فایل docker-compose.yml را تکمیل کنید. توجه داشته باشید که شما اجازه‌ی build کردن یک Image جدید نخواهید داشت و باید از Imageهای استاندارد استفاده کنید. به‌طور خاص، برای Redis می‌توانید از Image زیر استفاده کنید:

registry.gitlab.com/qio/standard/redis:latest
Plain text

توجه داشته باشید که باید فایل 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
Plain text

توجه کنید، آن کانتینری که نامش با 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
Plain text

ایجاد Volume🔗

در صورتی‌که نیاز دارید فایل یا مسیری را به درون هریک از containerها Volume کنید، می‌توانید از پوشه‌ای به‌نام data استفاده کنید. و برای ایجاد Volume از Relative Path استفاده کنید. برای مثال:

extensionFromNamedocker-compose.yml
services:
  sample_container:
    image: "registry.gitlab.com/qio/standard/redis:latest"
    network_mode: host
    volumes:
      - ./data/somefile:/somefile
YAML

فراموش نکنید که فایل somefile را درون پوشه‌ی data قرارداده و آن را برای داوری ارسال نمایید. برای مثال، پوشه‌ی ارسالی شما برای داوری کوئرا به شکل زیر می‌تواند باشد:

.
├── data
│   └── somefile
├── docker-compose.yml
├── requirements.txt
├── roles
│   └── redis
│       ├── handlers
│       ├── tasks
│       │   ├── cluster.yml
│       │   └── main.yml
│       └── templates
└── site.yml
Plain text

درصورتی که علاقه‌مند به استفاده از پوشه‌ی 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
Plain text

در نهایت این پوشه را zip کرده و ارسال کنید. توجه کنید که پس از extract کردن فایل zip شما، باید فایل docker-compose.yml را ببینیم.

ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.