기본 동작이지만 가장 궁금했던 내용에 대해 테스트를 진행했다.
N개의 노드를 구성하고, 마스터 노드를 제외한 나머지 노드에 검색 또는 문서 생성 등을 요청할 경우 잘 생성될까? 이론상으로 알고 있는 내용을 확인하기 위함이다.
환경 구축
Node는 2개로 구성하고 각자의 역할을 다음과 같이 정의한다.
1번 노드: 마스터 노드, 데이터 노드, 포트: 9200
2번 노드: 데이터 노드, 포트: 9201
1번 노드 설정
cluster.name: my-cluster
node.name: node-master
node.master: true
node.data: true
node.ingest: false
http.port: 9200
network.host: [_site_, _local_]
discovery.seed_hosts: ["192.168.0.9"]
cluster.initial_master_nodes: ["node-1"]
2번 노드 설정
cluster.name: my-cluster
node.name: node-data
node.master: false
node.data: true
node.ingest: false
http.port: 9201
network.host: [_site_, _local_]
discovery.seed_hosts: ["192.168.0.9"]
cluster.initial_master_nodes: ["node-1"]
테스트 진행에 앞서 검색, 문서 생성 등 기본 API에 대한 내용은 지난 포스트를 참고.
테스트 케이스 정의
Test case 1) 마스터 노드의 포트로 검색 요청
Test case 2) 데이터 노드의 포트로 검색 요청
Test case 3) 마스터 노드의 포트로 문서 생성 요청
Test case 4) 데이터 노드의 포트로 문서 생성 요청
테스트는 기존에 생성해둔 test_index 인덱스를 활용했다.
Test case 1) 마스터 노드의 포트로 검색 요청
조회
GET http://localhost:9200/test_index/_search
응답 (정상 조회 확인)
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "test_index",
"_type" : "_doc",
"_id" : "JvwH9YYBZI6tAZLb_kao",
"_score" : 1.0,
"_source" : {
"field1" : "Elasticsearch Basics Test, I like elasticsearch.",
"field2" : "Elasticsearch Basics Test, I like elasticsearch.",
"field3" : "Elasticsearch Basics Test, I like elasticsearch.",
"field4" : "Elasticsearch Basics Test, I like elasticsearch."
}
}
]
}
}
Test case 2) 데이터 노드의 포트로 검색 요청
조회
GET http://localhost:9201/test_index/_search
응답 (정상 조회 확인)
{
"took" : 3,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "test_index",
"_type" : "_doc",
"_id" : "JvwH9YYBZI6tAZLb_kao",
"_score" : 1.0,
"_source" : {
"field1" : "Elasticsearch Basics Test, I like elasticsearch.",
"field2" : "Elasticsearch Basics Test, I like elasticsearch.",
"field3" : "Elasticsearch Basics Test, I like elasticsearch.",
"field4" : "Elasticsearch Basics Test, I like elasticsearch."
}
}
]
}
}
Test case 3) 마스터 노드의 포트로 문서 생성 요청
문서 생성 요청
POST http://localhost:9201/test_index/_doc/2
문서 정의
{
"field1": "Example text1",
"field2": "Example text1",
"field3": "Example text1",
"field4": "Example text1"
}
응답
{
"_index": "test_index",
"_type": "_doc",
"_id": "2",
"_version": 1,
"result": "created",
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"_seq_no": 6,
"_primary_term": 8
}
Test case 4) 데이터 노드의 포트로 문서 생성 요청
문서 생성 요청
POST http://localhost:9201/test_index/_doc/3
문서 정의
{
"field1": "Example text2",
"field2": "Example text2",
"field3": "Example text2",
"field4": "Example text2"
}
응답
{
"_index": "test_index",
"_type": "_doc",
"_id": "3",
"_version": 1,
"result": "created",
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"_seq_no": 5,
"_primary_term": 8
}
최종 데이터 확인
GET http://localhost:9201/test_index/_search?pretty
응답
{
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 3,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "test_index",
"_type" : "_doc",
"_id" : "JvwH9YYBZI6tAZLb_kao",
"_score" : 1.0,
"_source" : {
"field1" : "Elasticsearch Basics Test, I like elasticsearch.",
"field2" : "Elasticsearch Basics Test, I like elasticsearch.",
"field3" : "Elasticsearch Basics Test, I like elasticsearch.",
"field4" : "Elasticsearch Basics Test, I like elasticsearch."
}
},
{
"_index" : "test_index",
"_type" : "_doc",
"_id" : "3",
"_score" : 1.0,
"_source" : {
"field1" : "Example text2",
"field2" : "Example text2",
"field3" : "Example text2",
"field4" : "Example text2"
}
},
{
"_index" : "test_index",
"_type" : "_doc",
"_id" : "2",
"_score" : 1.0,
"_source" : {
"field1" : "Example text1",
"field2" : "Example text1",
"field3" : "Example text1",
"field4" : "Example text1"
}
}
]
}
}
결론
http.port로 수신 받는 노드는 코디네이팅 노드의 역할을 수행하기 때문에 어느 노드로 요청을 하든 조회 및 문서 생성 모두 잘 동작하는 것을 확인했다.
★ 테스트 구성 시 특이사항 정리
1. 윈도우에서 실행 시 이슈
- elasticsearch 설치 경로 중간에 공백이 들어가는 경우 실행 안됨.
- 공백 제거 하든지 다른 경로로 옮겨서 실행
2. with the same id but is a different node instance 에러 발생
- 단일 노드로 테스트 하다가 그 디렉토리 그대로 옮겨서 다른 노드 만들어서 실행했더니 에러
- 디렉토리 안에 있는 data 디렉토리까지 다 옮겨서 node는 다른데 id가 같은 현상 발생
- 옮긴 후에 새로 만들 node의 data 디렉토리는 제거함, 또 다른 방법으로는 data 디렉토리를 분리하는 방법도 있음.
3. node.name은 수시로 변경 가능
- elasticsearch 재시작만하면 변경된 node.name로 사용 가능
'BigData > ElasticSearch' 카테고리의 다른 글
초보자를 위한 Elasticsearch 설정 파일(elasticsearch.yml) 가이드 (0) | 2023.03.23 |
---|---|
Elasticsearch 노드의 종류와 역할 (feat 동작 흐름) (0) | 2023.03.22 |
Elasticsearch에서 사용되는 주요 용어 10가지 (0) | 2023.03.21 |
Keyword Field를 활용하는 다양한 쿼리 예제 (0) | 2023.03.20 |
초보자를 위한 Elasticsearch 시작하기: CRUD (0) | 2023.03.19 |