본문 바로가기

elasticsearch-logstash

단일서버 분산환경 예제 2

website : http://www.jopenbusiness.com/wordpress/?p=555
http://blog.arone.co.kr/elasticsearch-%EC%84%A4%EC%B9%98/


elasticSearch
	: 오픈소스 검색 서버 프로젝트, JSON 기반의 비정형 데이터 분산 검색과 분석 지원
	: 실시간 검색 서비스 지원, 분산 및 병렬 처리 멀티테넌시 제공
	: 다양한 플러그인 형태로 구현하여 적용 가능

		멀티테넌시 : 하나의 클러스트 내에서 indice와 도큐멘트 타입을 활용하여 멀티 클라이언트 구성 및 서비스 가능

	용어
		1. Index : elasticsearch에서 데이터를 저장하기 위한 장소. RDBMS의 데이터베이스와 유사.
				 : index는 하나 또는 여러개의 도큐먼트 타입을 가짐.
				 : index -> 검색에서 포괄적인 의미의 색인 또는 색인 파일
				   indice -> elasticsearch 내에서 물리적으로 사용되는 색인 또는 색인 파일 (기존 검색엔진의 collection)
		2. Shard : 검색의 기본 데이터베이스가 되는 인덱스
				 : 대량의 데이터를 분산처리 하기 위한 개념.
				 : 대량의 데이터를 단일 노드에 저장시 저장소 및 성능에 대한 한계 헤결

				 primary Shard : 색인 시 가장 먼저 생성되는 인덱스
				 Replica Shard : 레플리카 설정에 따라 primary shard를 복제하여 생성된 샤드

		3. Replica : 서비스 장애 발생 시 서비스의 지속성 보장과 검색 처리량을 높이는데 유용한 방법
				   : 기본적으로 primary Shard에 색인이 완료되면 이를 바탕으로 각 노드에 샤드 복제가 async하게 이루어짐

		4. Document type : 물리적인 인덱스나 저장소를 가지고 있지 않음.
						 : 데이터 베이스 관점에서 보면 테이블과 유사, 내장필드인 _type에 따라 저장

		5. Document : 검색에서 가장 기본이 되는 데이터 단위.
					: elasticsearch에 저장되는 하나의 item, aritlce를 말함. 데이터베이스에서 하나의 row에 해당함.

					Field : RDBMS의 테이블의 column에 해당

		6. Node : 하나의 서버 또는 데몬, 독립적으로 동작 가능한 서버

		7. Cluster : standalne으로 동작하는 여러 노드를 하나의 그룹으로 묶어서 데이터의 분산과 공유를 할수 있도록 서비스를 구성하는것.

		8. RDBMS와의 비교
			index - database
			documentType - table
			document - row
			filed - column

elasticsearch 설치

	디렉토리 구조
		: bin -> 실행에 필요한 스크립트와 플러그인 설치 스크립트
		: config -> elasticsearch.yml와 logger.yml 파일
		: lib -> 검색엔진에서 사용하는 라이브러리
		: data -> 별도 path를 지정하지 않으면 기본 index store의 위치가 됨.
		: plugins -> 검색엔진에서 사용하는 모든 플러그인이 설치되는 위치

	실행
		: bin/elasticsearch -f

	실행 스크립트 구성

elasticsearch 경우 메모리 용량이 변경되는 불필요한 오버헤드를 방지하기 위해 최소 메모리와 최대 메모리를 동일하게 지정해서 사용하는 것을 권장


elasticsearch Standalone 구성

	Cluster 명 설정
		: standalone구성시 필요하지는 않음. 관리적인 면에서 설정하는것을 추천
		: data 디렉터리 밑에 같은 이름의 디렉터리를 생성. 같은 클러스터 노드들은 data 디렉터리의 클러스터 명 아래에 색인 데이터 저장

	Node 명 설정
		: 클러스터 구성시 노드 구분을 위해 설정
		: node.name: standalone

	Node 역할 설정
		: 마스터 노드, 데이터노드, 로드 밸런서 노드, 클라이언트 노드의 네가지 역할.
		: 싱글 노드 구성시 -> node.master: true, node.data: true

	Index Shard 와 Index Replica 설정
		: 기본값은 5, 1
		: index.number_of_shard: 5
		  index.number_of_replicas: 0
		: 인덱스 샤드는 색인 저장소로 사용되는 인덱스를 물리적으로 작은 단위의 샤드에 분산해서 저장히기 위해 설정
		  인덱스 레플리카는 장애가 발생하거나 샤드가 깨졌을때 복구와 대응을 위해 설정

	Index 기타 설정
		: index.mapper.dynamic: true -> 자동으로 필드 매핑
		  index.refresh_interval: "1s" -> 색인 operation에 대한 실시간 검색 반영을위한 주기 설정
		  action.disable_shutdown: true -> Rest API를 이용하여 노드 shutdown기능 활성화

	Network 설정
		: network.host: localhost -> IP정보 설정
		  http.port: 9200 -> http(Rest API) 기본 포트
		  http.enable: true -> http(Rest API)사용 활성화

 	Gateway 설정
 		: 클러스터의 메타 정보와 인덱스 설정, 매핑 정보 등을 어떻게 저장하고 운영할지 구성하게 된다.
 		: local gateway추천하며, 이외 타입들은 삭제될 예쩡

 	Discover 설정
 		: 클러스터 내에서 노드 간 통신과 미스터 노드 관리를 설정하는 역할 담당.
 		: 네트워크 통신을 요구하는 클러스터 구성에서는 데이터 손실이 발생할수 있어 설정 매우 중요


elasticsearch 실행 확인
 	http://localhost:9200/_nodes?pretty=true

elasticsearch Cluster 구성
 	단일 서버에 세개의 노드를 하나의 클러스터로 구성 (세개의 폴더를 만들어 elasticsearch를 세군데어 넣어주면 됨)

elasticSearch Node 구성의 이해
	Master Node : 클러스터 구성에서 전체 클러스터와 노드, 샤드 등에 대한 조정자역할.
				: 한 클러스터 내에서 마스터 노드는 최소 2개 이상으로 구성하는것이 좋음.
				  처음 선출된 마스터 노드에 장애 발생시 자동으로 다음 마스터 노드를 선출하여 장애 대응.

	Data Node : 색인 데이터를 저장, 검색 요청시 실행되며, 실제 모든 작업을 수행

	Search Loadbalancer Node : 검색요청에 대한 트래픽 분산 및 그 결과를 통합하여 리턴하는 역할

	Cline Node : 마스터 노드로 사용하지 않을 경우 지정

elasticSearch Route 기능 이해
	Route 기능 활용 : 특정 path를 갖는 데이터를 물리적으로 같은 공간에 분류하는 기능 (검색 성능 향상 가능)
				  : route path값으로 문서의 카테고리를 정보를 이용하면, 같은 카테고리의 문서들은 같은 샤드로 지정하여 색인 및 검색 가능

		No Routing : 설정하지 않으면 모든 샤드를 대상으로 색인과 검색 수행 (라우트 적용시보다 느림)
		Routing : 대상 샤드를 바로 지정하고 찾을수 있음

	Route 기능
		: 색인 필드중 unique key에 해당하는 값을 routing path로 지정. 지정된 인덱스의 샤드만 검색

elasticsearch 기본 REST API
	/_cluster : 클러스터와 관련된 작업 수행
	/_nodes : 노드와 관련된 작업 수행
	/_search : 검색 질의 수행
	/_msearch : 멀티 검색 질의 수행
	/_suggest : 검색어 자동완성 또는 추천 수행
	/{index}/{type}/{id} : URL 기본 구조

인덱스 생성
	: RDBMS에서 데이터베이스 생성에 해당하는 기능.
	  데이터를 저장하는 장소를 생성하는 과정.
	  인덱스 생성시 실제 저장될 위치와 메타 정보 생성

	  PUT, http://localhost:9200/blog


elasticsearch Index Setting 알아보기
	number_of_shards
		; 하나의 인덱스를 물리적으로 여러개의 인덱스로 나누기 위한 설정
		: 분산처리를 위해 인덱스의 단위를 정의
		: 여러개로 나뉜 작은 인덱스 단위가 샤드이고, 이 샤드의 개수를 정의하는 것이다.

	number_of_replicas
		: 클러스터 구성 환경에서 개별 샤드에 대한 복제 횟수 정함. 장애 발생시 대응이 가능하고, 검색 성능 향상.

	index.refresh_interval
		: 인덱스에 도큐먼트가 추가되거나 변경되었을 때 검색 결과에 언제 반영해줄지 주기 정하는 설정

	index.analysis
		: 검색이나 색인시 색인어 추출 역인덱스 파일 생성할때 사용할 analyzer에 대한 설정
		: anylizer는 하나의 tokenizer와 여러개의 filter로 구성

	index.store
		:  인덱스 저장 옵션은 simplefs, niofs, mmapfs, memory가 있음.
		:  win 64bit : mmapfs

elasticsearch Index mapping
	: RDBMS에서 스키마 설계시 table의 각 column값을 정의하는것과 유사

	Core Type Attribute
		: 검색엔진에서 사용하는 도큐먼트 필드의 데이터형 의미
			store -> 원본의 저장여부에 대할 설정, 일반적으로 데이터가 색인될때, _source에 데이터 원본이 저장되므로 store 옵션이 false여두 필드값 검색 가능
							 _source에 기본적으로 저장되지 않는 메타 정보등을 저장하기 위해 사용.
			index -> 색인 및 검색 가능한 필드에 대한 설정, no, not_analyzed, analyzed
							 no : 필드를 색인하지 않아 필드 값이 검색되지 않음.
			term_vector -> 색인어에 대한 메타 정보를 저장
			boost -> 도큐먼트의 적합성이나 중요 의미. 값이 높을수록 해당 필드의 검색 결과 점수 비중이 높아진다. 검색결과의 우선순위에 영향을 미친다.
			null_value -> 입력된 JSON 데이터에 해당 필드가 없는 경우 저장될 기본값 설정.
			

	_id : _가 붙은 이름은 elasticsearch 내부 변수로 사용.
		: 도큐먼트 primary key값에 해당하는 필드 설정.
		: idsQuery 나 REST API의 get 도큐먼트에 사용.
		: 설정하지 않으면 기본적으로 hashcode값이 자동 할당.

	_source : 색인된 문서에 대한 모든 필드 데이터 저장
			: 검색결과 리턴시 필드 지정을 하지 않으면 기본값으로 읽어옴.
			: 이 설정을 enable로 하면 색인 파일 용량 증가.
			: 분석이 목정이라면 설정을 disable, 검색이 목적이면 enable로 설정
			: 원본 데이터 저장 여부 : false로 하게 되면 원본 문서의 조회는 불가능함. false : 검색을 위해 색인된 토킅들만 저장되므로 통계자료에 사용

	_all : 색인된 도큐먼트 하나 또는 그 이상의 필드 색인 정보를 포함하며, 검색대상 필드 대용으로도 사용 가능.
		 : 검색필드가 명확하지 않을때 사용, 색인 파일 욕량이 증가하는 문제 발생.
		 : 서비스에 적용하기 위해서는 disable로 하고, 별도 통합검색 필드를 정의하여 개별 필드에 인덱스 옵션을 생성하는것을 추천

검색필드
	: 인덱스 옵션은 not_analyzed와 analyzed를 가짐.
	: 보통 string, number, date등의 타입을 가짐, term쿼리 또는 range쿼리 수행
	: not_analyzed설정은 해당 필드의 값이 하나의 token으로 구성된다는것을 의미, 별도의 분석작업 하지 않음.
	: analyzed설정은 해당 필드의 값에서 term, offset, position등의 정보를 추출하기 위한 분석작업 수행.

패싯필드
	: 검색결과에 대한 groupby연산 수행
	: 인덱스 옵션은 not_analyzed를 가진다. RDBMS와 유사.

정렬 필드
	: 검색결과에 대한 정렬 연산 수행
	: 인덱스 옵션은 not_analyzed가짐.
	: 기본적으로 _score필드에 대한 내림차순 정렬

부스트필드
	: 검색시 도큐먼트 적합도를 높여주기 위한 기능
	: 인덱스 옵션은 not_analyzed, analyzed

강조필드
	: 검색결과에서 강조표시를 하기위한 연산 수행
	: store 옵션은 yes
	: term_vector -> with_positions_offsets로 설정.


'elasticsearch-logstash' 카테고리의 다른 글

elasticsearch query key 설명  (0) 2016.04.22
fluentd plugin elasticsearch option  (0) 2016.04.14
logstash에 대한 설명 -퍼옴  (0) 2016.04.11
production 환경 설정.  (0) 2016.04.08
단일서버 분산환경.  (0) 2016.04.08