LINUX.ORG.RU
ФорумAdmin

Выборы «главного» в равноценном кластере.

 ,


0

2

Есть MariaDB + Galera на трёх тачках. Всё отлично, только вот понадобилось по крону запускать скрипт который будет в базе ковыряться и что-то там менять. Разумеется его надо запускать на одной машине, а не на трёх сразу. При этом надо сохранить FT и HA, т.е. если сдохла тачка на которой скрипт запускался по крону, то эти обязанности должна взять на себя другая машина.

Собственно вопрос - есть ли какой-нибудь маленький простенький демон который занимается исключительно «выборами» «главной» машины, и при сдыхании оной выборы моментально происходят заново. Собственно достаточным результатом работы этого демона будет наличие какого-нибудь файлика из которого на произвольной машине в произвольный момент можно будет определить «главная» она сейчас или нет. Ну или наличие какой-нибудь утилитки дающей тот же результат.

Галера равноценная и весьма прохладно относится к подыханию одной из машин, так что использовать для этого саму галеру вряд-ли выйдет.

Может есть чо, и велосипедить ничего не надо?

★★★★★

Берешь таблицу какую-нибудь в галере с уникальным ключом и в начале запуска скрипта пихаешь туда строку. Если запихнулась - работаем, если ошибка уникального ключа - отдыхаем. Эдакая наколеночная блокировка. После выполнения строку удаляем.

blind_oracle ★★★★★
()
Ответ на: комментарий от blind_oracle

Ну это будет «план Б». :) Вдруг всё-же еззь маленький, лёгонький и простенький специально обученный под это дело демон?

Пихание строки в таблицу в общем-то штука годная, можно и табличку пытаться лочить, например, но что будет если залочившая табличку или пихнувшая строку машина сдохнет и не разлочит табличку / не удалит строку? Какие-то таймауты надо придумывать и всё такое.

Stanson ★★★★★
() автор топика

есть ли какой-нибудь маленький простенький демон

Zookeeper (:

А ещё можно выбирать ноду по наименьшему или наибольшему ID ноды (из списка подключенных к кластеру нод).

MrClon ★★★★★
()
Ответ на: комментарий от MrClon

Zookeeper (:

Вот после ознакомления с этим и возникло желание задать вопрос про маленький и лёгкий. :)

А ещё можно выбирать ноду по наименьшему или наибольшему ID ноды (из списка подключенных к кластеру нод).

Ну в галере все ноды равноценны и primary. Так-то можно вообще пинговать все ноды и выбирать с наибольшим живым IP, например. Просто это как-то уж совсем в лоб, со всеми вытекающими.

Stanson ★★★★★
() автор топика
Ответ на: комментарий от Stanson

можно и табличку пытаться лочить

Галера не умеет LOCK TABLES

но что будет если залочившая табличку или пихнувшая строку машина сдохнет и не разлочит табличку / не удалит строку?

Да, это нужно обрабатывать, но ничего сложного нет.

Вдруг всё-же еззь маленький, лёгонький и простенький специально обученный под это дело демон?

Есть такая буква: http://dkron.io/

blind_oracle ★★★★★
()
Ответ на: комментарий от Stanson

Так-то можно вообще пинговать все ноды и выбирать с наибольшим живым IP, например

Можно. А можно на каждой ноде по крону запускать скрипт который получает у локальной ноды галеры список uuid доступных нод кластера в который та входит и uuid самой ноды, проверяет является-ли её uuid наименьшим (или наибольшим) в этом списке и если является то запускает целевой скрипт. Опционально добавить проверку не откололась-ли локальная нода от кластера (нужность зависит от того насколько адекватно галера справляется с последствиями сплитбрэйна). Всё распределённо и децентрализованно.

Просто это как-то уж совсем в лоб, со всеми вытекающими.

Какими например? На ум приходит только то что в норме скрипт всегда запускается на одной и той-же машине.

MrClon ★★★★★
()

По идее можно на машине где запускается задача поднять haproxy в который загнать айпишники всех нод galera cluster. При подключении haproxy будет пинать коннект на первую живую ноду.

iron ★★★★★
()

Что-то всё очень-очень плохо в этой области. Жаба во все поля и т.п. Видимо придётся велосипедить свой cron который читает задачи из таблички. Или допилить обычный cron чтобы умел в SQL и маркировать строчки с задачами как «уже выполняется» и «выполнено».

Stanson ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.