Як налаштувати кластер ES?


81

Якщо припустити, що у мене є 5 машин, я хочу запустити кластер еластичного пошуку, і всі вони підключені до спільного диска. Я помістив одну копію elasticsearch на цей спільний диск, щоб усі троє могли його бачити. Чи я просто запускаю еластичний пошук на цьому спільному диску на всіх моїх машинах, і кластеризація автоматично спрацює свою магію? Або мені довелося б налаштувати певні параметри, щоб еластичний пошук зрозумів, що він працює на 5 машинах? Якщо так, то які відповідні налаштування? Чи я повинен хвилюватися про налаштування реплік, чи це обробляється автоматично?


3
Ви не збираєтесь використовувати спільну папку для індексу, правда?
javanna

Відповіді:


53

це дуже просто.

Вам знадобиться кожна машина, щоб мати власну копію ElasticSearch (просто скопіюйте ту, що у вас є зараз) - причина в тому, що кожна машина / вузол, що збирається зберігати свої власні файли, які розділені на кластер.

Єдине, що вам дійсно потрібно зробити, це відредагувати файл конфігурації, щоб включити ім'я кластера.

Якщо всі машини мають одне і те ж ім'я кластера, elasticsearch зробить все автоматично (за умови, що всі машини в одній мережі)

Для початку прочитайте тут: https://www.elastic.co/guide/en/elasticsearch/guide/current/deploy.html

Коли ви створюєте індекси (куди йдуть дані), ви в той час визначаєте, скільки реплік ви хочете (вони будуть розподілені по кластеру)


9
Також - встановіть плагін head. Це значно полегшує моніторинг стану ваших індексів. mobz.github.io/elasticsearch-head
Transact Charlie

1
Чому на кожній машині потрібно мати окремі копії? Виходячи з того, що я бачив для машин з одним вузлом, ви можете змінити ім’я вузла, щоб кілька екземплярів працювали з однаковою копією: concept47.com/austin_web_developer_blog/elasticsearch/... Це не застосовується, якщо у вас є окремі машини з одним спільним диском ? Я міг би подумати, що якби я встановив ім'я кластера для однієї копії, я міг би забезпечити, щоб кожна з машин запускала цю єдину копію, тому ім'я кластеру теоретично було б однаковим або я неправильний?
Роландо,

Кожна машина (або вузол) потребуватиме власного простору файлів, щоб писати файли індексу lucene. якщо ви зміните файл конфігурації (перевірте посилання), щоб вказувати на інший каталог на локальному вузлі, тоді він може працювати.
Трансакт Чарлі,

У мене склалося враження, що різні імена вузлів кожного кластера, оскільки окремий екземпляр elasticsearch автоматично зможе визначити, що інший екземпляр вже запущений, elasticsearch створить окремі каталоги на основі вузла. (виправте мене, якщо це не правильне припущення)
Роландо,

1
чому б просто не спробувати - ви завжди можете це прибрати? Повідомити - мені було б цікаво. Раніше у мене працювала інсталяція на кожній машині, оскільки це здавалося більш зайвим і безпечним.
Трансакт Чарлі,

53

Зазвичай це обробляється автоматично.

Якщо автовизначення не працює. Відредагуйте файл конфігурації еластичного пошуку, увімкнувши одноадресне виявлення

Вузол 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"]

Вузол 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"]

і так далі для вузла 3,4,5. Зробіть майстер вузла 1, а решту лише як вузли даних.

Змінити: Зверніть увагу, що за правилом ES, якщо у вас є Nвузли, то за узгодженням N/2+1вузли повинні бути майстрами для механізмів відмов. Однак вони можуть бути вузлами даних, а можуть і не бути.

Крім того, у випадку, якщо автоматичне виявлення не працює, найімовірнішою причиною є те, що мережа не дозволяє (і, отже, вимкнена). Якщо на кількох серверах відбувається занадто багато пінгів для автоматичного виявлення, ресурси для управління цими пінгами заважатимуть коректній роботі інших служб.

Наприклад, подумайте про кластер 10000 вузлів і всі 10000 вузлів, які виконують автоматичний пінг.


Для роз'яснення, чи повинні всі "unicast.hosts" бути IP / FQDN головного пристрою? Здається, на це вказує ваш приклад.
harperville

Відповідно до коментарів elasticsearch.yml в 1.7.x, якщо ви встановите "node.master: false", то вузол НІКОЛИ не стане майстром ....
Jonesome Reinstate Monica

@Jonesome - мій приклад ілюструє один головний і> 1 вузли даних. якщо ви не хочете, щоб вузол колись діяв як ведучий, ви повинні бути в порядку, якщо встановите властивість як false. Однак, якщо ви коли-небудь хочете, щоб ваш вузол став головним, цю властивість ніколи не можна торкатися.
KannarKK

@KannarKK Але з ES, якщо ви встановите "node.master: false" на кожному вузлі, за винятком 1, якщо майстер опуститься, чи не знизиться весь кластер? Хіба це не перемагає головної мети кластера? Чому б не залишити "node.master" поза yml повністю (що за замовчуванням має значення true), щоб, якщо майстер помер, інший вузол міг стати головним?
Jonesome Reinstate Monica

@Jonesome - Я вже включив цю інформацію у відповідь: .... Зверніть увагу, що за правилом ES, якщо у вас N вузлів, то за узгодженням N / 2 + 1 вузли повинні бути майстрами для механізмів відмов. Вони можуть або, можливо, не є вузлами даних. Тому, якщо у вас> 1 майстер, додайте всю їх інформацію до списку ведучих
KannarKK

5

Я спробував кроки, запропоновані @KannarKK на ES 2.0.2, однак я не зміг запустити кластер і запустити його. Очевидно, я щось зрозумів, оскільки встановив номер порту tcp на Master, на конфігурації підлеглого discovery.zen.ping.unicast.hosts потрібен номер порту Master разом з IP-адресою (номер порту tcp) для виявлення. Тому, коли я намагаюся слідувати конфігурації, це працює для мене.

Вузол 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"]

Вузол 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: Це має бути однаковим на всіх машинах, які збираються бути частиною кластера.

node.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 )

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.