2016-08-08 3 views
0

Я использую поваренную книгу Elasticsearch.Можно ли динамически построить кластер Elastic с одним списком запуска?

Моя конечная цель:

  • Есть 4 или более ранее развернуты виртуальные машины, которые сконфигурировано для запуска ES
  • я применить тот же рецепт/runlist всех этих узлов и устанавливает и конфигурирует ES для меня

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

Если узлы предварительно сконфигурированы с моими желаемыми именами хостов и IP-адресами, я могу использовать атрибуты узлов для подключения этой информации в конфигурациях. Могу ли я иметь рецепт случайным образом выбрать 3 из четырех или более узлов, чтобы стать первичными осколками?

+0

В качестве примечания стороны: не путайте кулинарию из сообщества с Эластикой с ограничением от самого шеф-повара. Вы всегда можете писать программное обеспечение, чтобы делать то, что хотите, если сможете его описать достаточно хорошо. – coderanger

+0

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

+0

Итак, по крайней мере, мне нужно было бы вести список IP-адресов узлов и убедиться, что они синхронизированы с IP-адресами реальных узлов? – red888

ответ

2

Это, безусловно, возможно. Там может быть более эффективная практика (если так, пожалуйста, поделитесь), но я смог создать динамический кластер, подобный этому, используя Chef search и теги (хотя я писал кулинарию для консула, а не ES).

Поиск шеф-повара для любых узлов, помеченных как основной главный ES. Если он не найден, сходите текущий узел в качестве мастера. Если мастер существует, сходите текущий узел как подчиненный.

Результаты поиска вашего шеф-повара будут содержать всю информацию о узле для ES-мастера. Вместо того, чтобы поддерживать предварительно сконфигурированные IP-адреса и имена хостов, вытащите их из объекта узла результатов поиска (позволяет масштабировать).

Следующий фрагмент предполагает, что у вас есть рецепт master.rb и рецепт slave.rb.

es_servers = search(
:node, 
"tags:elasticsearch AND chef_environment:#{node.chef_environment}" 
) 

if es_servers.length < 1 || tagged?('elasticsearch') 

    # Configure this node with as ES master 
    # .. 
    include_recipe 'es::master' 

    # tag this node as a server 
    tag('elasticsearch') unless tagged?('elasticsearch') 

else 

    # There are already 1 ES servers. 
    include_recipe 'es::slave' 

end 

нюанс: * Если добавить рецепт на 4 узлов и выполнение шеф-клиента, в то же время, они все раскручивается как мастер-узел. Для первоначальной сборки кластера сначала создайте свой мастер (ы), а затем свои подчиненные.