Skip to content

Latest commit

ย 

History

History
89 lines (65 loc) ยท 5.01 KB

File metadata and controls

89 lines (65 loc) ยท 5.01 KB

Elassticsearch

Elasticsearch๋ž€?

Apache lucene ๊ธฐ๋ฐ˜์˜ java ์˜คํ”ˆ์†Œ์Šค ๋ถ„์‚ฐ ๊ฒ€์ƒ‰ ์—”์ง„์ž…๋‹ˆ๋‹ค. "๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ"๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ณ  ๊ฑฐ์˜ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ €์žฅ, ๊ฒ€์ƒ‰, ๋ถ„์„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Elasticsearch ํŠน์ง•

์žฅ์ 

  • ๋น ๋ฆ„
    • ๊ฑฐ์˜ ์‹ค์‹œ๊ฐ„ ๊ฒ€์ƒ‰ ํ”Œ๋žซํผ์ด๋‹ค.
    • Lucene๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋˜์–ด ํ’€ํ…์ŠคํŠธ ๊ฒ€์ƒ‰์— ๋›ฐ์–ด๋‚˜๋‹ค
  • ๋ณธ์งˆ์ƒ ๋ถ„์‚ฐ์ 
    • elasticsearch์— ์ €์žฅ๋œ ๋ฌธ์„œ๋Š” ์ƒค๋“œ๋ผ๊ณ  ํ•˜๋Š” ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ์— ๋ถ„์‚ฐ์ ์œผ๋กœ ์ €์žฅ
    • ์ƒค๋“œ๋Š” ๋ณต์ œ๋˜์–ด ์žฅ์•  ๋Œ€์‘ ๊ฐ€๋Šฅ(replication)
  • ๊ด‘๋ฒ”์œ„ํ•œ ๊ธฐ๋Šฅ ์„ธํŠธ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ
    • ๋ฐ์ดํ„ฐ ๋กค์—…, ์ธ๋ฑ์Šค ์ˆ˜๋ช… ์ฃผ๊ธฐ ๊ด€๋ฆฌ ๋“ฑ๊ณผ ๊ฐ™์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋” ํšจ์œจ์ ์œผ๋กœ ์ €์žฅํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ ํƒ‘์žฌ
  • ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘, ์‹œ๊ฐํ™”, ๋ณด๊ณ ๋ฅผ ๊ฐ„์†Œํ™” ํ•จ
    • ๋ฐ์ดํ„ฐ๋ฅผ ๋” ์‰ฝ์ œ ์ฒ˜๋ฆฌ
    • kibana => ์‹ค์‹œ๊ฐ„ ์‹œ๊ฐํ™”, beats+logstash => ์ƒ‰์ธ ์ „ ๋ฐ์ดํ„ฐ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
  • Rest API ์ง€์›
  • ๋ถ„์‚ฐ ๋ฌธ์„œ ์ €์žฅ์†Œ๋กœ์„œ json ํ˜•ํƒœ๋กœ ์ง๋ ฌํ™”๋œ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.

๋‹จ์ 

  • ์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅ
  • ํŠธ๋žœ์žญ์…˜ ์ง€์›ํ•˜์ง€ ์•Š์Œ
  • ์ง„์ •ํ•œ ์˜๋ฏธ์˜ ์—…๋ฐ์ดํŠธ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • document๊ฐ„์˜ join์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋‹ค.

ํ™œ์šฉ ์˜ˆ์‹œ

  • ๊ณ ๊ฐ์ด ํŒ๋งค ์ œํ’ˆ์„ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š” ์˜จ๋ผ์ธ ์›น ์Šคํ† ์–ด๋ฅผ ์šด์˜. elasticsearch๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „์ฒด ์ œํ’ˆ ์นดํƒˆ๋กœ๊ทธ ๋ฐ ์žฌ๊ณ  ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ทธ์— ๋Œ€ํ•œ ๊ฒ€์ƒ‰ ๋ฐ ์ž๋™ ์™„์„ฑ ์ œ์•ˆ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋กœ๊ทธ ๋˜๋Š” ํŠธ๋žœ์žญ์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ๋ถ„์„ํ•˜์—ฌ ์ถ”์ด, ํ†ต๊ณ„, ์š”์•ฝ ์ •๋ณผ๋ฅด ์–ป๊ฑฐ๋‚˜ ์ด์ƒ ์š”์ธ์„ ์•Œ์•„๋‚ธ๋‹ค.
  • ๋ถ„์„/๋น„์ฆˆ๋‹ˆ์Šค ์ธํ…”๋ฆฌ์ „์Šค ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜์—ฌ ๋ฐฉ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์‹ ์†ํ•˜๊ฒŒ ์กฐ์‚ฌ, ๋ถ„์„, ์‹œ๊ฐํ™”, ์ž„์‹œ ์งˆ์˜๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ถ๋‹ค. ์ด ๊ฒฝ์šฐ์—๋Š” elasticserach๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ €์žฅํ›„ kibana๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ค‘ ์ค‘์š”ํ•œ ์š”์†Œ๋ฅผ ์‹œ๊ฐํ™”ํ•  ๋งž์ถคํ˜• ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

ELK(Elasticsearch Logstash Kibana) stack

Elastic Search

  • ์„œ๋ฒ„๋กœ ๋ถ€ํ„ฐ ์›ํ•˜๋Š” ๋ชจ๋“  ์œ ํ˜•์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰, ๋ถ„์„ ๋ฐ ์‹œ๊ฐํ™” ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” Elastic์˜ ์˜คํ”ˆ ์†Œ์Šค ์„œ๋น„์Šค ์ œํ’ˆ์ด๋‹ค.

Logstash

  • ๋‹ค์–‘ํ•œ ์†Œ์Šค(csv, db..)์˜ ๋กœ๊ทธ ๋˜๋Š” ํŠธ๋žœ์žญ์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘, ์ง‘๊ณ„, ํŒŒ์‹ฑํ•˜์—ฌ elastic search๋กœ ์ „๋‹ฌํ•œ๋‹ค.

Kibana

  • ๋น ๋ฅธ ๊ฒ€์ƒ‰์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง



Elasticsearch ๋…ธ๋“œ์˜ ์ข…๋ฅ˜

Cluster

  • elasticsearch ๋‚ด ๊ฐ€์žฅ ํฐ ์‹œ์Šคํ…œ ๋‹จ์œ„
  • ์ตœ์†Œ ํ•˜๋‚˜ ์ด์ƒ์˜ ๋…ธ๋“œ๋กœ ์ด๋ฃจ์–ด์ง„ ๋…ธ๋“œ์˜ ์ง‘ํ•ฉ
  • ์„œ๋กœ ๋‹ค๋ฅธ ํด๋Ÿฌ์Šคํ„ฐ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ ‘๊ทผ ๊ตํ™˜์„ ํ•  ์ˆ˜ ์—†์Œ, ๋…๋ฆฝ์ ์ธ ์‹œ์Šคํ…œ์œผ๋กœ ์œ ์ง€
  • ์—ฌ๋Ÿฌ๋Œ€์˜ ์„œ๋ฒ„๊ฐ€ ํ•˜๋‚˜์˜ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ณ  ํ•œ ์„œ๋ฒ„์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค.

Node

  • ํด๋Ÿฌ์Šคํ„ฐ์— ํฌํ•จ๋œ ๋‹จ์ผ ์„œ๋ฒ„๋กœ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ƒ‰์ธํ™” ๋ฐ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์— ์ฐธ์—ฌ
  • mater-eligible
    • ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ œ์–ดํ•˜๋Š” ๋งˆ์Šคํ„ฐ๋กœ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๋…ธ๋“œ์ด๋‹ค.
    • ์ธ๋ฑ์Šค ์ƒ์„ฑ, ์‚ญ์ œ
    • ํด๋Ÿฌ์Šคํ„ฐ ๋…ธ๋“œ์˜ ์ถ”์ , ๊ด€๋ฆฌ
    • ๋ฐ์ดํ„ฐ ์ž…๋ ฅ ์‹œ ํ• ๋‹นํ•  ์ƒค๋“œ ์„ ํƒ
  • data
    • document๊ฐ€ ์ €์žฅ๋˜๋Š” ๋…ธ๋“œ์ด๋ฉฐ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ถ„์‚ฐ ์ €์žฅ๋˜๋Š” ๋ฌผ๋ฆฌ์  ๊ณต๊ฐ„์ธ ์ƒค๋“œ๊ฐ€ ๋ฐฐ์น˜๋˜๋Š” ๋…ธ๋“œ์ด๋‹ค. CRUD ์ƒ‰์ธ, ๊ฒ€์ƒ‰, ํ†ต๊ณ„ ๋“ฑ์˜ ๋ฐ์ดํ„ฐ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ ๋งŽ์€ ๋ฆฌ์†Œ์Šค๊ฐ€ ํ•„์š”
  • ingest
    • ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™˜ํ•˜๋Š” ๋“ฑ ์‚ฌ์ „ ์ฒ˜๋ฆฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ์‹คํ–‰ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค
  • coordination only node
    • ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ๋ฐ›๊ณ  ๋ผ์šด๋“œ ๋กœ๋นˆ ๋ฐฉ์‹์œผ๋กœ ๋ถ„์‚ฐ์„ ํ•˜๋Š” ๋…ธ๋“œ.



Elasticsearch node์— ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์ƒค๋“œ๊ฐ€ ํ•„์š”ํ• ๊นŒ?

์ƒค๋“œ

  • document๋“ค์€ Index์— ์ €์žฅ๋˜๋ฉฐ ๊ฐ index๋Š” ํ•œ๊ฐœ ํ˜น์€ ์—ฌ๋Ÿฌ๊ฐœ์˜ shard๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ๊ฐ ์ƒค๋“œ๋Š” lucene index์ด๋ฉฐ ์ด๋Š” elasticsearch ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์— ์ธ๋ฑ์‹ฑ์„ ํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ ์ผ๋ถ€๋ฅผ ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•œ ๋…๋ฆฝ์ ์ธ ๊ฒ€์ƒ‰ ์—”์ง„์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.
  • document๋ฅผ ์ž…๋ ฅํ•  ๋•Œ index์— ์ž…๋ ฅํ•˜์ง€๋งŒ index๋Š” ์ƒค๋“œ๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ƒค๋“œ์— ์ž…๋ ฅํ•  ๋•Œ, elasticsearch๋Š” ์ฃผ๊ธฐ์ ์œผ๋กœ ๋””์Šคํฌ์— lucene ์„ธ๊ทธ๋จผํŠธ ํ˜•ํƒœ๋กœ ์ €์žฅํ•˜๋ฉฐ ์ด ์ž‘์—… ์ดํ›„ ํ•ด๋‹น document ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์„ธ๊ทธ๋จผํŠธ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๋ฉด ์ฃผ๊ธฐ์ ์œผ๋กœ ๋” ํฐ ์„ธ๊ทธ๋จผํŠธ ๋ณ‘ํ•ฉ์ด๋˜๊ณ  ์ด ๊ณผ์ •์„ merging ์ž‘์—…์ด๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ ๋””์Šคํฌ io์— ํฐ ์˜ํ–ฅ์„ ๋ฐ›๋Š”๋‹ค.

Replica

  • ๊ฐ ์ธ๋ฑ์Šค์—๋Š” shard๊ฐ€ ์กด์žฌํ•˜๋ฉฐ ๊ฐ node๋งˆ๋‹ค primary shard๊ฐ€ ์žˆ๊ณ  ์ด๋ฅผ ๋ณต์ œํ•œ replica๊ฐ€ ์žˆ๋‹ค. primary shard๋ฅผ ๊ฐ–๊ณ  ์žˆ์ง€ ์•Š์€ ๋‹ค๋ฅธ ์„œ๋ฒ„๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™”ํ•˜๊ณ  ์žฅ์•  ๋ฐœ์ƒ ์‹œ ๋Œ€์ฒ˜ํ•˜๊ธฐ ์œ„ํ•ด primary shard๋ฅผ ๋ณต์ œํ•œ replica๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค.
  • ์žฅ์•  ๋ฐœ์ƒ ์‹œ replica๊ฐ€ primary shard๋กœ ์Šน๊ฒฉ