안녕하세요 주원이상감자입니다.
비정형데이터로 운영되면서 설치하게된 엘라스틱서치(Elasticsearch) 와 키바나(kibana)를 설치하게 되었습니다.
백엔드 개발자가 아닌 서버에 설치하면서 서비스의 용도가 무엇인지에 대해 궁금해서 알게된 내용을 나중에도 알기 쉽게 작성합니다.
또한 제 글도 좋지만 다른 글을 참고하고자 맨 하단에 레퍼런스(Reference)로 링크하였습니다.
엘라스틱서치(Elasticsearch) : 데이터를 저장하고 쿼리를 입력하고 검색하고 분석하는 역활
엘라스틱서치 매커니즘은 미리 정의된 데이터 모델이 없거나 미리 정의된 방식으로 정리되지 않은 정보(비정형데이터)를 다룹니다.
정의된 데이터(정형데이터)도 다루지만 검색, 질의, 용도가 다른만큼 서로 다른 구조를 가지고 있습니다.
검색 및 질의
- RDBMS : SQL을 사용하여 데이터를 쿼리하고 복잡한 연산 수행을 수행합니다.
- 엘라스틱서치 : JSON쿼리를 수행하고 검색 쿼리에 더 중점을 둔 설계로 대규모 텍스트 검색 및 분석을 위한 매커니즘을 가지고 있습니다.
용도
- RDBMS : 트랜잭션 처리 및 관계형 데이터에 일관성 및 정확성을 보장하는데 사용합니다.
- 엘라스틱서치 : 검색 및 분석에 중점을 두었고 대용량 텍스트 기반 데이터를 다루는 데 사용됩니다.
소셜 미디어 플랫폼은 매일 대규모의 텍스트 데이터를 생성하고 저장하고 조회하는데, 예로 들면 사용자의 게시물, 댓글, 좋아요, 리트윗등이 대규모 텍스트 데이터라고 생각하면 도움이 됩니다.
초심자에게 이해하기 편하게 설명해주셔서 남겼습니다.
키바나(Kibana) : 엘라스틱서치를 이용해 시각화 및 분석하기 위한 도구
키바나는 엘라스틱서치를 이용해 시각적으로 보기 좋게 보여주는 도구입니다.
그리고 로그, 데이터 등 저장된 데이터를 가지고 시각적으로 보기 좋게 보여주니 나중에 어떤 에러가 많이 나고 있는지 어떤 데이터를 많이 조회하는지도 알수 있을 것 같아보이네요.
엘라스틱서치 설치 (Zip 형식 다운로드)
엘라스틱서치와 키바나의 버전을 동일하게 맞춰 설치합니다.
모든 버전의 호환성을 확인하기 위해 모든 독스를 찾아보기엔 제한이 있습니다.
하지만 자신이 원하는 기능이 있다면 조금 독스를 찾아보고 설치하는 것이 좋을 것 같습니다.
엘라스틱서치 다운로드 홈페이지
아래 설명은 Linux서버 설치 및 Zip 형식의 수동 설치를 중점으로 작성하였습니다.
https://www.elastic.co/kr/downloads/past-releases#elasticsearch
원하는 릴리즈를 선택해 다운로드를 누르고 원하는 형식의 파일을 우클릭 후 링크 주소를 복사합니다.
# 자신이 설치하고자 하는 경로로 이동
$ cd /appstore
# 파일 다운로드
$ wget 링크주소
# 압축 해제
$ tar zxvf 파일명
※ 압축 해제 후 자신이 원하는 이름으로 변경해도 상관없습니다.
엘라스틱서치 서비스 계정 생성
서버보안에 취약해 서비스 계정을 생성하여 별도로 운영합니다.
패스워드설정도 함께 진행합니다.
$ useradd -d /home/es es
$ passwd es
서버 계정에 대한 파일 리밋 설정 변경
시스템 리소스와 관련된 제한을 설정합니다.
안정성과 성능을 조정하기 위해서 설정을 변경 및 추가합니다.
$ vi /etc/security/limits.conf
es -nofile 65535
es -nproc 4096
es soft memlock unlimited
es hard memlock unlimited
- es -nofile 65535 : 사용자 'es'에 대한 파일 디스크립터(열린 파일의 수) 제한을 65535로 설정합니다.
- es -nproc 4096 : 사용자 'es'에 대한 프로세스 수 제한을 4096으로 설정합니다.
- es soft memlock unlimited : 사용자 'es'에 대한 소프트 메모리 락 제한을 무제한(unlimited)으로 설정합니다.
이는 사용자가 메모리를 락(lock)하고 해당 메모리를 물리적으로 메모리에 유지할 수 있는 제한을 설정합니다. - es hard memlock unlimited : 사용자 'es'에 대한 하드 메모리 락 제한을 무제한(unlimited)으로 설정합니다.
소프트 메모리 락과 달리 하드 메모리 락은 사용자가 설정한 제한을 초과할 수 없습니다.
$ vi /etc/sysctl.conf
vm.max_map_count = 262144
- vm.max_map_count = 262144 : 가상 메모리 맵의 최대 개수를 262144로 설정합니다. 가상 메모리를 사용하는 프로세스가 많을 때 유용하고 엘라스틱서치같은 소프트웨어에서 요구하기도하며 이 값을 증가시키면 프로세스가 더 많은 가상메모리 맵을 생성할 수 있도록 해줍니다.
엘라스틱서치 설정(elasticsearch.yml)
바로 bin/elelasticsearch 를 실행하면 정상 작동이 되지 않습니다.
기본 디폴트로 사용하고 자바 버전을 사용하고 있는 경우 경로를 추가해야 합니다. (/etc/profile)
추가로 엘라스틱서치를 다운로드받으면 그 안에 자바 버전이 탑재되어있으니 그 버전을 사용하는 것을 권장합니다.
vi /etc/profile 에 들어가서 엘라스틱서치의 자바 홈을 지정해줍니다.
export ES_JAVA_HOME=/appstore/elasticsearch-7.17.10/jdk
config/elasticsearch.yml 파일에서 아래 문구를 주석제거 후 아래와 같이 수정합니다.
cluster.name: my-application
network.hosts: _local_, _site_
node.name: node-1
bootstrap.memory_lock: true
http.port: 9200
discovery.type: single-node
# discovery.seed_hosts: ["192.168.0.1", "192.168.0.2"]
- cluster.name : 클러스터 이름을 지정합니다.
- network.hosts: _local_, _site_ 는 자기 자신 루프백과 인터페이스의 IP를 의미합니다.
- node.name : 클러스터 내 노드이름을 지정합니다.
- bootstrap.memory_lock = ture : 프로세스가 JVM메모리를 잠그도록 지시하는 설정입니다.
- http.port:9200 : 엘라스틱서치 HTTP API가 사용할 포트를 지정합니다.
- discovery.type : 싱글노드의 경우 타입을 변경합니다.
- discovery.seed_host : 클러스터가 2개이상인 경우 사용합니다.
만약 2개이상의 클러스터를 사용할 경우 2번째 클러스터설정에는 다른 서버가 들어갈 수 있겠습니다.
엘라스틱서치 시작 스크립트
엘라스틱서치를 서비스를 시작할 때 서비스에 등록하여 사용하는 것을 권장하고 있으며 레퍼런스 참조하였습니다.
하지만 전 서비스를 스크립트로 작성하여 사용하였습니다.
시작 스크립트
-d 는 백그라운드에서 실행하는 것을 의미하고 -p는 pid를 저장하도록 지시합니다.
$ cd /appstore/elasticsearch-7.17.10/start.sh
bin/elasticsearch -d -p es.pid
종료 스크립트
kill 명령어를 통해 생성된 pid값을 종료합니다.
$ cd /appstore/elasticsearch-7.17.10/stop.sh
kill `cat es.pid`
엘라스틱서치 실행 시 `UseConcMarkSweepGC` 에러 발생
Java HotSpot(TM) 64비트 서버 VM 경고: UseConcMarkSweepGC 옵션은 버전 9.0에서 더 이상 사용되지 않으며 향후 릴리스에서는 제거될 가능성이 높습니다.
이 에러를 조치하기 위해 아래와 같이 UseConcMarkSweepGC 방식을 미 사용처리 한 후에 서비스를 시작하시면 됩니다.
$ /appstore/elasticsearch-7.17.10/config/jvm.options
## GC configuration
#-XX:+UseConcMarkSweepGC
#-XX:CMSInitiatingOccupancyFraction=75
#-XX:+UseCMSInitiatingOccupancyOnly
키바나 다운로드 (Zip)
키바나 다운로드 홈페이지
아래 설명은 Linux서버 설치 및 Zip 형식의 수동 설치를 중점으로 작성하였습니다.
https://www.elastic.co/kr/downloads/past-releases#kibana
원하는 릴리즈를 선택해 다운로드를 누르고 원하는 형식의 파일을 우클릭 후 링크 주소를 복사합니다.
키바나 설정
/appstore/kibana-7.17.10/config/kibana.yml 에서 아래 내용을 주석제거하고 수정합니다.
elasticsearch.hosts: ["http://127.0.0.1:9200"]
server.port: 5601
server.host: "10.100.11.137"
server.name: "TWAS5-ES"
pid.file: /appstore/kibana-7.17.10/kibana.pid
- elasticsearch.hosts : 엘라스틱서치가 설치된 서버와 포트번호를 입력합니다.
- server.port : 5601
- server.host : 키바나 웹서버가 바인딩할 호스트주소를 입력합니다. 따라 이 IP주소로부터의 요청만 카바나에 접근가능합니다.
- server.name : 키바나 서버의 이름을 지정합니다.
- pid.file : 키바나가 실행되면 pid를 경로에 저장합니다.
키바나 시작 스크립트
키바나 또한 메뉴얼을 레퍼런스로 참조하였습니다.
저는 스크립트를 통해 시작되도록 하였습니다.
키바나 시작 스크립트
$ vi /appstore/kibana-7.17.10/start.sh
nohup /appstore/kibana-7.17.10/bin/kibana 1> /dev/null 2>&1 &
키바나 종료 스크립트
$ vi /appstore/kibana-7.17.10/stop.sh
kill `cat kibana.pid`
Reference
'Etc' 카테고리의 다른 글
Jenkins Pipline, Gitlab, SSH를 이용한 자동화 배포 방법 (1) | 2024.10.24 |
---|---|
[Onedrive] 다운로드, 동기화, 업로드 오류 (2) | 2024.10.08 |
AI를 통한 웹 페이지 만들기 (make real tldraw) (2) | 2023.11.28 |