آشنایی با مفاهیم کلاسترینگ Clustering
سلام خدمت کاربران وب سایت sudoer
توی این پست قصد دارم کمی در رابطه با کلاسترینگ و به روش های (Best practices) اون صحبت کنم و البته فوکوس اصلی روی بحث تعداد Node های کلاستر و بحث Split brain و quorum خواهد بود و اینکه چرا همیشه در بکارگیری تعداد node های کلاستر از اعداد فرد در کلاسترینگ (مثلا کلاستر 3 نوده) استفاده می شود.
برای این موضوع باید با یک سری از مفاهیم و اصطلاحات آشنایی داشته باشیم:
۱. کلاستر : مجموعه ای از سرور ها و منابع که برای اهدافی همچون High Availability، Load Balancing، Parallel processing و … به صورت یک سیستم واحد دیده می شوند.
۲. Quorum : حد نصاب یا اصطلاحا داشتن اکثریت آرا (Majority of Voters) به این معنا می باشد همیشه در کلاستر چیزی به عنوان Election یا انتخابات برای انتخاب Leader و Master وجود دارد و سیستم یا سمتی از دیتاسنتر که میخواهد به عنوان Master کار کند باید quorum داشته باشد که جلوتر در رابطه با این موضوع صحبت بیشتری خواهیم کرد.
۳. Split brain : زمانی اتفاق می افتد که مثلا شما دارای Availability Zone(AZ) در شبکه ی خود باشید و کلاستر Master شما در AZ 1 و کلاستر Slave شما در AZ 2 باشد و ارتباط بین این دو AZ قطع شود و هر طرف سعی کند که خود را Master کند و بخواهد ارتباطات و کانکشن ها را قبول کند بدون اینکه بداند سیستم در AZ دیگر بالاست و در این موارد و مشابه اینها اصطلاحا می گویند که Split brain رخ داده است یعنی هر دو کلاستر همزمان در حال کار کردن هستند که قانونا فقط یکی از آنها باید فعال باشد و معمولا زمانی رخ می دهد که تعداد نودهای کلاستر در هر دو AZ زوج و یا برابر باشند مثلا ۳ نود در هر طرف که باعث Data inconsistency می شود.
۴. Odd numbers : همیشه میبینیم تعدادی که برای node های موجود در کلاستر به کار می روند فرد هستند، مثلا ۳، ۵ و ۷ و …، حالا چرا ؟ به خاطر اینکه از Split brain جلوگیری کنیم و مزیت این روش این هست که همیشه در یک AZ تعداد نودهای بیشتری داشته باشیم یعنی مثلا زمانی که تعداد نودهای ما ۵ است، یک طرف ۳ نود و طرف دیگر ۲ نود، اما چطور این مدل میتونه از Split brain جلوگیری کنه ؟ با استفاده از فرمول مرتبط با (quorum : n/2 +1)
با این فرض که n تعداد نودهای ما باشه، مثلا برای کلاستری با 5 node عدد quorum میشه عدد سه (5/2 + 1 =3)
یعنی طرفی یا دیتاسنتری یا AZ ای برنده خواهد شد که حداقل دارای ۳ نود باشد. برای درک این موضوع به شکل زیر نگاه کنید :
این عدد میشه quorum، یعنی اگر ارتباط قطع شد و ما دو کلاستر بی خبر از همدیگه داشته باشیم، هر کلاستر برای برنده شدن در انتخابات نیاز به quorum دارند و سمتی که دو node هست (DC2) با علم بر اینکه عدد quorum طبق فرمول برای یک cluster دارای 5 node عدد ۳ می باشد، پس نمیتواند Master شود و اصطلاحا در انتخابات پیروز نخواهد شد و در نتیجه طرف اول که دارای 3 node هست(DC1) برنده هست و کار خواهد کرد بدون اینکه Data inconsistency داشته باشیم. فرض کنید که کلاستر ما دارای 6 node بود و در هر طرف ۳ نود داشتیم، آنوقت چه اتفاقی می افتاد ؟ هر دو طرف quorom داشتند و ما به مشکل می خوردیم. الان برای DC1 عددی که از فرمول استخراج می شود.
توصیه ها اینگونه هست که برای شروع عدد ۳ مناسب و عدد ۵ یکی از بهترین ها و عدد ۷ شاید بزرگترین و بهترین عدد باشد، برای اعداد بزرگتر دلایلی همچون تاخیر در تصمیم گیری و … مطرح گردیده است.
نویسنده : علیرضا ذبیحی