در مجموعه VSphere قابلیتی به نام Distributed Resource Scheduler وجود دارد که وظیفه مدیریت نحوه قرار گیری VM ها بر روی Host ها را بر عهده دارد و این فرآیند را بصورت خودکار انجام می دهد، DRS وظیفه متعادل سازی نحوه استفاده از منابع را بر عهده دارد اما بسیاری از مواقع پیش می آید که DRS نمی تواند نیاز ما را برآورده کند، برخی از فرآیند های کاری هستند که بایستی بصورت دستی انجام شوند و همچنین برخی اوقات برخی VM ها وجود دارند که یک سری وابستگی بین آنها و VM دیگر و یا Host دیگر وجود دارد و با استفاده کردن از DRS ممکن است این وابستگی ها دچار اختلال شوند. برای مثال ممکن است دو VM با هم تبادل اطلاعات بسیار زیادی داشته باشند و پیشنهاد می شود که این VM ها هر دو بر روی یک Host قرار بگیرند تا ترافیک شبکه ما دچار Load نشود، در چنین مواردی است که ما می توانیم از مکانیزمی به نام Affinity در VSphere استفاده کنیم. در واقع Affinity یا Affinity Rule یک سری تنظیمات در VSphere است که رابطه بین دو یا چند VM را با سیستم Host که بر روی آن قرار گرفته است تعریف می کند.
Affinity Rule و Anti-Affinity Rule ها در واقع قوانینی هستند که توسط VSphere Hypervisor تعریف می شوند تا موجودیت هایی مثل VM ها یا Host ها را به یکدیگر وصل کنیم یا از همدیگر جدا کنیم، این قوانین بصورت Required یا الزامی و Preferred یا ترجیحی تعریف می شوند تا ترافیک شبکه شما را مدیریت کنند و از به وجود آمدن ترافیک زیاد در شبکه جلوگیری کنند و با اینکار یک تعادل بین ماشین های مجازی ایجاد می کنند، برای مثال اگر دو ماشین مجازی با همدیگر ارتباط نزدیکی دارند و ترافیک زیادی بین انها رد و بدل می شود و بهتر است به جای اینکه در شبکه ترافیک را رد و بدل کنند، آنها را با استفاده از یک Affinity Rule بصورت VM-VM بر روی یک Host همیشه نگهداری می کنیم و ترافیک بین این دو ماشین مجازی دیگر در شبکه رد و بدل نمی شود. برخلاف این ممکن است دو ماشین مجازی داشته باشیم که به شدت منابع CPU و RAM را استفاده می کنند و در اینجا می توانیم یک Anti-Affinity Rule ایجاد کنیم که این دو ماشین هیچگاه بر روی یک Host قرار نگیرند و همیشه از همدیگر جدا بر روی Host های مختلف باشند، با این روش دیگر هیچ Host ای Overhead اضافه نخواهد داشت.
Affinity Rule و Anti-Affinity rule ها در سه لایه می توانند اعمال شوند، در بین VM ها و Host ها، در بین VM ها و VM ها و در نهایت بین VM ها و VM ها بصورت Anti-Affinity، یکی از نکاتی که در هنگام طراحی Affinity و Anti-Affinity Rule ها بایستی به آن دقت کنید همپوشانی یا تداخل پیدا کردن بین Rule ها است، برای مثال ممکن است شما یک Anti-Affinity Rule ممکن است برای دو VM ایجاد کنید در محیط VSphere و در همان لحظه ممکن است هر دوی این VM ها با یک VM دیگر Affinity Rule داشته باشند بر روی یک Host مشترک که در اینجا داخل یا همپوشانی ایجاد می شود. در چنین مواردی است که Alert ها و Alarm های رویدادهای VSphere مدیران را از بروز چنین مشکلاتی آگاه می کند. بهتر است هر کدام از این سه Rule را بصورت تفکیک شده برای شما تشریح کنیم، به موارد زیر دقت کنید:
کاربرد Affinity Rule بصورت VM/VM
برخی اوقات ممکن است شما بخواهید که دو یا چند VM حتما بر روی یک Host میزبانی شوند و ترافیک آنها در شبکه ارسال نشود. در چنین مواردی که دو یا چند VM وابستگی های زیادی به هم دارند، اگر بصورت اتفاقی یکی از آنها به یک Host دیگر vMotion شود بایستی VM دوم هم به همان Host ای که VM قبلی vMotion شده است vMotion شود تا کار به درستی انجام شود. این سناریو بسیار محتمل است، فرض کنید که در یک سازمان شما یک سرور Database و یک سرور Application دارید که هر دوی آنها با هم ارتباط شدیدی دارند، اگر آنها را بر روی یک Host نگهداری کنید طبیعتا باعث کاهش ترافیک شبکه خواهد شد و سرعت تبادل اطلاعات بین آنها نیز بسیار زیادتر از شبکه خواهد بود. در چنین مواقعی ما بین این دو VM یک Affinity Rule بصورت VM/VM ایجاد می کنیم که در صورت انتقال یکی از VM ها به Host دیگر، VM دیگر هم به همان ترتیب منتقل شود.
کاربرد Affinity Rule بصورت Host/VM
برخی اوقات ارتباط بین چند VM اصلا مهم نیست اما شما باید مطمئن باشید که برخی از فرآیند های کاری و Workload ها حتما بر روی یک Host خاص انجام می شود. برخی از شرکت ها برایشان خیلی مهم است که بدانند سرور vCenter آنها بر روی کدام Host قرار دارد یا در سناریویی محتمل تر ممکن است شما Application هایی داشته باشید که دارای قفل های سخت افزاری باشند و در صورتیکه این سرور Application به سرور دیگری vMotion شود دیگر قادر به سرویس دهی نمی باشد. شما می توانید در چنین مواقعی Affinity Rule ای ایجاد کنید که VM یا VM های مربوطه همیشه بر روی یک Host مشخص قرار داشته باشند و هیچگاه به Host های دیگر شبکه Migrate نشوند. البته نقطه ضعف اینگونه موارد این است که در صورتیکه Host مربوطه دچار مشکل شود قطعا سرور مورد نظر شما نیز دچار مشکل خواهد شد و از مدار خارج می شود. دقت کنید که همیشه هم ممکن است قفل سخت افزاری در کار نباشد اما لایسنس نرم افزار بر اساس پارامترهای سخت افزاری Host تعریف شود.
کاربرد Anti-Affinity Rule بصورت VM/VM
برخی اوقات پیش می آید که ما نمی خواهیم به هیچ عنوان دو سرور VM بر روی یک Host در کنار هم قرار بگیرند. برای مثال شما در سازمان خودتان حداقل دو عدد Domain Controller نیاز دارید یا حداقل دو عدد DHCP سرور یا DNS سرور یا سرورهایی که با هم Replication دارند مثل SQL سرور، در چنین مواردی شما برای ایجاد Redundancy این جداسازی را انجام داده اید و اگر بر روی یک Host قرار بگیرند با بروز مشکل برای این Host همه نقشه های شما بی فایده خواهد شد. یا از طرفی برخی اوقات سرورهایی وجود دارند که بار کاری و Load بسیار زیادی بر روی CPU ها دارند و قطعا در یک سازمان شما چند عدد از این سرورها را در اختیار خواهید داشت. در چنین مواردی با استفاده از یک Anti-Affinity Rule می توانید به vSphere بگویید که به هیچ عنوان این سرورها را بر روی یک Host قرار ندهد.
نویسنده: محمد نصیری