ES 클러스터를 설정하는 방법은 무엇입니까?


81

elasticsearch 클러스터를 실행하려는 5 대의 컴퓨터가 있고 모두 공유 드라이브에 연결되어 있다고 가정합니다. 세 가지 모두가 볼 수 있도록 Elasticsearch의 단일 사본을 해당 공유 드라이브에 넣었습니다. 내 컴퓨터의 모든 공유 드라이브에서 elasticsearch를 시작하면 클러스터링이 자동으로 마법을 작동합니까? 아니면 Elasticsearch가 5 대의 컴퓨터에서 실행된다는 것을 깨닫도록 특정 설정을 구성해야합니까? 그렇다면 관련 설정은 무엇입니까? 복제본 구성에 대해 걱정해야합니까? 아니면 자동으로 처리됩니까?


3
색인에 공유 폴더를 사용하지 않겠습니까?
javanna 2013 년

답변:


53

아주 쉽습니다.

각 머신에 ElasticSearch의 자체 사본이 필요합니다 (현재 보유하고있는 사본을 복사하기 만하면됩니다). 이유는 각 머신 / 노드가 클러스터 전체에 걸쳐 분할 된 자체 파일을 유지하기 때문입니다.

정말로해야 할 일은 클러스터 이름을 포함하도록 구성 파일을 편집하는 것뿐입니다.

모든 머신이 동일한 클러스터 이름을 갖는 경우 elasticsearch가 나머지를 자동으로 수행합니다 (머신이 모두 동일한 네트워크에있는 한).

시작하려면 여기를 읽으십시오 : https://www.elastic.co/guide/en/elasticsearch/guide/current/deploy.html

인덱스 (데이터가가는 곳)를 만들 때 원하는 복제본 수를 정의합니다 (클러스터 전체에 분산 됨).


9
또한-헤드 플러그인을 설치하십시오. 인덱스 상태를 훨씬 쉽게 모니터링 할 수 있습니다. mobz.github.io/elasticsearch-head
Transact Charlie

1
각 컴퓨터에 별도의 복사본이 필요한 이유는 무엇입니까? 단일 노드 머신에 대해 본 내용을 기반으로 동일한 사본으로 여러 인스턴스가 실행되도록 노드 이름을 변경할 수 있습니다. concept47.com/austin_web_developer_blog/elasticsearch/… 단일 공유 드라이브가있는 별도의 머신이있는 경우 적용되지 않습니까 ? ? 단일 복사본에 대한 클러스터 이름을 설정하면 각 시스템에서 해당 단일 복사본을 실행하도록 할 수 있으므로 클러스터 이름이 이론적으로 동일한 권한이되거나 잘못된 것입니까?
Rolando

각 머신 (또는 노드)은 lucene 인덱스 파일을 작성하기 위해 자체 파일 공간이 필요합니다. 로컬 노드의 다른 디렉토리를 가리 키도록 구성 파일 (링크 확인)을 변경하면 작동 할 수 있습니다.
Transact Charlie

Elasticsearch의 단일 인스턴스가 다른 인스턴스가 이미 실행 중임을 자동으로 알 수 있기 때문에 각 클러스터의 서로 다른 노드 이름이 있고 elasticsearch가 노드를 기반으로 별도의 디렉터리를 생성한다는 인상을 받았습니다. (올바른 가정이 아니라면 정정 해주세요)
Rolando

1
그냥 시도해 보지 않겠습니까? 항상 청소할 수 있습니까? 다시보고-관심이있을 것입니다. 과거에는 더 중복되고 안전 해 보였기 때문에 각 컴퓨터에서 설치를 실행했습니다.
Transact Charlie

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노드가있는 경우 규칙에 따라 노드는 장애 조치 메커니즘의 마스터 여야하지만 데이터 노드 일 수도 있고 아닐 수도 있습니다.

또한 자동 검색이 작동하지 않는 경우 가장 가능성이 높은 이유는 네트워크가이를 허용하지 않기 때문입니다 (따라서 비활성화 됨). 여러 서버에서 너무 많은 자동 검색 핑이 발생하면 해당 핑을 관리하는 리소스로 인해 다른 서비스가 제대로 실행되지 않습니다.

예를 들어, 10,000 개의 노드 클러스터와 10,000 개의 모든 노드가 자동 핑을 수행한다고 생각해보십시오.


설명을 위해 모든 "unicast.hosts"가 마스터의 IP / FQDN이어야합니까? 귀하의 예가 나타내는 것 같습니다.
harperville

1.7.x의 elasticsearch.yml 주석에 따르면 "node.master : false"를 설정하면 노드가 절대 마스터가되지 않습니다 ....
Jonesome Reinstate Monica 2015-09-24

@Jonesome-내 예제는 하나의 마스터와> 1 데이터 노드를 보여줍니다. 노드가 마스터로 작동하지 않도록하려면 속성을 false로 설정해도 괜찮습니다. 그러나 노드가 마스터가되기를 원한다면이 속성은 절대로 건드리지 말아야합니다.
KannarKK 2015 년

@KannarKK하지만 ES를 사용하면 1을 제외한 모든 노드에서 "node.master : false"를 설정하면 마스터가 다운되면 전체 클러스터가 다운되지 않습니까? 그것은 클러스터의 주요 목적을 무너 뜨리지 않습니까? 마스터가 죽으면 다른 노드가 마스터가 될 수 있도록 yml에서 "node.master"를 완전히 빼는 것은 어떨까요?
Jonesome Reinstate Monica 2015

@Jonesome-나는 이미이 정보를 대답에 포함 시켰습니다 : .... ES 규칙에 따라 N 개의 노드가있는 경우 규칙에 따라 N / 2 + 1 노드는 장애 조치 메커니즘의 마스터 여야합니다. 하지만 데이터 노드가 아닐 수도 있습니다. 당신은> 1 개 주인이있는 경우 따라서, 호스트 목록에 모든 정보를 추가
KannarKK

5

ES 2.0.2에서 @KannarKK가 제안한 단계를 시도했지만 클러스터를 시작하고 실행할 수 없었습니다. 분명히 마스터에서 tcp 포트 번호를 설정했듯이 슬레이브 구성에서 무언가를 알아 냈습니다. discovery.zen.ping.unicast.hosts는 검색을 위해 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 인스턴스가 일반적으로 인덱스에서 작업을 수행하는 데 사용되는 HTTP 프로토콜이 아닌 전송 계층 (TCP)을 사용하여 내부적으로 통신한다는 것입니다. 아래는 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 : disable swapping.이 플래그를 설정하지 않고 클러스터를 시작할 수 있습니다. 그러나 잠금을 설정하는 것이 좋습니다. 자세한 정보 : https://www.elastic.co/guide/en/elasticsearch/reference/master/setup-configuration-memory.html

network.host : 네트워크를 통해 ES 인스턴스를 노출하려는 경우 0.0.0.0. 0.0.0.0은 127.0.0.1 (일명 localhost 또는 루프백 주소)과 다릅니다. 시스템의 모든 IPv4 주소를 의미합니다. 시스템에 0.0.0.0에서 수신 대기하는 서버가있는 여러 IP 주소가있는 경우 클라이언트는 모든 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 : 이것은 최근 버전에서 변경되었습니다. 이 클러스터의 일부가 될 ES 인스턴스의 TCP 포트 (중요) 로 모든 IPv4 주소 초기화 합니다. 이는이 클러스터의 일부인 모든 ES 인스턴스에서 동일합니다.

cluster.initial_master_nodes : 마스터 선거에 참여 (쿼럼 기반의 의사 결정을하려고하는 ES 기계의 노드 이름 (node.name) : -. https://www.elastic.co/guide/en/elasticsearch/reference/current /modules-discovery-quorums.html#modules-discovery-quorums )

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.