Clustering / Replication / Sharding

์†ก์œค์žฌยท2025๋…„ 1์›” 27์ผ

๐Ÿ“ŒClustering

ํด๋Ÿฌ์Šคํ„ฐ๋ง์€ ์—ฌ๋Ÿฌ ๋Œ€์˜ ์„œ๋ฒ„(๋˜๋Š” ๋…ธ๋“œ)๋ฅผ ํ•˜๋‚˜์˜ ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์–ด ํ•˜๋‚˜์˜ ์‹œ์Šคํ…œ์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๋„๋ก ๊ตฌ์„ฑํ•˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํด๋Ÿฌ์Šคํ„ฐ๋ง์€ Active & Active ๋ฐฉ์‹๊ณผ Active & StandBy ๋ฐฉ์‹์ด ์žˆ๋‹ค.

  • ๊ณ ๊ฐ€์šฉ์„ฑ(High Availability): ํ•œ ์„œ๋ฒ„์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ๋‹ค๋ฅธ ์„œ๋ฒ„๊ฐ€ ๋Œ€์ฒดํ•˜์—ฌ ์„œ๋น„์Šค ์ค‘๋‹จ์„ ์ตœ์†Œํ™”.
  • ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ(Load Balancing): ์š”์ฒญ์„ ์—ฌ๋Ÿฌ ์„œ๋ฒ„์— ๋ถ„์‚ฐ์‹œ์ผœ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ.
  • ๋ถ„์‚ฐ ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•˜์—ฌ Single point of failure์™€ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” Fail Over ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ
  • ๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ๋…ธ๋“œ๋“ค ๊ฐ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™”

Single point of failure(๋‹จ์ผ ์žฅ์• ์ ,SPOF)
์‹œ์Šคํ…œ ๊ตฌ์„ฑ ์š”์†Œ ์ค‘์—์„œ, ๋™์ž‘ํ•˜์ง€ ์•Š์œผ๋ฉด ์ „์ฒด ์‹œ์Šคํ…œ์ด ์ค‘๋‹จ๋˜๋Š” ์š”์†Œ๊ฐ€ ์ด์ค‘ํ™”๊ฐ€ ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด SPOF์ผ ๊ฐ€๋Šฅ์„ฑ ๋†’์Œ

Fail over
์‹ค ์šด์šฉํ™˜๊ฒฝ(์ปดํ“จํ„ฐ ์„œ๋ฒ„, ์‹œ์Šคํ…œ, ๋„คํŠธ์›Œํฌ) ๋“ฑ์—์„œ ์ด์ƒ์ด ์ƒ๊ฒผ์„ ๋•Œ, ๋Œ€์ฒด ์ž‘๋™ ๋˜๋Š” ์žฅ์•  ๊ทน๋ณต(์กฐ์น˜)์„ ์œ„ํ•ด ์˜ˆ๋น„ ์šด์šฉํ™˜๊ฒฝ์œผ๋กœ ์ž๋™์ „ํ™˜๋˜๋Š” ๊ธฐ๋Šฅ

Active & Active

  • ์„œ๋ฒ„ ํ•œ๋Œ€๊ฐ€ ์ฃฝ๋”๋ผ๋„ ํ•˜๋‚˜์˜ ์„œ๋ฒ„๊ฐ€ ๋™์ž‘ํ•˜๊ณ  ์žˆ์–ด์„œ ์„œ๋น„์Šค์— ํฐ ๋ฌธ์ œ X
  • ๋‹ค๋ฅธ ์„œ๋ฒ„๊ฐ€ ๋™์ž‘ํ•˜๋Š” ๋™์•ˆ ๋ณต๊ตฌ๋ฅผ ํ•˜์—ฌ ์„œ๋น„์Šค์˜ ์ค‘๋‹จ ์—†์Œ
  • ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๊ฐ€ํ•ด์ง€๋Š” ๋ถ€ํ•˜๊ฐ€ ๋‘๊ฐœ๋กœ ๋‚˜๋ˆ ์ง€๋ฏ€๋กœ CPU, Memory ๋ถ€ํ•˜๋„ ์ค„์–ด๋“ฆ
  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์„œ๋ฒ„๊ฐ€ ํ•˜๋‚˜์˜ ์Šคํ† ๋ฆฌ์ง€ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ‘๋ชฉํ˜„์ƒ ๋ฐœ์ƒ

Active & Stand-By

  • Active ์ƒํƒœ์˜ ์„œ๋ฒ„์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์„ ๋•Œ Fail over๋ฅผ ํ•˜์—ฌ Stand-by ์„œ๋ฒ„๋ฅผ Active๋กœ ์ „ํ™˜ํ•˜์—ฌ ๋ฌธ์ œ์— ๋Œ€์‘
  • Fail over๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์‹œ๊ฐ„๋™์•ˆ์—๋Š” ์„œ๋น„์Šค๊ฐ€ ์ค‘๋‹จ๋  ์ˆ˜ ๋ฐ–์— ์—†์Œ
  • ๊ฒฐ๋ก ์ ์œผ๋กœ ํ•œ ๋Œ€๋งŒ ์šด์˜ -> ํšจ์œจ์€ Active&Active์˜ ์ ˆ๋ฐ˜
  • ๋น„์šฉ์ด ์ €๋ ด (standby๋Š” ์‹ค์ œ๋กœ ์šด์šฉ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ)

๐Ÿ“ŒReplication

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

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ† ๋ฆฌ์ง€ ๋ณต์ œ
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„๋ฅผ ํ™•์žฅํ•œ Clustering๊ณผ ๋‹ฌ๋ฆฌ ์„œ๋ฒ„์™€ ์Šคํ† ๋ฆฌ์ง€ ๋ชจ๋‘ ํ™•์žฅ
  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ DB๋ฅผ ๊ถŒํ•œ์— ๋”ฐ๋ผ ์ˆ˜์ง์ ์ธ ๊ตฌ์กฐ(Master-Slave)๋กœ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ์‹
    • Master : INSERT, UPDATE, DELETE
    • Slave : SELECT
  • Slave ์„œ๋ฒ„ ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ํ†ตํ•ด ๋ถ„์‚ฐํ•˜์—ฌ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ๋„์›€์ด ๋œ๋‹ค.
  • ๋ฒ„์ „ ๊ด€๋ฆฌ ํ•„์š”, ์ ์–ด๋„ Slave๊ฐ€ ์ƒ์œ„๋ฒ„์ „
  • ๋น„๋™๊ธฐ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๊ด€์„ฑ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์–ป์ง€ ๋ชป ํ•  ์ˆ˜ ์žˆ์Œ
    • ๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ Replicationํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์†๋„๊ฐ€ ๋А๋ ค์ง
  • Master ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋˜๋ฉด ๋ณต๊ตฌ ๋ฐ ๋Œ€์ฒ˜ ๊นŒ๋‹ค๋กœ์›€

ํ˜„์žฌ๋Š” master-slave ๋‹จ์–ด๋ฅผ ์•ˆ์“ฐ๋Š” ์ถ”์„ธ์ธ ๋งŒํผ source-replica ๊ตฌ์กฐ๋กœ ๋ถˆ๋ฆฌ๊ธฐ๋„ ํ•จ.

๊ตฌ์ถ• ๋ชฉ์ 

  • ์Šค์ผ€์ผ ์•„์›ƒ
    • ๊ฐ‘์ž๊ธฐ ๋Š˜์–ด๋‚˜๋Š” ํŠธ๋ž˜ํ”ฝ์— ๋Œ€ํ•ด ๋ถ€ํ•˜๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„๋ฅผ ๋Š˜๋ฆฌ๋Š” ๊ฒƒ
  • ๋ฐ์ดํ„ฐ ๋ฐฑ์—…
    • ๋ฐฑ์—… ๊ณผ์ •์€ ์‹ค์ œ ์‹คํ–‰์ค‘์ธ ์ฟผ๋ฆฌ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค.
    • => ๋ ˆํ”Œ๋ฆฌ์นด ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ ๋ฐฑ์—…์„ ์ง„ํ–‰
  • ๋ฐ์ดํ„ฐ ๋ถ„์„
    • ๋ฐ์ดํ„ฐ ๋ถ„์„์˜ ๊ฒฝ์šฐ, ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ ์กฐํšŒ, ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๊ฐ€ ๋งŽ์„ ์ˆ˜ ์žˆ๋‹ค.
    • ์†Œ์Šค ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ ๋ถ„์„์„ ํ•  ๊ฒฝ์šฐ, ์‹ค์ œ ์„œ๋น„์Šค์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.
    • => ๋ฐ์ดํ„ฐ ๋ถ„์„ ์ „๋‹ด ์„œ๋ฒ„๋ฅผ ๋‘๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
  • ๋ฐ์ดํ„ฐ์˜ ์ง€๋ฆฌ์  ๋ถ„์‚ฐ
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„๊ฐ€ ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ ์žˆ๋‹ค๋ฉด ๋น ๋ฅธ ์‘๋‹ต์„ ๋ฐ›๊ธฐ ์–ด๋ ต๋‹ค.
    • ๋‹ค์–‘ํ•œ ์ง€์—ญ์— ๋ ˆํ”Œ๋ฆฌ์นด ์„œ๋ฒ„๋ฅผ ๋‘์–ด ์‘๋‹ต ์†๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

โ€ป Replication ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ ๋ฌธ์ œ
https://da-nyee.github.io/posts/db-replication-data-consistency-issue/

๐Ÿ“ŒSharding

๊ฐ™์€ ํ…Œ์ด๋ธ” ์Šคํ‚ค๋งˆ๋ฅผ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์ˆ˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ถ„์‚ฐํ•˜์—ฌ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•. ํ…Œ์ด๋ธ”์„ ํŠน์ • ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆ ์„œ ์ €์žฅ ๋ฐ ๊ฒ€์ƒ‰

  • Sharding Key : ๋‚˜๋ˆ ์ง„ Shard ์ค‘ ์–ด๋–ค shard๋ฅผ ์„ ํƒํ•  ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ํ‚ค, ๊ฒฐ์ •๋ฐฉ์‹์— ๋”ฐ๋ผ Sharding ๋ฐฉ๋ฒ•์ด ๋‚˜๋ˆ„์–ด์ง

Hash Sharding

  • Shard Key : Database id๋ฅผ Hashing ํ•˜์—ฌ ๊ฒฐ์ •
    • Hashํฌ๊ธฐ๋Š” Cluster์•ˆ์— ์žˆ๋Š” Node๊ฐœ์ˆ˜๋กœ ์ •ํ•˜๊ฒŒ ๋จ
  • ๊ตฌํ˜„์ด ๊ฐ„๋‹จํ•˜๋‹ค(key-value)
  • ํ™•์žฅ์„ฑ์ด ๋–จ์–ด์ง„๋‹ค
    • Node๊ฐœ์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๊ฑฐ๋‚˜ ์ค„์ผ ๊ฒฝ์šฐ, Hash ํฌ๊ธฐ์™€ Key๊ฐ€ ๋ณ€ํ•จ -> Data ๋ถ„์‚ฐ Rule ์–ด๊ธ‹๋‚จ
    • => Resharding ํ•„์š”
  • ๊ณต๊ฐ„์— ๋Œ€ํ•œ ํšจ์œจ์„ ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š”๋‹ค

Dynamic Sharding

  • ํ™•์žฅ์— ์šฉ์ดํ•˜๋‹ค
    • Node์˜ ๊ฐœ์ˆ˜๋ฅผ ๋Š˜๋ฆด ๊ฒฝ์šฐ : Locatoer Service์— Shard Key ์ถ”๊ฐ€๋งŒ ํ•˜๋ฉด ๋จ
    • ๊ธฐ์กด Data Shard Key ๋ณ€๊ฒฝ X
  • ๋ฐ์ดํ„ฐ๋ฅผ ์žฌ๋ฐฐ์น˜ ์‹œ Locator Service์˜ Shard Key Table๋„ ๋™๊ธฐํ™” ํ•ด์•ผํ•œ๋‹ค.
  • Locator Service๋ฅผ ํ†ตํ•ด Shard Key๋ฅผ ์–ป๋Š”๋‹ค.
  • Locator์— ์˜์กด์ ์ด๋‹ค.
    • Locator๊ฐ€ ์„ฑ๋Šฅ์„ ์œ„ํ•ด Cacheํ•˜๊ฑฐ๋‚˜ Replicationํ•  ๊ฒฝ์šฐ, ์ž˜๋ชป๋œ Routing์„ ํ†ตํ•ด Data ์ฐพ์ง€ ๋ชปํ•˜๊ณ  Error ๋ฐœ์ƒ
  • ex ) HDFS : Name Node, MongoDB : Config Server

Entity Group

  • Key-Value๊ฐ€ ์•„๋‹Œ ๋‹ค์–‘ํ•œ ๊ฐ์ฒด๋กœ ๊ตฌ์„ฑ๋œ ๊ฒฝ์šฐ Applicaiton์˜ ๋ณต์žก๋„๋ฅผ ์ค„์ด๋Š” ๋ฐฉํ–ฅ์œผ๋กœ Shardingํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” Entity๋ผ๋ฆฌ ๊ฐ™์€ Shard ๋‚ด์— ๊ณต์œ ํ•˜๋„๋ก ๋งŒ๋“  ๋ฐฉ์‹
  • ๋‹จ์ผ Shard ๋‚ด์—์„œ ์ฟผ๋ฆฌ๊ฐ€ ํšจ์œจ์ ์ด๊ณ  ๊ฐ•ํ•œ ์‘์ง‘๋„๋ฅผ ๊ฐ€์ง„๋‹ค
  • ๋‹ค๋ฅธ Shard์˜ Entity์™€ ์—ฐ๊ด€๋˜๋Š” ๊ฒฝ์šฐ ๋น„ํšจ์œจ์ 
  • ์‚ฌ์šฉ์ž๊ฐ€ ๋Š˜์–ด๋‚จ์— ๋”ฐ๋ผ ํ™•์žฅ์„ฑ์ด ์ข‹์€ Partitioning

โ€ป Shared Disk & Shared Nothing
https://milhouse93.tistory.com/43

์ถœ์ฒ˜

https://eunsun-zizone-zzang.tistory.com/50
https://code-lab1.com/%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0%EB%A7%81/
https://jordy-torvalds.tistory.com/94

profile
CS ๊ณต๋ถ€๋ฅผ ํ•ด๋ด…์‹œ๋‹ค

0๊ฐœ์˜ ๋Œ“๊ธ€