Як розподіляються слоти між вузлами?
У Redis Cluster усі ключі розподіляються по 16384 хеш-слотах, і ці слоти діляться між master-вузлами.
1. Хеш-слоти
-
Усього 16384 слоти (0-16383).
-
Кожен ключ потрапляє в слот за формулою:
javascriptCRC16(key) % 16384 -
Слот визначає, на якому master зберігається ключ.
2. Розподіл слотів між master-вузлами
-
Коли кластер створюється, слоти рівномірно розподіляються між усіма master-вузлами. Приклад для 3 master'ів:
javascriptmaster1 → слоти 0-5460 master2 → слоти 5461-10922 master3 → слоти 10923-16383 -
Якщо додається новий master, частина слотів переноситься з наявних master'ів на новий.
3. Репліки
- Репліки не отримують слоти напряму.
- Вони просто копіюють дані свого master.
- Тому запит на читання до репліки працює лише з даними того master, якому вона підпорядкована.
4. Перерозподіл при масштабуванні
- Redis Cluster підтримує resharding:
- частина слотів переміщується з перевантаженого master на новий;
- дані для цих слотів переносяться автоматично;
- клієнти отримують сповіщення про нове розташування слотів через
MOVED.
5. Підсумок
- Слоти - це логічний поділ ключів.
- Кожен master обслуговує певний діапазон слотів.
- Репліки копіюють слоти свого master.
- Додавання нових вузлів чи видалення старих супроводжується перерозподілом слотів для балансування навантаження.
Такий механізм забезпечує горизонтальне масштабування, рівномірне навантаження й відмовостійкість.
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.