docker 설치 ElasticSearch: 7.8.0 클러스터

ElasticSearch 클러스터는 동적 요청을 지원하는 방식으로 클러스터 및 정적 구성 파일을 구축하여 클러스터를 구축합니다.


클러스터의 동적 연결 방식에 대한 공식 설명서:https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-update-settings.html

사전 준비 작업


매개변수에 대한 홈 페이지 설명:https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery-settings.html

elsticsearch 7.8.0 다운로드

docker pull elasticsearch:7.8.0

네트워크 생성 es_net은elasticsearch 집단을 놓는데 사용

docker network create --subnet=172.18.0.0/24 es_net

홈페이지의 dockerFile 파일에 있는 정보에 따르면 WORKDIR/usr/share/elasticsearch는 /usr/share/elasticsearch 디렉터리에 설치되어 있음을 알 수 있습니다. 다음 작업을 편리하게 하기 위해 데이터 볼륨을 만들어서 elasticsearch에서 발생하는 데이터를 호스트에 비추어 es 다운된 데이터가 복구되지 않도록 합니다.

데이터 볼륨 생성

docker volume create es_data01
docker volume create es_data02
docker volume create es_data03
# , 
docker volume create es_conf
docker volume create es_plugins

데이터, 설정, 플러그인 각각 3개의yml 프로필 만들기

동적으로 ElasticSearch 클러스터 구축 (권장)


ElasticSearch를 시작하고 ES가 자체적으로 가지고 있는 RestFul 스타일의 조작을 통해 집단의 구축을 완성할 수 있다는 것을 의미합니다. Dockerhub에서 공식적인 시작 방식은 단일 노드의 시작입니다. 먼저 3개ElasticSearch 를 단독으로 시작합니다.

시작 es01

docker run -it -d --restart always -p 9201:9200 -p 9301:9300 \
--name es01 --network=es_net --ip=172.18.0.101 \
-v es_data01:/usr/share/elasticsearch/data  \
-v es_conf:/usr/share/elasticsearch/conf \
-v es_plugins:/usr/share/elasticsearch/plugins \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx128m"    elasticsearch:7.8.0

부팅es02

docker run -it -d --restart always -p 9202:9200 -p 9302:9300 \
--name es02 --network=es_net --ip=172.18.0.102 \
-v es_data02:/usr/share/elasticsearch/data  \
-v es_conf:/usr/share/elasticsearch/conf \
-v es_plugins:/usr/share/elasticsearch/plugins \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx128m"    elasticsearch:7.8.0

부팅es03

docker run -it -d --restart always -p 9203:9200 -p 9303:9300 \
--name es03 --network=es_net --ip=172.18.0.103 \
-v es_data03:/usr/share/elasticsearch/data  \
-v es_conf:/usr/share/elasticsearch/conf \
-v es_plugins:/usr/share/elasticsearch/plugins \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx128m"    elasticsearch:7.8.0

PUT 방식으로 linux의curl 명령을 통해 es02와es03에서
curl -X PUT "localhost:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d'
{
  "persistent" : {
    "cluster" : {
      "remote" : {
        "leader" : {
          "seeds" : [
            "127.0.0.1:9300" 
          ]
        }
      }
    }
  }
}
'


업데이트 persistent
curl -X PUT "localhost:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d'
{
    "persistent" : {
        "indices.recovery.max_bytes_per_sec" : "50mb"
    }
}
'

업데이트 transient
curl -X PUT "localhost:9200/_cluster/settings?flat_settings=true&pretty" -H 'Content-Type: application/json' -d'
{
    "transient" : {
        "indices.recovery.max_bytes_per_sec" : "20mb"
    }
}
'

구성 내용 삭제transient
curl -X PUT "localhost:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d'
{
    "transient" : {
        "indices.recovery.max_bytes_per_sec" : null
    }
}
'

모든 설정 삭제transient
curl -X PUT "localhost:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d'
{
    "transient" : {
        "indices.recovery.*" : null
    }
}
'

ElasticSearch는 정적 구성 파일로 클러스터를 시작합니다.


실패한 원인은 용기를 시작할 때 파라미터가 없어졌기 때문일 것이다.홈페이지 문서에서 장래 버전을 사용하지 않겠다고 하였다discovery.zen.ping.unicast.hosts.

discovery.seed_hosts

vim /var/lib/docker/volumes/es_conf/_data/es01.yml

주석 하숙집 호스트 ip와 es 집단 통신의 포트 주소를 수정하십시오.
cluster.name: elasticsearch-cluster
node.name: es-node1
network.bind_host: 0.0.0.0
network.publish_host: 192.168.117.231  # docker ip
http.port: 9200   # , 
transport.tcp.port: 9300   # , 
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true 
node.data: true  
discovery.seed_hosts: ["192.168.117.231:9300","192.168.117.231:9301","192.168.117.232:9302"] 
discovery.zen.minimum_master_nodes: 2
indices.query.bool.max_clause_count: 10240
# , docker -p 

상기 프로필을 통해 알 수 있듯이 매핑 포트는 각각 es-node1 , 이 포트들은 집단 통신을 위한 것이다. 즉, 세 개의 노드 귀속 포트는 각각 9300、9301、9302, -p 9300:9300, -p 9301:9300, 동시에 우리는 사용할 수 있다. -p 9302:9300, -p 9200:9200, -p 9201:9200

양식을 만들려면 다음과 같이 하십시오.


노드
호스트 포트 바인딩 1
호스트 포트 바인딩 2
es-node1
9200
9300
es-node2
9201
9301
es-node3
9202
9301
작용
대외 서비스 포트
es1-es3 집단 간 통신 포트
즉, 숙주 호스트(-p 9202:9200192.168.117.231, 9200-9202 포트는 모두 es집단에 의해 사용된다

9300-9302

vim /var/lib/docker/volumes/es_conf/_data/es02.yml

에스노드 1과 다른 점은 노드 이름을 바꾸는 거예요.
cluster.name: elasticsearch-cluster
node.name: es-node2
network.bind_host: 0.0.0.0
network.publish_host: 192.168.117.231  # docker ip
http.port: 9200  # , 
transport.tcp.port: 9300   # , 
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true 
node.data: true  
discovery.seed_hosts: ["192.168.117.231:9300","192.168.117.231:9301","192.168.117.232:9302"]
discovery.zen.minimum_master_nodes: 2
indices.query.bool.max_clause_count: 10240
# , docker -p 

es-node2 노드의 프로필 정보

vim /var/lib/docker/volumes/es_conf/_data/es02.yml

에스노드 1과 다른 점은 노드 이름을 바꾸는 거예요.
cluster.name: elasticsearch-cluster
node.name: es-node3
network.bind_host: 0.0.0.0
network.publish_host: 192.168.117.231  # docker ip
http.port: 9200  # , 
transport.tcp.port: 9300   # , 
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true 
node.data: true  
discovery.seed_hosts: ["192.168.117.231:9300","192.168.117.231:9301","192.168.117.232:9302"]
discovery.zen.minimum_master_nodes: 2
indices.query.bool.max_clause_count: 10240
# , docker -p 

순차적으로 클러스터 시작


es-node1 시작 명령,docker 프로세스 별명es01


사용된 네트워크는 위에서 만든 네트워크 카드es-node3 , 지정된 노드의 내부 네트워크 IPes_net172.18.0.100와 같은 네트워크 세그먼트를 필요로 한다
docker run -it -d --restart always -p 9200:9200 -p 9300:9300 \
--name es01 --network=es_net --ip=172.18.0.100 \
-v es_data01:/usr/share/elasticsearch/data \
-v /var/lib/docker/volumes/es_conf/_data/es01.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v es_plugins:/usr/share/elasticsearch/plugins \
-e ES_JAVA_OPTS="-Xms64m -Xmx128m"  elasticsearch:7.8.0
es_net 사용한 es의 메모리를 지정하여 es를 시작하는 데 너무 많은 메모리 공간을 차지하는 것을 방지합니다. ES_JAVA_OPTS 오프라인으로 데이터 볼륨 맵을 시작하는 것을 방지합니다. 유일하게 주의해야 할 것은 프로필 es01입니다.yml는 내부의es가 시작될 때 사용되는 프로필에 비칩니다.

es-node2 시작 명령

docker run -it -d --restart always -p 9201:9200 -p 9301:9300 \
--name es02 --network=es_net --ip=172.18.0.101 \
-v es_data02:/usr/share/elasticsearch/data  \
-v  /var/lib/docker/volumes/es_conf/_data/es02.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v es_plugins:/usr/share/elasticsearch/plugins \
-e ES_JAVA_OPTS="-Xms64m -Xmx128m"   elasticsearch:7.8.0

es-node3 시작 명령

docker run -it -d --restart always -p 9202:9200 -p 9302:9300 \
--name es03 --network=es_net --ip=172.18.0.102 \
-v es_data03:/usr/share/elasticsearch/data  \
-v /var/lib/docker/volumes/es_conf/_data/es03.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v es_plugins:/usr/share/elasticsearch/plugins \
-e ES_JAVA_OPTS="-Xms64m -Xmx128m"    elasticsearch:7.8.0

좋은 웹페이지 즐겨찾기