DB Replication

DB Replication ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ณ ๊ฐ€์šฉ์„ฑ๊ณผ ๋ฐ์ดํ„ฐ ์•ˆ์ •์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋„๋ฆฌ ํ™œ์šฉ๋˜๋Š” ํ•ต์‹ฌ ๊ธฐ์ˆ ์ž„.

ํŠนํžˆ, ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ™˜๊ฒฝ์—์„œ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ง€์†์ ์ธ ๊ฐ€์šฉ์„ฑ๊ณผ ์‹ ๋ขฐ์„ฑ์ด ๋งค์šฐ ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์›๋ณธ(Source) ์„œ๋ฒ„์™€ ๋ณต์ œ(Replica) ์„œ๋ฒ„ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”๋Š” ํ•„์ˆ˜์ž„.

MySQL ๊ธฐ์ค€

1. ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ(Binary Log)๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹

Replication ์€ Source ์„œ๋ฒ„์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ Replica ์„œ๋ฒ„๋กœ ๋ณต์ œํ•˜์—ฌ ๋‘ ์„œ๋ฒ„ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž„.

์ด๋Ÿฌํ•œ ๊ณผ์ •์€ ์ฃผ๋กœ Binary Log ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋ฉฐ, Binary Log ๋Š” Source ์„œ๋ฒ„์—์„œ ์‹คํ–‰๋œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์ฟผ๋ฆฌ๋ฅผ ๊ธฐ๋กํ•˜๋Š” ์—ญํ• ์„ ํ•จ.

MySQL ์—์„œ๋Š” ์ด Binary Log ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ Row, Statement, Mixed ์˜ ์„ธ ๊ฐ€์ง€ ๋ฐฉ์‹์„ ์ œ๊ณตํ•˜๋ฉฐ, ๊ฐ ๋ฐฉ์‹์€ ๊ณ ์œ ์˜ ์žฅ๋‹จ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ.

Row

Row ๋ฐฉ์‹์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ฐ ํ–‰๋ณ„๋กœ ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์„ ์ •ํ™•ํžˆ ๊ธฐ๋กํ•จ. ์ด ๋ฐฉ์‹์€ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ๋งค์šฐ ๋†’๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ํฐ ์žฅ์ ์ด ์žˆ์Œ.

์˜ˆ๋ฅผ ๋“ค์–ด, ํŠน์ • ํ–‰์ด ์ˆ˜์ •๋˜์—ˆ์„ ๋•Œ ๊ทธ ํ–‰์˜ ์ด์ „ ์ƒํƒœ์™€ ๋ณ€๊ฒฝ๋œ ์ƒํƒœ๋ฅผ ๋ชจ๋‘ ๊ธฐ๋กํ•˜๋ฏ€๋กœ, ๋ณต์ œ ์„œ๋ฒ„์—์„œ๋„ ์›๋ณธ ์„œ๋ฒ„์™€ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Œ.

๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“  ํ–‰์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— Binary Log ํŒŒ์ผ์˜ ํฌ๊ธฐ๊ฐ€ ๊ธ‰๊ฒฉํžˆ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์–ด ์ €์žฅ ๊ณต๊ฐ„์— ๋ถ€๋‹ด์„ ์ค„ ์ˆ˜ ์žˆ๋Š” ๋‹จ์ ์ด ์žˆ์Œ.

Statement

๋ฐ˜๋ฉด์— Statement ๋ฐฉ์‹์€ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์„ ์ผ์œผํ‚จ SQL ๋ฌธ ์ž์ฒด๋ฅผ Binary Log ์— ๊ธฐ๋กํ•จ.

์ด ๋ฐฉ์‹์€ ๋กœ๊ทธ ํŒŒ์ผ์˜ ํฌ๊ธฐ๋ฅผ ์ƒ๋Œ€์ ์œผ๋กœ ์ž‘๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์–ด ์ €์žฅ ๊ณต๊ฐ„์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ์Œ.

ํ•˜์ง€๋งŒ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ๋‹ค๋ฅธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์™€ ๊ฐ™์ด ๋น„ํ™•์ •์ (non-deterministic) SQL ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋  ๊ฒฝ์šฐ, ๋™์ผํ•œ ์ฟผ๋ฆฌ๊ฐ€ Source ์™€ Replica ์„œ๋ฒ„์—์„œ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์–ด ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ.

์˜ˆ๋ฅผ ๋“ค์–ด, SELECT NOW()์™€ ๊ฐ™์€ ํ•จ์ˆ˜๋Š” ์‹คํ–‰ ์‹œ์ ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋ฅผ ํฌํ•จํ•œ ์ฟผ๋ฆฌ๋Š” ๋ณต์ œ ์‹œ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Œ.

Mixed

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด MySQL ์€ Mixed ๋ฐฉ์‹์„ ์ œ๊ณตํ•จ. Mixed ๋ฐฉ์‹์€ ์ƒํ™ฉ์— ๋”ฐ๋ผ row ๊ธฐ๋ฐ˜๊ณผ statement ๊ธฐ๋ฐ˜์„ ํ˜ผํ•ฉํ•˜์—ฌ ๋กœ๊ทธ๋ฅผ ๊ธฐ๋กํ•จ.

๋น„ํ™•์ •์  SQL ์ด ์•„๋‹Œ ๊ฒฝ์šฐ์—๋Š” Statement ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์ €์žฅ ๊ณต๊ฐ„์„ ์ ˆ์•ฝํ•˜๊ณ , ๋น„ํ™•์ •์  SQL ์ด ์‹คํ–‰๋˜๋Š” ๊ฒฝ์šฐ์—๋Š” row ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•จ.

์ด๋ฅผ ํ†ตํ•ด ๋‘ ๋ฐฉ์‹์˜ ์žฅ์ ์„ ๋ชจ๋‘ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ์ตœ์†Œํ™” ํ•  ์ˆ˜ ์žˆ์Œ. ๋‹ค๋งŒ , ๊ตฌํ˜„์ด ๋‹ค์†Œ ๋ณต์žกํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋‹จ์ ์ด ์กด์žฌํ•จ.

๋ณต์ œ ๊ณผ์ •

Source ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋˜๊ณ , ์„ ํƒ๋œ ๋กœ๊ทธ ์ €์žฅ ๋ฐฉ์‹์— ๋”ฐ๋ผ Binary Log ์— ๊ธฐ๋ก๋œ ํ›„, Replica ์„œ๋ฒ„์˜ IO Thread ๊ฐ€ Binary Log ๋ฅผ ์ฝ์–ด์™€ Replica ์„œ๋ฒ„์˜ Relay Log ๋กœ ์ „์†กํ•จ.

Relay Log ๋Š” Replica ์„œ๋ฒ„์—์„œ Source ์„œ๋ฒ„์˜ Binary Log ๋ฅผ ์ €์žฅํ•˜๋Š” ์ž„์‹œ ์ €์žฅ์†Œ ์—ญํ• ์„ ํ•˜๋ฉฐ, ์ด๊ณณ์— ์ €์žฅ๋œ ๋กœ๊ทธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ Replica ์„œ๋ฒ„์˜ SQL ์Šค๋ ˆ๋“œ๊ฐ€ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•จ.

์ด ๊ณผ์ •์€ ๋งค์šฐ ํšจ์œจ์ ์œผ๋กœ ์„ค๊ณ„๋˜์–ด ์ผ๋ฐ˜์ ์œผ๋กœ ์•ฝ 100๋ฐ€๋ฆฌ์ดˆ ์ด๋‚ด์— ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”๊ฐ€ ์™„๋ฃŒ๋จ. ์ด๋Ÿฌํ•œ ๋น ๋ฅธ ๋™๊ธฐํ™” ์†๋„ ๋•๋ถ„์— ์›๋ณธ๊ณผ ๋ณต์ œ ์„œ๋ฒ„ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์ด ์‹ค์‹œ๊ฐ„์— ๊ฐ€๊น๊ฒŒ ์œ ์ง€๋  ์ˆ˜ ์žˆ์Œ.

Last updated

Was this helpful?