Replication Internals

๋ฐ์ดํ„ฐ์˜ ์œ ์‹ค์„ ๋ฐฉ์ง€ํ•˜๊ณ (Durability), ๋ธŒ๋กœ์ปค ์žฅ์•  ์‹œ์—๋„ ์„œ๋น„์Šค ์ค‘๋‹จ ์—†์ด ์šด์˜๋  ์ˆ˜ ์žˆ๋„๋ก(High Availability) ํ•˜๋Š” ํ•ต์‹ฌ์ ์ธ ๋‚ด๋ถ€ ๋™์ž‘ ์›๋ฆฌ์ด๋‹ค.

๋ฆฌ๋”์™€ ํŒ”๋กœ์›Œ ๋ชจ๋ธ

์นดํ”„์นด๋Š” ๊ฐ ํ† ํ”ฝ ํŒŒํ‹ฐ์…˜์— ๋Œ€ํ•ด ๋ฆฌ๋”(Leader)์™€ ํŒ”๋กœ์›Œ(Follower) ์—ญํ• ์„ ๋ถ€์—ฌํ•˜๋Š” ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•œ๋‹ค.

  • ํŒŒํ‹ฐ์…˜ ๋ณต์ œ๋ณธ(Replica)

    • ํ† ํ”ฝ ์ƒ์„ฑ ์‹œ ์ง€์ •ํ•œ replication-factor ๋งŒํผ ๊ฐ ํŒŒํ‹ฐ์…˜์˜ ๋ณต์ œ๋ณธ ์ƒ์„ฑ

    • ๋ณต์ œ๋ณธ๋“ค์€ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ์—ฌ๋Ÿฌ ๋ธŒ๋กœ์ปค์— ๋ถ„์‚ฐ ์ €์žฅ๋˜์–ด ํ•˜๋‚˜์˜ ๋ธŒ๋กœ์ปค์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ๋ฐ์ดํ„ฐ ์œ ์‹ค ์—†์ด ์šด์˜ ๊ฐ€๋Šฅ

  • ๋ฆฌ๋”(Leader)

    • ๊ฐ ํŒŒํ‹ฐ์…˜์˜ ์—ฌ๋Ÿฌ ๋ณต์ œ๋ณธ ์ค‘ ๋‹จ ํ•˜๋‚˜๋งŒ์ด ๋ฆฌ๋” ์—ญํ•  ์ˆ˜ํ–‰

    • ํ”„๋กœ๋“€์„œ์˜ ๋ชจ๋“  ์“ฐ๊ธฐ ์š”์ฒญ๊ณผ ์ปจ์Šˆ๋จธ์˜ ๋ชจ๋“  ์ฝ๊ธฐ ์š”์ฒญ์€ ์˜ค์ง ๋ฆฌ๋”๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ฒ˜๋ฆฌ

  • ํŒ”๋กœ์›Œ(Follower)

    • ๋ฆฌ๋”๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๋ณต์ œ๋ณธ๋“ค์€ ํŒ”๋กœ์›Œ ์—ญํ•  ์ˆ˜ํ–‰

    • ํŒ”๋กœ์›Œ๋Š” ์–ด๋– ํ•œ ์ฝ๊ธฐ/์“ฐ๊ธฐ ์š”์ฒญ์—๋„ ๊ด€์—ฌํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์˜ค์ง ๋ฆฌ๋”๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๊ฐ€์ ธ์™€ ์ž์‹ ์˜ ๋กœ๊ทธ์— ๊ธฐ๋กํ•˜๋Š” ์—ญํ• ๋งŒ ์ˆ˜ํ–‰

๋™๊ธฐํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ ISR(In-Sync Replicas)

๋ฆฌ๋”์™€ ํŒ”๋กœ์›Œ๊ฐ€ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ์‹์€ ์นดํ”„์นด ๋ณต์ œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์˜ ํ•ต์‹ฌ์ด๋‹ค.

  • ๋กœ๊ทธ ๋ ์˜คํ”„์…‹(Log End Offset, LEO)

    • ๊ฐ ๋ณต์ œ๋ณธ(๋ฆฌ๋”, ํŒ”๋กœ์›Œ)์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋กœ๊ทธ์˜ ๋งˆ์ง€๋ง‰ ์˜คํ”„์…‹์„ ์˜๋ฏธ

    • ํŒ”๋กœ์›Œ๋Š” ๋ฆฌ๋”์—๊ฒŒ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญ(Fetch Request)ํ•˜์—ฌ ์ž์‹ ์˜ LEO๋ฅผ ๋ฆฌ๋”์˜ LEO์™€ ์ผ์น˜์‹œํ‚ค๋ ค ๋…ธ๋ ฅ

  • ISR(In-Sync Replicas)

    • ๋™๊ธฐํ™” ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์žˆ๋Š” ๋ณต์ œ๋ณธ๋“ค์˜ ์ง‘ํ•ฉ์„ ์˜๋ฏธ(๋ฆฌ๋” ์ž์‹ ๋„ ํฌํ•จ)

    • ํŒ”๋กœ์›Œ๊ฐ€ ISR์— ํฌํ•จ๋˜๊ธฐ ์œ„ํ•œ ์กฐ๊ฑด

      • ํŒ”๋กœ์›Œ์˜ LEO๊ฐ€ ๋ฆฌ๋”์˜ LEO์™€ ๊ฑฐ์˜ ๋™์ผํ•œ ์ˆ˜์ค€์ด์–ด์•ผ ํ•จ

      • replica.lag.time.max.ms ์„ค์ • ์‹œ๊ฐ„ ๋‚ด์— ๋ฆฌ๋”๋กœ๋ถ€ํ„ฐ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ fetchํ•ด์•ผ ํ•จ

  • ISR๊ณผ ํ”„๋กœ๋“€์„œ acks=all ์„ค์ •์˜ ๊ด€๊ณ„

    • ํ”„๋กœ๋“€์„œ๊ฐ€ acks=all ์˜ต์…˜์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•˜๋ฉด, ISR์— ํฌํ•จ๋œ ๋ชจ๋“  ํŒ”๋กœ์›Œ๊ฐ€ ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋ฅผ ๋ณต์ œํ–ˆ์Œ์„ ํ™•์ธ ํ›„ ์‘๋‹ต(Ack) ์ „์†ก

    • ์ด๋ฅผ ํ†ตํ•ด ISR ๋‚ด์—์„œ๋Š” ๋ฐ์ดํ„ฐ ์œ ์‹ค ์—†๋Š” ์ „์†ก ๋ณด์žฅ ๊ฐ€๋Šฅ

๋ฆฌ๋” ์„ ์ถœ(Leader Election)

๋ฆฌ๋” ์—ญํ• ์„ ํ•˜๋˜ ๋ธŒ๋กœ์ปค์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, ํด๋Ÿฌ์Šคํ„ฐ๋Š” ์„œ๋น„์Šค ์ค‘๋‹จ์„ ๋ง‰๊ธฐ ์œ„ํ•ด ํŒ”๋กœ์›Œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ƒˆ๋กœ์šด ๋ฆฌ๋”๋กœ ์„ ์ถœํ•ด์•ผ ํ•œ๋‹ค.

  • ์„ ์ถœ ๊ณผ์ •

    • ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ปจํŠธ๋กค๋Ÿฌ(Controller) ๋ธŒ๋กœ์ปค๊ฐ€ ํŠน์ • ํŒŒํ‹ฐ์…˜ ๋ฆฌ๋”์˜ ์žฅ์•  ๊ฐ์ง€

    • ์ปจํŠธ๋กค๋Ÿฌ๋Š” ํ•ด๋‹น ํŒŒํ‹ฐ์…˜์˜ ISR ๋ชฉ๋ก์—์„œ ์‚ด์•„์žˆ๋Š” ํŒ”๋กœ์›Œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ƒˆ๋กœ์šด ๋ฆฌ๋”๋กœ ์ง€์ •

    • ์ƒˆ๋กœ์šด ๋ฆฌ๋”๊ฐ€ ์ง€์ •๋˜๋ฉด, ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋‹ค๋ฅธ ๋ธŒ๋กœ์ปค์™€ ํด๋ผ์ด์–ธํŠธ๋“ค์€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๊ฐฑ์‹ ํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฆฌ๋”์™€ ํ†ต์‹  ์‹œ์ž‘

  • ๋น„์ •์ƒ ๋ฆฌ๋” ์„ ์ถœ (Unclean Leader Election)

    • ๋งŒ์•ฝ ๋ธŒ๋กœ์ปค ์žฅ์• ๋กœ ์ธํ•ด ISR์— ๋ฆฌ๋” ์ž์‹  ์™ธ์— ์•„๋ฌด๋„ ์—†๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•˜๋ฉด, ์˜ต์…˜์— ๋”ฐ๋ผ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌ

    • unclean.leader.election.enable=false: ์ƒˆ๋กœ์šด ๋ฆฌ๋”๋ฅผ ์„ ์ถœํ•˜์ง€ ์•Š๊ณ  ํŒŒํ‹ฐ์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋งŒ๋“ค์–ด ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ์„ ์šฐ์„ (Consistency)

    • unclean.leader.election.enable=true: ISR์— ์—†๋˜ ํŒ”๋กœ์›Œ๋ผ๋„ ๋ฆฌ๋”๋กœ ์„ ์ถœํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ๊ณ„์†ํ•˜๋„๋ก ํ—ˆ์šฉํ•œ๋‹ค. ๊ฐ€์šฉ์„ฑ์„ ์šฐ์„ (Availability)

๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ๊ณผ High Watermark

๋ณต์ œ ๊ณผ์ •์—์„œ ์•„์ง ๋ชจ๋“  ๋ณต์ œ๋ณธ์— ๋™๊ธฐํ™”๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ปจ์Šˆ๋จธ๊ฐ€ ์ฝ์–ด๊ฐ€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด High Watermark๋ผ๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค.

  • High Watermark

    • ISR์— ํฌํ•จ๋œ ๋ชจ๋“  ๋ณต์ œ๋ณธ๋“ค์ด ๊ณตํ†ต์ ์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ€์žฅ ๋†’์€ ์˜คํ”„์…‹์„ ์˜๋ฏธ(์•ˆ์ „ํ•˜๊ฒŒ ๋ณต์ œ๋˜์—ˆ๋‹ค'๊ณ  ๋ณด์žฅ๋˜๋Š” ๋ฉ”์‹œ์ง€์˜ ์œ„์น˜)

    • HWM์€ ISR ๋‚ด์—์„œ LEO๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ์€ ๋ณต์ œ๋ณธ(๊ฐ€์žฅ ๋А๋ฆฐ ํŒ”๋กœ์›Œ)์˜ ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฒฐ์ •

  • HWM์˜ ์—ญํ• 

    • ์ปจ์Šˆ๋จธ๋Š” ์˜ค์ง HWM ์ด์ „์˜ ์˜คํ”„์…‹์— ํ•ด๋‹นํ•˜๋Š” ๋ฉ”์‹œ์ง€๋งŒ ์กฐํšŒ ๊ฐ€๋Šฅ

    • ๋ฆฌ๋”์—๋งŒ ๊ธฐ๋ก๋˜๊ณ  ์•„์ง ํŒ”๋กœ์›Œ๋“ค์—๊ฒŒ ์™„์ „ํžˆ ๋ณต์ œ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์™ธ๋ถ€๋กœ ๋…ธ์ถœ๋˜๋Š” ๊ฒƒ์„ ๋ง‰์•„ ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ ๋ณด์žฅ

Last updated

Was this helpful?