
کلاستر کردن ردیس (Redis Clustering) روشی برای توزیع دادهها و بار کاری در چندین نمونه (instance) از ردیس است. این کار به منظور افزایش مقیاسپذیری (scalability)، دسترسپذیری بالا (high availability) و تحمل خطا (fault tolerance) انجام میشود. به طور کلی، دو روش اصلی برای کلاستر کردن ردیس وجود دارد:
روشهای اصلی کلاستر کردن ردیس
۱. ردیس کلاستر (Redis Cluster)
این روش، راهحل توزیعشدهی داخلی خود ردیس است که از نسخه ۳.۰ به بعد ارائه شده است. در این روش:
- شاردینگ (Sharding): دادهها به صورت خودکار بین چندین گره (node) ردیس توزیع میشوند. هر گره مسئول بخشی از دادهها است. این کار با استفاده از مفهومی به نام اسلاتهای هش (hash slots) انجام میشود. در مجموع ۱۶۳۸۴ اسلات هش وجود دارد و هر گره اصلی (master node) بخشی از این اسلاتها را مدیریت میکند.
- عدم نیاز به پروکسی (No Proxy Needed): کلاینتها مستقیماً به گره صحیح متصل میشوند و نیازی به یک واسط یا پروکسی برای هدایت درخواستها نیست (اگرچه برخی کتابخانههای کلاینت ممکن است از این قابلیت برای کشف گرهها استفاده کنند).
- دسترسپذیری بالا (High Availability): هر گره اصلی میتواند یک یا چند گره پشتیبان (replica node) داشته باشد. در صورت از کار افتادن گره اصلی، یکی از گرههای پشتیبان به صورت خودکار به عنوان گره اصلی جدید انتخاب میشود.
- مقیاسپذیری خطی (Linear Scalability): با افزودن گرههای جدید، میتوان ظرفیت و توان عملیاتی کلاستر را به صورت خطی افزایش داد.
وقتی کلاینت میخواهد یک کلید را بخواند یا بنویسد، ابتدا هش آن کلید محاسبه میشود تا مشخص شود کلید به کدام اسلات هش تعلق دارد. سپس کلاینت درخواست را به گرهای که مسئول آن اسلات هش است، ارسال میکند. اگر کلاینت به گره اشتباهی متصل شود، آن گره، کلاینت را به گره صحیح هدایت میکند.
۲. ردیس سنتینل (Redis Sentinel)
ردیس سنتینل یک سیستم نظارت و مدیریت برای نمونههای ردیس است که دسترسپذیری بالا را فراهم میکند. سنتینل به طور مستقیم دادهها را شارد نمیکند، بلکه بر روی تکثیر (replication) و جابجایی خطا (failover) تمرکز دارد.
- نظارت (Monitoring): چندین فرآیند سنتینل به طور مداوم گرههای اصلی و پشتیبان ردیس را نظارت میکنند تا از سلامت آنها اطمینان حاصل کنند.
- اطلاعرسانی (Notification): در صورت بروز مشکل در یکی از گرهها، سنتینل میتواند مدیر سیستم یا سایر برنامهها را مطلع کند.
- جابجایی خودکار خطا (Automatic Failover): اگر یک گره اصلی از کار بیفتد، سنتینلها با یکدیگر به توافق میرسند و یکی از گرههای پشتیبان را به عنوان گره اصلی جدید انتخاب میکنند. سپس پیکربندی سایر گرههای پشتیبان و کلاینتها را بهروز میکنند تا به گره اصلی جدید متصل شوند.
- مدیریت پیکربندی (Configuration Management): کلاینتها به جای اتصال مستقیم به گره اصلی ردیس، به سنتینلها متصل میشوند و آدرس گره اصلی فعلی را از آنها دریافت میکنند.
نکته: معمولاً ردیس سنتینل همراه با تکثیر دادهها (master-replica replication) استفاده میشود. در این حالت، یک گره اصلی (master) وجود دارد که عملیات نوشتن روی آن انجام میشود و دادهها به یک یا چند گره پشتیبان (replica) تکثیر میشوند. گرههای پشتیبان میتوانند برای عملیات خواندن استفاده شوند تا بار از روی گره اصلی برداشته شود.
کدام روش را انتخاب کنیم؟
- ردیس کلاستر: اگر به مقیاسپذیری افقی (horizontal scaling) برای حجم داده بسیار زیاد و توان عملیاتی بالا نیاز دارید و میخواهید دادهها به صورت خودکار بین چندین گره توزیع شوند، ردیس کلاستر انتخاب بهتری است.
- ردیس سنتینل: اگر اولویت اصلی شما دسترسپذیری بالا و جابجایی خودکار خطا برای یک مجموعه داده است که روی یک گره اصلی قرار دارد (و به گرههای پشتیبان تکثیر میشود) و نیازی به شاردینگ داخلی توسط خود ردیس ندارید، سنتینل مناسبتر است. میتوان از چندین مجموعه master-replica که هر کدام توسط سنتینل مدیریت میشوند، برای نوعی شاردینگ در سطح برنامه استفاده کرد.
در برخی موارد، میتوان از ترکیب این دو روش یا راهحلهای مبتنی بر پروکسی نیز استفاده کرد، اما ردیس کلاستر و ردیس سنتینل دو رویکرد اصلی و استاندارد برای کلاستر کردن ردیس محسوب میشوند.




