[Qdrant] ๋ถ„์‚ฐ DB ๊ตฌ์„ฑ

Qdrant๋Š” ์ž์ฒด์ ์œผ๋กœ Raft ๊ธฐ๋ฐ˜์˜ ๋ถ„์‚ฐ์‹œ์Šคํ…œ์„ ์ œ๊ณตํ•œ๋‹ค.
์ด๋ฅผ ํ†ตํ•ด ๋ฉ€ํ‹ฐ๋…ธ๋“œ, ๋ฉ€ํ‹ฐ์ƒค๋“œ ๊ธฐ๋ฐ˜์˜ ์ˆ˜ํ‰ ์ฒ˜๋ฆฌ๋Ÿ‰ ํ™•์žฅ, ๊ณ ๊ฐ€์šฉ์„ฑ ๋ณด์žฅ ๋“ฑ์„ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

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




Docker๋กœ ๊ตฌ์„ฑํ•ด๋ณด๊ธฐ (Docker compose)

docker compose๋ฅผ ํ†ตํ•ด์„œ ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ์„ ํ•œ๋ฒˆ ๋งŒ๋“ค์–ด๋ณด์ž.
์ผ๋‹จ, master ์—ญํ• ์„ ํ•  ์ฒซ๋ฒˆ์งธ DB ๋…ธ๋“œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
์ดํ›„์— ๋ฐ”๋€” ์ˆ˜๋Š” ์žˆ์œผ๋‚˜, ์ฒ˜์Œ ์‹œ์ž‘ํ•˜๋Š”๊ฒŒ ์ฒซ๋ฒˆ์งธ ๋งˆ์Šคํ„ฐ๊ฐ€ ๋œ๋‹ค.

7333 ํฌํŠธ๋กœ ์—ด๊ณ , CLUSTER ์˜ต์…˜ ์ผœ๊ณ , ์‹คํ–‰ํ• ๋•Œ ํ”Œ๋ž˜๊ทธ๋„ ๋„ฃ์–ด์ค˜์•ผ ํ•œ๋‹ค.
uri ํ”Œ๋ž˜๊ทธ๋กœ ์ž๊ธฐ ์ž์‹ ์—๊ฒŒ ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋กœ๋ฅผ ๋ช…์‹œํ•ด์ค€๋‹ค.

๊ทธ๋Ÿผ

ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ์ด ํ™œ์„ฑํ™”๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
์ด๋ ‡๊ฒŒ ์ฒซ๋ฒˆ์งธ๋กœ ๊ตฌ์„ฑํ•œ ๊ฒƒ์ด ์ž๋™์œผ๋กœ Leader(master) ๋…ธ๋“œ๊ฐ€ ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํ˜„์žฌ๋Š” ํ”ผ์–ด๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ €๊ธฐ์— ํ•˜๋‚˜์”ฉ ๋ถ™์—ฌ๋‚˜๊ฐ€๋Š” ๊ฒƒ์ด๋‹ค.

2๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ๋„์›Œ๋ณด์ž.

์„ค์ •์ด ํฌ๊ฒŒ ๋‹ค๋ฅผ ๊ฒƒ์€ ์—†์œผ๋‚˜, --bootstrap ํ”Œ๋ž˜๊ทธ๋ฅผ ํ†ตํ•ด์„œ ์—ฐ๊ฒฐํ•  ์ค‘์‹ฌ ๋…ธ๋“œ๋ฅผ ์ง€์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค.
๊ทธ๋ฆฌ๊ณ  uri ํ”Œ๋ž˜๊ทธ๋ฅผ ํ†ตํ•ด ์ž๊ธฐ ์ž์‹ ์˜ ์ง„์ž…์ ์„ ๋ช…์‹œํ•ด์ฃผ๋Š” ๊ฒƒ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ•„์š”ํ•˜๋‹ค.


์‹คํ–‰ํ•ด๋ณด๋ฉด


์ด์ œ ๋ฉ”์ธ ๋…ธ๋“œ์˜ ํ”ผ์–ด ๋ชฉ๋ก์— ๋œจ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๊ณ 


๋ฐฉ๊ธˆ ์ถ”๊ฐ€ํ•œ 2๋ฒˆ์งธ ๋…ธ๋“œ๋Š” Follower(slave)๋กœ ์ฐธ์—ฌํ•œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
์ด๊ฒƒ๋„ leader ๋…ธ๋“œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ง์ ‘ read/write๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์ดํ›„๋กœ ๋…ธ๋“œ๋ฅผ ๋” ์ถ”๊ฐ€ํ•˜๋”๋ผ๋„, ๋ฐฉ๋ฒ•์€ ๋‹ฌ๋ผ์ง€์ง€ ์•Š๋Š”๋‹ค.

๋ถ€ํŠธ์ŠคํŠธ๋žฉ ๋„ฃ๊ณ , uri ๋„ฃ์–ด์„œ ๋ณ‘๋ ฌ์ ์œผ๋กœ ๊ณ„์† ์ด์–ด๋ถ™์ด๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.





์ž๋™ Leader ์„ ์ถœ

๊ทธ๋Ÿผ ์ด์ œ ๋…ธ๋“œ ์‚ฌ๋ง์— ๋”ฐ๋ฅธ ํšŒ๋ณต์ด ์ž˜ ๋˜๋Š”์ง€ ๋ณด์ž.
Follower๊ฐ€ ์ฃฝ๋Š” ๊ฒƒ๋„ ๊ทธ๋ ‡์ง€๋งŒ, ์‚ฌ์‹ค ์ค‘์š”ํ•œ๊ฑด Leader๊ฐ€ ์ฃฝ๋Š” ์ตœ์•…์˜ ์‚ฌํƒœ๋‹ค.

Leader๋ฅผ ํ•œ๋ฒˆ ์ฃฝ์—ฌ๋ณด๋ฉด


๋‚˜๋จธ์ง€ 2๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์‹คํŒจํ–ˆ๋‹ค๊ณ  ๋‚œ๋ฆฌ์น˜๋‹ค๊ฐ€


์ž๊ธฐ๋“ค ์ค‘์—์„œ ์ƒˆ๋กœ์šด ํ›„๋ณด๋ฅผ Leader๋กœ ์„ ์ถœํ•œ๋‹ค.


๋งŒ์•ฝ ๊ธฐ์กด Leader ๋…ธ๋“œ๊ฐ€ ๋‹ค์‹œ ๋‚ ์•„๋‚˜๋”๋ผ๋„, Leader์˜ ์ง€์œ„๋ฅผ ๋˜์ฐพ์ง„ ๋ชปํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ ์ƒํ™ฉ์— ๋”ฐ๋ผ Leader๊ฐ€ ๋ฐ”๋€” ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋‹จ์ผ ์—”๋“œํฌ์ธํŠธ๋กœ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค.

์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌ์„ฑ๋œ ํด๋Ÿฌ์Šคํ„ฐ๋ผ๋ฉด ์ด ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ๋‹จ์ผ ์—”๋“œํฌ์ธํŠธ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ๋งŒ๋“ค์–ด๋‘ฌ์•ผ ํ•œ๋‹ค.
๋Œ€๋ถ€๋ถ„์˜ managed cluster ํ™˜๊ฒฝ๋“ค์ด ๊ทธ๋ ‡๊ธฐ๋„ ํ•˜๊ณ .


ํ…Œ์ŠคํŠธ์— ์‚ฌ์šฉํ•œ docker compose ๊ตฌ์„ฑ์€ github์— ์žˆ๋‹ค.
https://github.com/myyrakle/docker-compose/blob/master/qdrant-cluster/docker-compose.yml




์ƒค๋“œ์™€ Replica

qdrant๋„ elasticsearch ๊ฐ™์€ ๋ฉ€ํ‹ฐ๋…ธ๋“œ DB๋“ค๊ณผ ๋™๋“ฑํ•˜๊ฒŒ, ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ๋…ธ๋“œ์— ์ชผ๊ฐœ์„œ ์ €์žฅํ•˜๋Š” ์ƒค๋“œ(partition), ๋™์ผ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ๋…ธ๋“œ์— ๋ณต์ œํ•ด์„œ ๋ฐฑ์—…ํ•˜๋Š” ๋ ˆํ”Œ๋ฆฌ์นด(replica)๋ฅผ ๋ชจ๋‘ ์ง€์›ํ•œ๋‹ค.

์ƒค๋“œ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•์€ ์ดํ›„ ํฌ์ŠคํŠธ์—์„œ ๋‹ค๋ค„๋ณธ๋‹ค.



์ฐธ์กฐ
https://qdrant.tech/documentation/guides/distributed_deployment

https://qdrant.tech/documentation/guides/configuration/
https://medium.com/@vardhanam.daga/distributed-deployment-of-qdrant-cluster-with-sharding-replicas-e7923d483ebc