Репликация beanstalkd для высокой доступности

15

Название говорит обо всем.

Кто-нибудь знает способ репликации beanstalkd так, чтобы, если сервер beanstalk вышел из строя, другие рабы могли вступить во владение?

Вот один из подходов, о котором я подумал: я мог бы заставить beanstalk записать свой binlog (с ключом -b) в общую папку, а затем каким-то образом запустить вторичный / резервный сервер, запускающий beanstalkd, если первичный сбой.

Там должен быть лучший способ, хотя.

Джош Нанкин
источник

Ответы:

5

Поскольку он записывает на диск через binlog, я думаю, вы могли бы сделать что-то похожее на то, что обычно делают администраторы MySQL: сердцебиение с DRBD ( пример здесь).

Однако в последний раз, когда я пытался использовать heartbeat, он не поддерживал многоадресную проверку между узлами, а это означало, что было более или менее невозможно работать в облачной / VPS-инфраструктуре (AWS, Linode, Slicehost и т. Д.). Фактически, большинство служб кластеризации используют многоадресную рассылку. Возможно, это уже не так, но об этом нужно знать. Возможно, вы сможете использовать keepalived для обеспечения отработки отказа на основе ip, который также поддерживает только многоадресную рассылку, НО есть исправление, доступное через Вилли Тарро (автор HAProxy ) для добавления поддержки одноадресной рассылки . Я лично проверил это на паре серверов Linode VPS, и keepalived способен переключать общий IP-адрес в случае сбоя главного сервера.

Одна вещь, которую вы можете сделать, которая, вероятно, менее оптимальна, - это запись заданий на несколько серверов beanstalkd (также называемых разделами). Если один из них выйдет из строя, пусть ваше приложение обнаружит это и запишет в другой экземпляр (ы). Ваши работники должны будут интеллектуально опрашивать каждый из экземпляров beanstalkd и иметь возможность игнорировать мертвые экземпляры. Поскольку вы ведете журнал, восстановление экземпляра должно быть таким же простым, как его перезапуск, и приложение / работники обнаружат это и продолжат как обычно (и начнут обрабатывать задания в только что запущенном экземпляре). Я явно упрощаю процесс, но это еще один способ справиться с этим.

Андрей
источник
1
Corosync поддерживает одноадресную передачу и является инструментом кластеризации по умолчанию в дистрибутивах на основе Redhat.
Теренс Джонсон
Спасибо, не знал о Corosync. Будем иметь в виду, для будущих проектов.
Андрей