Недавно начал разбираться с работой кластера ES (5.2), и возникли вопросы
Как я понял, для каждого шарда есть всегда один работающая мастер нода, которая делает индексацию документа в шард. Каким образом изменения попадают в реплики (это дифф lucene сегментов или они передаются прямо документом и отдельно индексируются на каждой реплике) ?
как происходит операция optimize ? (опять же только на мастере, и как после этого заменяются файлы индекса на репликах, либо же на каждой реплике отдельно)
что происходит при отключения основного мастера, если например на новом мастере версия документа 1, а на репликах вдруг оказалась версия новее, например 2 ? (при этом все реплики с версией документа новее 'node.master=false', то есть не могут быть выбраны новым мастером)
Буду рад ссылкам где почитать, возможно пропустил при изучении вопроса, или где это можно посмотреть в коде
Почти. Для каждой шарды есть праймари и реплики. Праймари может находится где угодно - ей вовсе не обязательно быть на мастер ноде.
Когда как. При нормальном индексировании, каждый документ индексируется отдельно на праймари и потом на все репликах. При перемещении шард и если например нод упал и потом поднялся - путем пересылки отличных сегментов.
Отдельно на праймари и репликах.
Как я сказал выше, мастер никакого отношения к процессу индексации не имеет. Он просто назначает где шарды будут находится, создает и удаляет индексы и т.д. Индексация всегда происходит сначала на праймари, потом на всех репликах, после этого клиент получает отзыв означающий, что документ проиндексирован. Если в этом процессе нод с праймари падает, то одна из реплик становится праймари и все остальные с ней синхронизируются путем сравнения сегментов.
Первые две про 2.x, но эта часть в 5.x существенно не изменилась - так что будет полезно ознакомится.
Apache, Apache Lucene, Apache Hadoop, Hadoop, HDFS and the yellow elephant
logo are trademarks of the
Apache Software Foundation
in the United States and/or other countries.