관리 메뉴

가끔 보자, 하늘.

Elasticsearch 7.10 Cluster 설치하기 본문

개발 이야기/인프라 구축 및 운영

Elasticsearch 7.10 Cluster 설치하기

가온아 2021. 2. 9. 11:00

최근 시스템 확장을 위해 Elasticsearch의 최신 버전을 설치하면서 정리한 글입니다.

 

이전에 정리했던 6.x 버전 설치기, cluster 설정을 보면서 설치중에 불필요한 내용 정리하고 합칠 내용 합쳐서 최신 내용으로 다시 업데이트 하려 정리합니다. 

 

6.x 버전에서는 Java 8을 별도 설치해야 했지만 7.x 버전에서는 OpenJDK가 포함되어 있어 별도 설치할 필요는 없습니다. 

 

이 글은 CentOS 7.9.2009 (Core) release, 그리고 Elasticsearch 7.10.1 버전을 기준으로 작성되었습니다. (곧 7.11이 나올 예정인가보네요. 8.x로 넘어가기 전 마지막 버전일 줄 알았는데... -0-a )

 

일단 해당 서버로 elasticsearch-7.10.1-linux-x86_64.tar.gz 파일을 옮겨줍니다. (scp를 이용한 방법은 이곳에..)

 

1. 유저 생성 및 권한 설정

# root 권한으로 유저 생성
> adduser es-user

# es-user 비번 설정
> passwd es-user

# 다운받은 elasticsearch 파일 압축 풀기
> tar xvf elasticsearch-7.10.1-linux-x86_64.tar.gz

# elasticsearch 폴더의 소유를 es-user로 변경
> chown es-user elasticsearch-7.10.1
> chgrp es-user elasticsearch-7.10.1

 

2. config 설정 (참고 링크)

 

config/jvm.options을 수정합니다. 

.
.
## -Xms4g
## -Xmx4g

# Xms는 총 힙 메모리 사이즈의 초기 사이즈입니다.
-Xms15g
# Xmx는 총 힙 메모리 사이즈의 최대 사이즈입니다.
-Xmx15g
.
.

힙 메모리는 총 메모리 용량의 50%를 넘지 않게 설정하는 것을 권장하고 있습니다. (참고 링크) 시스템의 메모리가 32GB이므로 저는 15GB로 설정했습니다.

 

config/elasticsearch.yml을 수정합니다.

# 클러스터 이름을 설정합니다.
cluster.name : my-cluster

# node 이름을 설정합니다.
node.name: node-11

# 노드 역할에 대한 설명은 코드 아래 내용을 참고하세요.
node.master : true
node.data : false

# master node들의 주소를 array 형식으로 입력합니다.
discovery.seed_hosts: ['172.31.5.10:9300','172.31.5.11:9300']

# network 설정에 대한 설명은 코드 아래 내용을 참고하세요.
network.host : 172.31.5.20

# 데이터, 로그를 저장할 path를 설정합니다.
path.data : /es/data
path.logs : /es/logs

# 만약 es가 정상적으로 시작되지 않는다면 아래 옵션을 활성화하여 상세한 로그를 확인해 해보시기 바랍니다.
# 다시 정리!!
bootstrap.memory_lock: true

# 통신 관련 설정
transport.tcp.compress: true   #  node간 통신 시 데이터를 압축하여 전송합니다.
transport.tcp.port: 9300       #  node 간 통신 시 사용하는 포트를 설정합니다.
http.port: 9200                #  http를 통한 es api 사용을 위한 포트를 설정합니다.

# 보안 설정
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-cert.p12
xpack.security.transport.ssl.truststore.path: elastic-cert.p12

 

elasticsearch node의 종류 및 역할 (참고 링크

 

node 역할은 아래와 같이 나뉩니다.

  • master
  • data
  • data_content
  • data_hot
  • data_warm
  • data_cold
  • ingest
  • ml
  • remote_cluster_client

현재 On Premise로 구축해서 사용중이며, 총 node 수가 10대 미만이며 아직 ml을 사용하고 있지 않아 master, data만 구분해서 사용중입니다. 7.10 버전에 추가된 S3에 cold 데이터를 업로드 후 검색하는 기능을 어떻게 사용할 수 있는지는 현재 진행중인 버전 업데이트 이후 테스트를 진행하고 다시 관련 내용을 정리해서 올려두겠습니다. 

 

- master node는 클러스터에서 인덱스를 생성/삭제, node들을 관리하며 샤드 할당 등을 관리합니다. 

 

- data node는 CRUD, 검색, aggregation 등 데이터와 관련된 작업을 수행합니다.

 

가능한 node 역할 별로 설정할 필요가 있겠지만, master와 data를 동시 수행하게 하는 것도 방법입니다. 특히 master node들 중 elected master(여러 master node 중 실제 master 역할을 하는 node) 설정이 필요하며 이 과정에서 최소 2대의 master node가 필요합니다. 

 

그렇기 때문에 node 수가 5대 이하인 경우는 [master 전용 1대, master/data 겸용 2대, data 2대] 와 같이 적절하게 분산 설정하는 것이 좋습니다.

 

- discovery.seed_hosts : 하나의 노드가 시작되는 시점에 클러스터에 포함된 다른 노드들을 찾는 과정에 필요한 정보이며, 클러스터 내 master nodes의 주소를 array 형태로 입력하면 됩니다. 새로운 마스터가 추가되었다고 해서 기존의 가동중인 node의 config에 포함할 필요는 없습니다.

 

보다 상세한 내용은 위 링크를 참고하세요.

 

elasticsearch network 설정 (참고 링크)

cluster를 구성하면 다른 서버와의 연결이 필수인데 이를 위해 network.host 설정이 필요합니다. 기본값은 _local_이며, 이를 해당 node에서 사용되는 명확한 ip를 기록합니다. 

 

만약 특정 ip나 hostname으로만 접근할 수 있게 설정하고 싶다면 network.bind_host. network.publish_host를 설정하여 적용할 수 있습니다. 언급된 두 값은 network.host의 값을 기본값으로 설정됩니다. 

 

elasticsearch 보안 설정 (참고 링크)

기본적으로는 disabled 되어 있으며, ES와 Kibana만 사용하는 경우에는 필요하지 않습니다. 다만 9200 port를 이용해 직접 접근을 허용하는 경우에는 ssl 인증을 설정하는 것을 적극 추천합니다.

 

보다 상세한 내용은 위 링크를 참고하세요.

 

 

3. 시스템 설정

 

elasticsearch cluster는 시스템의 많은 리소스를 사용합니다. (참고 링크)

 

그래서 해당 계정의 system resource limit을 제한없이 풀어주어야 합니다. 

 

/etc/security/limits.conf 파일에 아래 내용을 추가합니다. (es을 실행하는 계정은 es-user 라고 가정합니다.)

es-user hard memlock unlimited   # 하드 세팅으로 메모리 락 제한 없도록 설정
es-user soft memlock unlimited   # 소프트 세팅으로 메모리 락 제한 없도록 설정
es-user hard nofile 65536        # 하드 세팅으로 65536번의 파일을 열어 볼 수 있게 설정
es-user soft nofile 65536        # 소프트 세팅으로 65536번의 파일을 열어 볼 수 있게 설정
es-user hard nproc 65536         # 하드 세팅으로 65536번의 프로시저를 실행 할 수 있게 설정
es-user soft nproc 65536         # 소프트 세팅으로 65536번의 프로시저를 실행 할 수 있게 설정

(* 시스템 재시작 후 적용됩니다.)

 

하나의 프로세스가 가질 수 있는 메모리 맵 영역의 최대수를 아래와 같이 설정합니다.

sysctl -w vm.max_map_count=262144

 

4. 방화벽 설정

 

이제 node간 접근을 위해 필요한 포트를 방화벽에 등록합니다. 

9200 port는 외부에서 직접 접근이 필요한 node만 설정하면 되므로, 내부 node간 통신을 위해 9300 port만 오픈합니다.

> firewall-cmd --permanent --zone=public --add-port=9300/tcp
> firewall-cmd --reload

 

이제 bin/elasticsearch를 실행해 정상적으로 가동되는지 확인하면 됩니다.

 

기존 글에 있던 내용들을 취합하여 시스템 세팅 후 elasticsearch 설치 및 가동까지만 재정리했습니다.

 

기존 설정에서 변경된 것들도 있으니 참고하시기 바랍니다. :)

 

반응형