Предполагая, что у меня есть 5 машин, я хочу запустить кластер elasticsearch, и все они подключены к общему диску. Я помещаю одну копию elasticsearch на этот общий диск, чтобы все трое могли его увидеть. Я только начинаю поиск elastics на этом общем диске на всех моих машинах, и кластеризация автоматически срабатывает с вашей магией? Или мне нужно настроить определенные настройки, чтобы заставить elasticsearch понять, что он работает на 5 машинах? Если да, то каковы соответствующие настройки? Должен ли я беспокоиться о настройке для реплик или он обрабатывается автоматически?
Как настроить кластер ES?
Ответ 1
его очень легко.
Вам понадобится каждая машина, чтобы иметь собственную копию ElasticSearch (просто скопируйте тот, который у вас есть сейчас) - причина в том, что каждая машина / node будет хранить свои собственные файлы, кластера.
Единственное, что вам действительно нужно сделать, это отредактировать файл конфигурации, чтобы включить имя кластера.
Если все машины имеют одинаковое имя кластера, elasticsearch сделает все остальное автоматически (пока все компьютеры находятся в одной сети)
Читайте здесь, чтобы начать работу: https://www.elastic.co/guide/en/elasticsearch/guide/current/deploy.html
Когда вы создаете индексы (куда идут данные), вы определяете на тот момент сколько реплик вы хотите (они будут распределены вокруг кластера)
Ответ 2
Обычно он обрабатывается автоматически.
Если автообнаружение не работает. Отредактируйте файл конфигурации эластичного поиска, включив одноадресное обнаружение
Node 1:
cluster.name: mycluster
node.name: "node1"
node.master: true
node.data: true
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["node1.example.com"]
Node 2:
cluster.name: mycluster
node.name: "node2"
node.master: false
node.data: true
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["node1.example.com"]
и т.д. для node 3,4,5. Создайте мастер node 1, а остальные только как узлы данных.
Изменить: Обратите внимание, что по правилу ES, если у вас есть узлы N
, то по соглашению, узлы N/2+1
должны быть мастерами для механизмов сбоя. Они могут или не могут быть данными узлов.
Кроме того, в случае, если автоматическое обнаружение не работает, наиболее вероятной причиной является то, что сеть не позволяет его (и поэтому отключена). Если на нескольких серверах происходит слишком много попыток автоматического обнаружения, ресурсы для управления этими пингами будут препятствовать нормальной работе других служб.
Например, подумайте о 10000 кластере node и всех 10000 узлов, выполняющих автопинг.
Ответ 3
Я пробовал шаги, предложенные @KannarKK в ES 2.0.2, однако я не мог запустить и запустить кластер. Очевидно, я что-то понял, так как я установил номер порта tcp на Master, в конфигурации конфигурации Slave.zen.ping.unicast.hosts требуется номер главного порта вместе с IP-адресом (номер порта tcp) для обнаружения. Поэтому, когда я пытаюсь выполнить конфигурацию, она работает для меня.
Node 1
cluster.name: mycluster
node.name: "node1"
node.master: true
node.data: true
http.port : 9200
tcp.port : 9300
discovery.zen.ping.multicast.enabled: false
# I think unicast.host on master is redundant.
discovery.zen.ping.unicast.hosts: ["node1.example.com"]
Node 2
cluster.name: mycluster
node.name: "node2"
node.master: false
node.data: true
http.port : 9201
tcp.port : 9301
discovery.zen.ping.multicast.enabled: false
# The port number of Node 1
discovery.zen.ping.unicast.hosts: ["node1.example.com:9300"]
Ответ 4
Elastic Search 7 изменил настройки для инициализации кластера. Важно отметить, что экземпляры ES взаимодействуют внутри системы с использованием транспортного уровня (TCP), а не протокола HTTP, который обычно используется для выполнения операций с индексами. Ниже приведен пример конфигурации для кластера из 2 машин.
cluster.name: cluster-new
node.name: node-1
node.master: true
node.data: true
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
transport.host: 102.123.322.211
transport.tcp.port: 9300
discovery.seed_hosts: ['102.123.322.211:9300',"102.123.322.212:9300']
cluster.initial_master_nodes:
- "node-1"
- "node-2'
Конфигурация машины 2: -
cluster.name: cluster-new
node.name: node-2
node.master: true
node.data: true
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
transport.host: 102.123.322.212
transport.tcp.port: 9300
discovery.seed_hosts: ['102.123.322.211:9300',"102.123.322.212:9300']
cluster.initial_master_nodes:
- "node-1"
- "node-2'
cluster.name: Это должно быть одинаковым на всех машинах, которые будут частью кластера.
имя.узла: идентификатор экземпляра ES. По умолчанию используется имя машины, если оно не указано.
node.master: указывает, будет ли этот экземпляр ES основным или нет
node.data: указывает, будет ли этот экземпляр ES узлом данных или нет (содержит данные)
bootsrap.memory_lock: отключить обмен. Вы можете запустить кластер без установки этого флага. Но рекомендуется установить блокировку. Подробнее: https://www.elastic.co/guide/en/elasticsearch/reference/master/setup-configuration-memory.html
network.host: 0.0.0.0, если вы хотите выставить экземпляр ES по сети. 0.0.0.0 отличается от 127.0.0.1 (он же локальный адрес или адрес обратной связи). Это означает, что все IPv4-адреса на машине. Если у компьютера несколько IP-адресов, а сервер прослушивает 0.0.0.0, клиент может подключиться к компьютеру с любого из адресов IPv4.
http.port: порт, на котором этот экземпляр ES будет прослушивать HTTP-запросы
transport.host: IPv4-адрес хоста (он будет использоваться для связи с другими экземплярами ES, работающими на разных машинах). Дополнительная информация: https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-transport.html
transport.tcp.port: 9300 (порт, на котором машина будет принимать соединения tcp)
discovery.seed_hosts: Это было изменено в последних версиях. Инициализируйте все IPv4-адреса с TCP-портом (важно) экземпляров ES, которые станут частью этого кластера. Это будет одинаковым для всех экземпляров ES, входящих в этот кластер.
cluster.initial_master_nodes: имена узлов (node.name) машин ES, которые собираются участвовать в основных выборах (принятие решения на основе кворума: - https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery-quorums.html#modules-discovery-quorums)