Redis sentinel vs clustering


111

Я розумію, що дозорний редакція - це спосіб налаштування HA (висока доступність) серед кількох екземплярів Redis. Як я бачу, є один екземпляр redis, який активно обслуговує запити клієнтів у будь-який момент часу. Є два додаткові сервери в режимі очікування (чекають, коли стався збій, тому один з них може знову діяти).

  • Це марнотрата ресурсів?
  • Чи є кращий спосіб повного використання наявних ресурсів?
  • Чи кластеризація Redis є альтернативою дозорному Redis?

Я вже шукав переглянуту документацію для дозорних та кластеризації , чи може хтось із досвідом пояснити будь-ласка

Конфігурація ведучого раба в дозорці Redis - до відмови

Майстер відмовляється, і раб починає діяти

ОНОВЛЕННЯ

ГАРАЗД. У моєму реальному сценарії розгортання у мене є два сервери, призначені для redis. У мене є інший сервер, на якому працює мій сервер Jboss. Програма, що працює в Jboss, налаштована для підключення до головного сервера redis (M).

Сценарій відмови

В ідеалі, я думаю, коли сервер кеша Master не вдається (або процес Redis виходить з ладу, або помилка машини), програма в Jboss повинна підключитися до Slave-кеш-сервера. Як я можу налаштувати сервери redis для цього?

+--------+          +--------+
| Master  |---------| Slave  |
|         |         |        |
+--------+          +--------+

Configuration: quorum = 1

2
Це також може допомогти - fnordig.de/2015/06/01/redis-sentinel-and-redis-cluster
Ітамар Хабер

Відповіді:


119

По-перше, давайте поговоримо дозорним.

Sentinel управляє відмовою, він не налаштовує Redis для HA. Це важлива відмінність. По-друге, діаграма, яку ви опублікували, насправді є поганою настройкою - ви не хочете запускати Sentinel на тому самому вузлі, що і вузли Redis, якими керує. Коли ви втрачаєте цього господаря, ви втрачаєте і те, і інше.

Щодо "Це марнотрата ресурсів?" це залежить від вашого випадку використання. У цій програмі вам не потрібно три вузла Redis, вам потрібні лише два. Три збільшує ваше надмірність, але це не потрібно. Якщо вам потрібна додаткова надмірність, то це не марно витрачайте ресурси. Якщо ви не потребуєте надмірності, то просто запустіть один екземпляр Redis і назвіть це добре - оскільки працює більше буде "витрачено".

Іншою причиною запуску двох рабів було б розділення читання. Знову ж таки, якщо вам це знадобиться, то це не буде марним.

Щодо "Чи є кращий спосіб повного використання наявних ресурсів?" ми не можемо відповісти на це, оскільки це дуже залежить від конкретного сценарію та коду. Якщо сказати, якщо об'єм даних для зберігання "невеликий", а частота команд не дуже велика, то пам'ятайте, що вам не потрібно присвячувати хост Redis.

Тепер для "Чи Redis кластеризує альтернативу Redis sentinel?". Це дійсно повністю залежить від вашого випадку використання. Redis Cluster - це не рішення, яке стосується НА, - це багаторазове рішення, яке не відповідає програмі. Якщо ваша мета - просто НА, то вона, ймовірно, не підходить для вас. Redis Cluster має обмеження, особливо щодо операцій з декількома ключами, тому це не обов'язково просто "просто використовувати кластер".

Якщо ви думаєте, що три хости, які працюють з Redis (і три запущені дозорці), є марними, ви, швидше за все, вважаєте, що Кластер буде ще більшим, тому що для цього потрібно більше ресурсів.

Питання, які ви задавали, напевно, занадто широкі та ґрунтуються на думці, щоб вижити, як написано. Якщо у вас є конкретний випадок / проблема, з якою ви працюєте, будь ласка, оновіть її, щоб ми могли надати конкретну допомогу та інформацію.

Оновлення для специфікацій:

Для правильного управління відмовою у вашому сценарії я б працював з 3 дозорними, один працює на вашому сервері JBoss. Якщо у вас є 3 вузли JBoss, тоді перейдіть по одному на кожного. У мене був би розділ Redis (master + slave) на окремих вузлах, і нехай дозорний керує відмовою.

Звідси йдеться про підключення JBoss / Jedis для використання Sentinel для управління інформацією та з'єднаннями. Оскільки я не використовую те, що швидкий пошук виявляється, що джедіс має підтримку, просто потрібно його правильно налаштувати. Деякі приклади, які я знайшов, перебувають у пошуках прикладу джедіса з Sentinel та https://github.com/xetorthio/jedis/isissue/725, в якому йдеться про JedisSentinelPoolмаршрут використання басейну.

Коли Sentinel виконує відмову, клієнти будуть відключені, і Джедіс буде (повинен?) Впоратися з повторним підключенням, запитуючи Сентинелів, хто поточний господар.


6
Привіт @ Реальний законопроект, ви можете, будь ласка, детальніше розповісти про те, що "Sentinel управляє аварійним режимом, він не налаштовує Redis для HA". У офіційному документі ( redis.io/topics/sentinel ) написано: "Redis Sentinel забезпечує високу доступність для Redis".
Сяо Пен - ZenUML.com

1
HA Redis вимагає декількох штук, щоб бути HA. Sentinel обробляє лише одну деталь: відмову. Він не встановлює реплікацію, не забезпечує і кінцеву точку HA. Він забезпечує виявлення сервісу, щоб клієнт міг знати, з ким поговорити, щоб потрапити до майстра. Це не налаштовує Redis для HA.
Справжній Білл

5
Заяви тут просто не відповідають дійсності - redis із дозорною НЕ управляє реплікацією від первинних до резервних вузлів. Після відмови майстер змінюється, а реплікація переміщується до будь-яких інших вузлів у нового ведучого. Відновлений вузол стає вторинним сайтом як ціль для реплікації. Не вистачає того, що КЛІЄНТ повинен поговорити з дозорним, щоб отримати інформацію про будь-які зміни в державі. Тож Sentinel IS - це рішення високої доступності.
JasonG

6
Я сказав, що це не налаштовує реплікацію, і це правда. Ви налаштовуєте реплікацію Redis, встановлюючи раби. Тоді дозорний виявить це та керує відмовою. Sentinel не може налаштувати реплікацію, оскільки вона лише управляє наявними налаштуваннями реплікації. Спробуй це. Увімкніть два незалежних сервери Redis і отримайте дозорну службу, щоб зробити один підлеглий іншому, не використовуючи підлеглого безпосередньо. Це не буде працювати. Також він не може додавати нових рабів. Таким чином, це робить. Він налаштував реплікацію.
Реальний законопроект

35

Рекомендація скрізь - починати з непарної кількості примірників, не використовуючи два чи кратні два. Це було виправлено, але дозволимо виправити деякі інші моменти.

По-перше, сказати, що Sentinel забезпечує відмову без НА, помилково. Якщо у вас є відмова, у вас є HA з додатковою перевагою стану програми. Відмінність полягає в тому, що ви можете мати HA в системі без реплікації (це HA, але це не вірогідно).

По-друге, запуск дозорного на тій же машині, що і його цільовий екземпляр redis, не є «поганою установкою»: якщо ви втратите дозорну або ваш екземпляр redis або всю машину, результати однакові. Це, мабуть, тому кожен приклад таких конфігурацій показує, як вони працюють на одній машині.


6
Насправді, схоже, є помилка, коли Sentinel не зможе ініціювати вибори в налаштуваннях "дозорного по екземпляру", і я бачив це вже багато разів тут, в МС та в індивідуальних консультаціях. Переміщення дозорних серверів із сервера Redis фіксувало це щоразу. Отже, так це зробити - це погана установка, оскільки вона вийде з ладу в той самий момент, коли це потрібно. Приклад показує це так, оскільки їх не пишуть люди з великим досвідом роботи, і це простіше.
Реальний законопроект

3
Яка помилка це, чи є звіт про помилку? Чи знаєте ви, чи все ще існує?
sivann

Чи є подібні проблеми з розміщенням дозорних на машинах додатків?
OrangeDog

31

Це не пряма відповідь на ваше запитання, але подумайте, це корисна інформація для новачків Redis, як я. Також це запитання з'являється як перше посилання в google при пошуку "Кластер Redis vs sentinel".

Redis Sentinel - це рішення рішення про високу доступність Redis ... Це не має нічого спільного з кластером Redis і призначене для використання людьми, яким Redis Cluster не потрібен, а просто способом автоматичного відключення, коли майстер екземпляр працює неправильно.

Взято з проекту проекту Redis Sentinel 1.3

Це не очевидність, коли ви новачок у Redis та впроваджуєте аварійне рішення. Офіційні документації про дозорну та кластеризацію не порівнюють одна з одною, тому важко вибрати правильний шлях без читання тонн документацій.


10

Це моє розуміння після удару головою по всій документації.

Sentinel - це своєрідне гаряче резервне рішення, коли раби повторюються та готові до просування в будь-який час. Однак він не підтримує жодних записів на багато вузлів. Раби можуть бути налаштовані для операцій зчитування. НЕ правда, що Sentinel не надасть HA, він має всі особливості типового активно-пасивного кластера (хоча це не правильний термін для використання тут).

Кластер Redis - це більш-менш розповсюджене рішення, що працює над осколками. Кожен фрагмент даних поширюється між вузлами господарів і рабів. Мінімальний коефіцієнт тиражування 2 гарантує, що у вас є два активних черепашки для головного та рабів. Якщо ви знаєте заточування в Монго чи Еластичному дослідженні, наздогнати їх буде легко.


6

Redis може працювати в розділеному кластері (з багатьма господарями і рабами цих господарів) або в режимі одиночного примірника (одиночний майстер з репліками-репліками). Посилання тут говорить:

При використанні Redis в режимі одиночного примірника, в якому один сервер Redis управляє всією нероздільною базою даних, Redis Sentinel використовується для управління його доступністю

Тут також сказано:

Кластер Redis, в якому дані розподіляються між декількома первинними екземплярами, сам керує доступністю і не потребує додаткових компонентів.

Таким чином, HA може бути забезпечений у двох згаданих сценаріях. Сподіваюсь, це усуне сумніви. Кластер Redis і дозорні не є альтернативними один одному. Вони просто використовуються для забезпечення ХА в різних випадках майстра з нерозподіленими або нерозподіленими елементами.


4

Redis Sentinel виконує відмову просування реплік, коли вони бачать, що майстер вниз. Зазвичай ви хочете непарну кількість дозорних вузлів. Для прикладу одного майстра та однієї репліки слід використовувати 3 дозорних, щоб не було консенсусу щодо рішення. В ідеалі 3-й дозорний знаходиться на 3-му сервері, щоб рішення не було перекошене (залежно від відмови). Sentinel піклується про зміну налаштувань конфігурації master / replica на ваших вузлах, щоб просування та синхронізація відбувалися у правильному порядку, і ви не перезаписувати дані, ввівши старий невдалий майстер, який тепер містить старі дані.

Після того, як ваші дозорні вузли налаштовані на виконання відмов, вам потрібно переконатися, що ви вказуєте на правильний екземпляр. Дивіться приклад конфігурації HAProxy для цього . HAProxy здійснює перевірку стану здоров’я та вказує на нового господаря, якщо стається збій.

Скупчення дозволить вам масштабувати горизонтально і може допомогти впоратися з великими навантаженнями. Для налаштування та налаштування спереду потрібно трохи працювати.

Існує вилка з відкритим кодом Redis, «KeyDB», яка позбавила потребу в дозорних вузлах з можливістю активної репліки. Це дозволяє вузлу репліку приймати читання та запис. У разі відмови HAProxy зупиняє читання / запис з невдалим вузлом і просто використовує залишився активний вузол, який уже синхронізований. Тимчасове позначення дає можливість невдалим вузлам автоматично приєднатись та повторно синхронізувати, не втрачаючи даних, коли вони повернуться в Інтернет. Налаштування просте, і для більш високого трафіку вам не потрібні спеціальні налаштування заздалегідь, щоб направляти зчитування на вузол репліки та читати / записувати в майстер. Дивіться приклад активної реплікації тут . KeyDB також є багатопотоковою, що для деяких додатків може бути альтернативою кластеризації, але насправді залежить від ваших потреб.

Також є приклад налаштування кластеризації вручну та за допомогою інструменту create-cluster . Це ті ж дії, якщо ви використовуєте Redis (замініть 'keydb' на 'redis' в інструкції)


1

Додаткова інформація до вищезазначених відповідей

Клад Редіс

  • Однією з головних цілей кластера Redis є рівномірний / рівномірний розподіл навантаження ваших даних шляхом різкості

  • Redis Cluster не використовує послідовне хешуваннявання, а іншу форму шейдування, де кожна клавіша є концептуальною частиною того, що називається хеш-слотом

  • У кластері Redis є 16384 хеш-слотів, кожен вузол кластера Redis відповідає за підмножину хеш-слотів, тому, наприклад, у вас може бути кластер з 3-ма вузлами, де:

    Вузол A містить хеш-слоти від 0 до 5500, Вузол B містить хеш-слоти від 5501 до 11000, Вузол C містить хеш-слоти від 11001 до 16383

Це дозволяє нам легко додавати та видаляти вузли в кластері. Наприклад, якщо ми хочемо додати новий вузол D, нам потрібно перемістити деякий хеш-слот з вузлів A, B, C в D

  • Кластер Redis підтримує структуру master-slave, ви можете створювати раби A1, B1, C2 разом з майстрами A, B, C під час створення кластера, тому коли майстер B знижується, раб B1 отримує підвищення якості майстра

При використанні Redis Cluster не потрібно додаткового поводження з відмовою, і вам точно не слід вказувати на випадки Sentinel на жоден з вузлів кластера.

Тож у практичному плані, що ви отримуєте з Redis Cluster?

1. Можливість автоматично розділяти ваш набір даних на кілька вузлів.

2. Можливість продовжувати операції, коли підмножина вузлів зазнає збоїв або не може спілкуватися з рештою кластеру.

Redis Sentinel

  • Redis підтримує декілька рабів, що реплікують дані з головного вузла.
  • Це забезпечує резервну копію даних у головному вузлі.
  • Redis Sentinel - система, призначена для управління господарем і рабом. Він працює як окрема програма. Мінімальна кількість дозорних, необхідних в ідеальній системі, - 3. Вони спілкуються між собою і переконуються, що Майстер живий, якщо не живий, вони просунуть одного з рабів як господаря, тож пізніше, коли мертвий вузол вивернеться, це буде виступаючи рабом нового господаря
  • Кворум може бути налаштований. В основному це кількість дозорних, з якими потрібно погодитись, коли господар знижується. N / 2 +1 має погодитися. N - кількість вузлів у Pod (зауважте, що ця установка називається стручком і не є кластером)

Тож у практичному плані що ви отримуєте з Redis Sentinel?

Він переконається, що Майстер завжди доступний (якщо господар піде з ладу, раб буде підвищений як господар)

Довідка:

https://fnordig.de/2015/06/01/redis-sentinel-and-redis-cluster/

https://redis.io/topics/cluster-tutorial

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.