[Elasticsearch] Shard

[์›๋ณธ ๋งํฌ]

Elasticsearch๋Š” ์ˆ˜ํ‰ ํ™•์žฅ์„ ์œ„ํ•œ ์ƒค๋”ฉ ๊ธฐ๋Šฅ์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•œ๋‹ค.

ํ•˜๋‚˜์˜ ์ธ๋ฑ์Šค๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋…ธ๋“œ์— ๋ถ„์‚ฐ ๋ฐฐ์น˜๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ ๊ฐ๊ฐ์˜ ๋ณต์ œ๋‚˜ ํŒŒํ‹ฐ์…˜์„ ์ƒค๋“œ(Shard)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์กฐ๊ธˆ ํ˜ผ๋ž€์Šค๋Ÿฌ์šธ ์ˆ˜ ์žˆ๋Š”๋ฐ, Elasticsearch์˜ ์ƒค๋“œ๋Š” ๋ณต์ œ์™€ ํŒŒํ‹ฐ์…˜์ด ํ˜ผ์žฌ๋œ ๊ฐœ๋…์ด๋‹ค.
์ด๋ฅผ ํ†ตํ•ด์„œ ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„ํ•  ์ €์žฅํ•จ๊ณผ ๋™์‹œ์— ๋‚ด๊ตฌ์„ฑ์„ ์œ ์ง€ํ•œ๋‹ค.




Shard์˜ ์ข…๋ฅ˜

Shard์—๋Š” 2๊ฐ€์ง€ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค.

ํ•˜๋‚˜๋Š” Primary Shard๊ณ , ๋‘๋ฒˆ์งธ๋Š” Replica Shard๋‹ค. ๋ณดํ†ต ์ƒค๋“œ๋ผ๊ณ  ํ•˜๋ฉด Primary ์ƒค๋“œ๋ฅผ ๋งํ•˜๋Š”๋ฐ, ์šฉ์–ด๊ฐ€ ์ข€ ์• ๋งคํ•ด๊ฐ€์ง€๊ณ  ๋ฌธ๋งฅ์„ ์ž˜ ์ฝ์–ด์•ผ ํ•  ์ˆ˜ ์žˆ๋‹ค.


- Primary ์ƒค๋“œ
Primary ์ƒค๋“œ๋Š” ์›๋ณธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํŒŒํ‹ฐ์…˜ ๋‹จ์œ„๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

๋งŒ์•ฝ idx_items๋ผ๋Š” ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค๊ณ , Primary ์ƒค๋“œ ์ˆ˜๋ฅผ 2๊ฐœ๋กœ ์ •ํ•œ๋‹ค๋ฉด ์ด๋Ÿฐ ์‹์ด ๋  ๊ฒƒ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ฐ๊ฐ์˜ Primary ์ƒค๋“œ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.
๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ์ € ์ธ๋ฑ์Šค์— 100๊ฐœ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋‹ค๋ฉด, ๊ฐ๊ฐ์˜ ์ƒค๋“œ๊ฐ€ ์•ฝ 50๊ฐœ์”ฉ์„ ๋ถ„ํ• ํ•ด์„œ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ด๋ฅผ ํ†ตํ•ด์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งค์šฐ ์ปค์ง€๋”๋ผ๋„ ๋ถ„ํ• ํ•ด์„œ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์ธ๋ฑ์Šค ์ƒ์„ฑ์‹œ Shard์˜ ๊ธฐ๋ณธ๊ฐ’์€ 7 ์ด์ „์—์„œ๋Š” 5๊ฐœ, 7 ๋ฒ„์ „๋ถ€ํ„ฐ๋Š” 1๊ฐœ๋‹ค.
์ƒค๋“œ ๊ตฌ์„ฑ์€ ์ƒ์„ฑ ์‹œ์ ์—๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.


- Replica ์ƒค๋“œ
Replica ์ƒค๋“œ๋Š” Primary ์ƒค๋“œ์˜ ๋ฐ์ดํ„ฐ ์œ ์‹ค์„ ๋ง‰๊ธฐ ์œ„ํ•œ ์˜ˆ๋ฐฉ์ฑ…์ด์ž, ์ฝ๊ธฐ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•œ read-only replica๋‹ค.

๊ฐ Primary ์ƒค๋“œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋™์ผํ•˜๊ฒŒ ๋ณต์ œํ•˜๋Š” ๋ณต์ œ๋ณธ์ด๋ฉฐ, ์†์‹ค์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์›๋ณธ ๋ฐ์ดํ„ฐ์™€ ๋‹ค๋ฅธ ๋…ธ๋“œ์— ์ €์žฅํ•œ๋‹ค. ๊ตฌ์กฐ๋Š” ๋Œ€์ถฉ ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™๋‹ค.

๊ทธ๋ž˜์„œ ๋งŒ์•ฝ primary ์ƒค๋“œ๊ฐ€ 5๊ฐœ์— ๋ ˆํ”Œ๋ฆฌ์นด๊ฐ€ 1๊ฐœ๋ผ๋ฉด, ๊ฐ primary ์ƒค๋“œ์— ๋ ˆํ”Œ๋ฆฌ์นด๊ฐ€ ํ•˜๋‚˜์”ฉ ๋ถ™์–ด์„œ ์ด ์ƒค๋“œ๋Š” 10๊ฐœ๊ฐ€ ๋œ๋‹ค.

๋…ธ๋“œ์— ์žฅ์• ๊ฐ€ ๋‚˜์„œ ์›๋ณธ Primary ์ƒค๋“œ๊ฐ€ ์‹คํŒจํ•œ๋‹ค๋ฉด Replica๊ฐ€ Primary๋กœ ์Šน๊ฒฉ๋˜๊ณ , ๋‹ค๋ฅธ ๋…ธ๋“œ์— ๋˜๋‹ค๋ฅธ Replica๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
์• ์ดˆ์— ์žฅ์•  ๋Œ€์‘์„ ์œ„ํ•œ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋…ธ๋“œ๊ฐ€ 1๊ฐœ์ธ ๋‹จ์ผ ๋…ธ๋“œ ํด๋Ÿฌ์Šคํ„ฐ๋ผ๋ฉด, replica๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค.

๊ทธ๋ฆฌ๊ณ  replica๋Š” ์žฅ์• ๋ณต๊ตฌ์šฉ์œผ๋กœ๋งŒ ์“ฐ์ด๋Š”๊ฑด ์•„๋‹ˆ๊ณ , ์ฝ๊ธฐ์—๋„ ํ™œ์šฉ๋œ๋‹ค.

Replica๋Š” Primary ์ƒค๋“œ์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ์ธ๋ฑ์Šค ์ƒ์„ฑ ์ดํ›„์—๋„ ๋™์ ์œผ๋กœ ์กฐ์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค.




์ƒค๋“œ์™€ ๊ฒ€์ƒ‰

Primary ์ƒค๋“œ๋Š” ๋‹จ์ผ ๋ฐ์ดํ„ฐ๋ฅผ ์ชผ๊ฐœ์„œ ์ €์žฅํ•˜๋Š” ๊ฐœ๋…์ด๋ผ๊ณ  ํ–ˆ์—ˆ๋‹ค.
๊ทธ๋Ÿฌ๋ฉด ๋‹น์—ฐํžˆ ๊ฒ€์ƒ‰ํ•  ๋•Œ๋„ ์ชผ๊ฐœ์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ‘ํ•ฉํ•˜๋Š” ์ž‘์—…์ด ์ถ”๊ฐ€๋  ๊ฒƒ์ด๋‹ค.

๋งŒ์•ฝ ์ด๋ ‡๊ฒŒ 3๊ฐœ์˜ ์ƒค๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด

์‚ฌ์šฉ์ž๋Š” ์ผ๋‹จ ๋…ธ๋“œ ํ•˜๋‚˜๋ฅผ ๊ณจ๋ผ์„œ query๋ฅผ ๋‚ ๋ฆฌ๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿผ ์š”์ฒญ์„ ๋ฐ›์€ ๋…ธ๋“œ๊ฐ€ ์ด ์‹œ์ ์—์„œ coordinating node๊ฐ€ ๋œ๋‹ค.
์ตœ์ข… ์ฟผ๋ฆฌ์˜ ์™„๋ฃŒ๋ฅผ ๋ชจ๋‘ ์ฑ…์ž„์ง€๋Š” ๊ฒƒ์ด๋‹ค.

coordinating node๊ฐ€ ๋œ Node 1 ์ƒค๋“œ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ถ„ํ•  ์ €์žฅ๋œ ๋ชจ๋“  ์ƒค๋“œ๋ฅผ ์ฐพ์•„์„œ ์ฟผ๋ฆฌ๋ฅผ ๋˜ ๋•Œ๋ฆฐ๋‹ค.

์ฟผ๋ฆฌ๋ฅผ ๋•Œ๋ฆฌ๋Š” ๋Œ€์ƒ์€ Primary Shard, Replica ๋‘˜๋‹ค ๋  ์ˆ˜ ์žˆ๋‹ค.
์•„๋ฌดํŠผ coordinator๋Š” ๊ทธ ๋ถ€๋ถ„ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋“ค์„ ๋ชจ๋‘ ๋ฐ›์•„๋‹ค๊ฐ€ ์ตœ์ข… ๋ณ‘ํ•ฉ๊นŒ์ง€ ๊ฑฐ์น˜๊ณ , ์ตœ์ข… ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋Œ๋ ค์ฃผ๋Š” ํ–‰์œ„๊นŒ์ง€๋ฅผ ์ „๋ถ€ ์ฑ…์ž„์ ธ์„œ ํ–‰ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‹น์—ฐํžˆ ์ด ๋ถ€๋ถ„์—๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์กด์žฌํ•œ๋‹ค.
์ด๋Ÿฐ ๋ถ€ํ•˜๋ฅผ ์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ํŒŒํ‹ฐ์…˜๋งˆ๋‹ค ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.




์ƒค๋”ฉ ์ „๋žต: ์ƒค๋“œ์˜ ๊ฐœ์ˆ˜์™€ ํฌ๊ธฐ

์ƒค๋“œ๋ฅผ ๊ณผํ•˜๊ฒŒ ์ชผ๊ฐœ๋Š” ๊ฒƒ์€ ์ข‹์ง€ ์•Š๋‹ค. ๊ทผ๋ฐ ๊ทธ๋ ‡๋‹ค๊ณ  ํ•ด์„œ ์ƒค๋“œ๋ฅผ ๋„ˆ๋ฌด ์ ๊ฒŒ ์žก์•„์„œ ๊ฐœ๋ณ„ ์ƒค๋“œ๋“ค์ด ์ปค์ง„๋‹ค๋ฉด ๊ทธ ๋˜ํ•œ ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฒƒ๋„ ๊ฒฐ๊ตญ ์ƒํ™ฉ์„ ๋ณด๊ณ  ์กฐ์ •ํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, 50GB ๋‹จ์ผ์ƒค๋“œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒƒ์ด 50MB 1000์ƒค๋“œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ „์ฒด์ ์ธ ์ปดํ“จํŒ… ๋น„์šฉ์ด ์ ๊ฒŒ ๋“ค์ง€๋งŒ, ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ์— ํ•œ๊ณ„๊ฐ€ ์žˆ์–ด์„œ ์ตœ์ข… ์ฒ˜๋ฆฌ ์†๋„ ์ž์ฒด๋Š” ๋” ๋А๋ฆด ์ˆ˜๋„ ์žˆ๋‹ค.
์ด๊ฒŒ ์ฐธ ๋ณต์žกํ•œ ๋ฌธ์ œ๋‹ค. ๊ฐœ๋ณ„ ์ƒค๋“œ ํฌ๊ธฐ๋ฅผ ๋„ˆ๋ฌด ํฌ๊ฒŒ ์œ ์ง€ํ•˜๋ฉด ์ „๋ฐ˜์ ์ธ ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ์„ ๋–จ์–ด๋œจ๋ฆด ์ˆ˜ ์žˆ๋Š”๋ฐ๋‹ค ์žฅ์• ๋Œ€์‘์ด ์–ด๋ ค์›Œ์ง€๊ณ , ๋„ˆ๋ฌด ์ž‘๊ณ  ๋งŽ๊ฒŒ ์œ ์ง€ํ•ด๋„ ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ๊ถŒ์žฅ๋˜๋Š” ์ƒค๋“œ๋‹น ํฌ๊ธฐ๋Š” ์ตœ๋Œ€ 10GB~50GB ์ •๋„๋‹ค. ๊ฒฝํ—˜์ ์œผ๋กœ๋Š” 20GB~40GB ์ •๋„๊ฐ€ ์ ์ ˆํ•˜๋‹ค๋Š”๊ฒŒ ์ค‘๋ก ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.
์ผ๋ฐ˜์ ์œผ๋กœ ํž™ 1GB๋‹น ์ตœ๋Œ€ ์ƒค๋“œ๋Š” 20๊ฐœ ์ •๋„๋ฅผ ๊ถŒ์žฅํ•œ๋‹ค.




์ƒค๋”ฉ ์ „๋žต: Replica

Replica๋Š” ์žฅ์• ๋Œ€์‘์šฉ์œผ๋กœ ์‚ฌ์šฉ๋˜๊ธฐ๋„ ํ•˜์ง€๋งŒ, ์ฝ๊ธฐ ์„ฑ๋Šฅ์„ ๋ณ‘๋ ฌ์ ์œผ๋กœ ๋Š˜๋ฆฌ๋Š” ๋ฐ์—๋„ ๊ต‰์žฅํžˆ ์œ ์šฉํ•˜๋‹ค.
ํ•˜์ง€๋งŒ Replica๊ฐ€ ๋งŽ๋‹ค๋Š”๊ฑด ๊ทธ๋งŒํผ write์— ๋”ฐ๋ฅธ ๋ณต์ œ ์—ฐ์‚ฐ์ด ๋งŽ์•„์ง„๋‹ค๋Š” ๊ฒƒ์ด๋‹ˆ, write ๋ถ€ํ•˜๋ฅผ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค๋Š” ๋ง์ด๊ธฐ๋„ ํ•˜๋‹ค.

๊ทธ๋ž˜์„œ ์ผ๋ฐ˜์ ์œผ๋กœ replica ์ˆ˜๋Š” 1๊ฐœ๋ฅผ ์‚ฌ์šฉํ•˜๋˜, ์“ฐ๊ธฐ์— ๋น„ํ•ด์„œ ์ฝ๊ธฐ๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ์— ๋Œ€ํ•ด์„œ๋Š” 2~3 ์ •๋„๋ฅผ ์ฃผ๊ธฐ๋„ ํ•œ๋‹ค.



์ฐธ์กฐ
https://esbook.kimjmin.net/03-cluster/3.2-index-and-shards
https://j.blaszyk.me/tech-blog/exploring-apache-lucene-scale/
https://danawalab.github.io/elastic/2020/07/21/Elasticsearch-Index-Shard-How.html
https://stackoverflow.com/questions/15694724/shards-and-replicas-in-elasticsearch
https://opster.com/guides/elasticsearch/capacity-planning/elasticsearch-number-of-shards/
https://discuss.elastic.co/t/too-big-a-shard-vs-too-many-shards/75889/6