Replication

๋‚˜๋‚˜'s Brainยท2024๋…„ 7์›” 8์ผ
0

๊ฐœ๋…Study

๋ชฉ๋ก ๋ณด๊ธฐ
8/21

๐Ÿ“ Replication

๐Ÿ”– Replication ์ด๋ž€?

๐Ÿ’ก MySQL ๋˜๋Š” MariaDB๋Š” Replication์„ ์ œ๊ณตํ•œ๋‹ค.

DB๋ฅผ ๋ณต์ œํ•˜๋Š” ๊ฒƒ์œผ๋กœ 2๋Œ€ ์ด์ƒ์˜ DBMS๋ฅผ master์™€ slave(๋˜๋Š” ๋‹ค์ค‘ slave) ๊ตฌ์กฐ๋กœ ๋‚˜๋ˆ„์–ด ๋น„๋™๊ธฐ ๋ณต์ œ ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

master๋Š” server-id๋ฅผ 1๋ฒˆ์œผ๋กœ ๊ฐ€์ง€๊ณ  slave๋Š” server-id๋ฅผ 2๋ฒˆ ์ด์ƒ๋ถ€ํ„ฐ ๊ฐ€์ง€๊ฒŒ ๋˜๋ฉฐ ์„œ๋กœ ๊ณ ์œ ํ•˜๊ฒŒ ๋ถ€์—ฌํ•˜์—ฌ ์ž‘๋™ ์‹œ์ผœ์•ผ ๋œ๋‹ค.

โžก๏ธ Replication์˜ ์ด์ 

1. DB ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๋ฅผ ๋ถ„์‚ฐ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
2. ๋ฐ์ดํ„ฐ ๋ฐฑ์—…์ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

master ์„œ๋ฒ„
: ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•˜๋ฉฐ ๋ณ€๊ฒฝ ๋ฐœ์ƒ์‹œ binary log์— ๊ธฐ๋กํ•˜๊ณ  slave ์„œ๋ฒ„๋กœ ์ „๋‹ฌํ•œ๋‹ค.

slave ์„œ๋ฒ„
: master ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ ๋ฐ›์€ binary log๋ฅผ ํ†ตํ•ด DB์— ๋ฐ˜์˜ํ•˜๊ณ  ์กฐํšŒ์˜ ๋ถ€๋‹ด์„ ๋‹ด๋‹นํ•œ๋‹ค.

binary log
: DB์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ชจ๋“  ๋‚ด์—ญ์ด ๊ธฐ๋ก๋˜๋Š” ํŒŒ์ผ๋กœ default๋Š” ๋น„ํ™œ์„ฑ์ด์ง€๋งŒ ํ™œ์„ฑํ™” ์‹œ์ผœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ”– Replication ๋ฐฉ์‹ ๊ฐœ์š”

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์ œํ•˜๋Š” ๋ฐฉ์‹์€ ํฌ๊ฒŒ ๋™๊ธฐ ๋ฐฉ์‹๊ณผ ๋น„๋™๊ธฐ ๋ฐฉ์‹์ด ์žˆ๋‹ค.

๋™๊ธฐ ๋ฐฉ์‹: Master ๋…ธ๋“œ์—์„œ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•˜๋ฉด Slave ๋…ธ๋“œ์— ๋™์‹œ์— ์ ์šฉ๋˜๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ์„ ๋ณด์žฅํ•˜์ง€๋งŒ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

๋น„๋™๊ธฐ ๋ฐฉ์‹: Master ๋…ธ๋“œ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์‹œ์ฐจ๋ฅผ ๋‘๊ณ  Slave ๋…ธ๋“œ์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์„ฑ๋Šฅ์€ ์ข‹์ง€๋งŒ ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

Semi-Sync ๋ฐฉ์‹
: ๋™๊ธฐ์™€ ๋น„๋™๊ธฐ ๋ฐฉ์‹์˜ ์žฅ์ ์„ ์ ์ ˆํžˆ ์ทจํ•˜์—ฌ Semi-Sync ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค. MySQL์—์„œ๋Š” Semi-Sync Replication์„ Plug-in ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“ MySQL Replication ๋™์ž‘ ์›๋ฆฌ

MySQL์˜ Replication์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„๋™๊ธฐ ๋ณต์ œ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค. Master ๋…ธ๋“œ์—์„œ ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋ฅผ Binary Log์— ๊ธฐ๋กํ•˜๊ณ , Replication Master Thread๊ฐ€ ์ด๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฝ์–ด Slave๋กœ ์ „์†กํ•œ๋‹ค.

โœ… ํ•„์ˆ˜ ์š”์†Œ
Binary Log: Master์—์„œ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ธฐ๋ก
Master Thread: Binary Log๋ฅผ ์ฝ์–ด Slave๋กœ ์ „์†ก
I/O Thread: Slave์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•˜์—ฌ Relay Log์— ๊ธฐ๋ก
SQL Thread: Relay Log๋ฅผ ์ฝ์–ด ๋ฐ์ดํ„ฐ๋ฅผ Slave์— ์ ์šฉ

โœ… ๋™์ž‘ ๊ณผ์ •

01_ ํด๋ผ์ด์–ธํŠธ์—์„œ Commit ์ˆ˜ํ–‰
02_ Connection Thread๊ฐ€ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์— Prepare ์ˆ˜ํ–‰
03_ Binary Log์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๊ธฐ๋ก
04_ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์— Commit ์ˆ˜ํ–‰
05_ Master Thread๊ฐ€ Binary Log๋ฅผ ์ฝ์–ด Slave๋กœ ์ „์†ก
06_ Slave์˜ I/O Thread๊ฐ€ Relay Log์— ๊ธฐ๋ก
07_ SQL Thread๊ฐ€ Relay Log๋ฅผ ์ฝ์–ด ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์— ์ ์šฉ

โžก๏ธ Master Thread

MySQL Replication์—์„œ Slave Thread๋Š” Client์ด๊ณ  Master Thread๋Š” Server์ด๋‹ค. Slave Thread๊ฐ€ Master Thread์— ์ ‘์†์„ ์š”์ฒญํ•˜๋ฉฐ, Master์—๋Š” Slave Thread๊ฐ€ ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ณ„์ •๊ณผ ๊ถŒํ•œ(REPLICATION_SLAVE)์ด ํ•„์š”ํ•˜๋‹ค.

์—ญํ• 
Master Thread๋Š” Binary Log๋ฅผ ์ฝ์–ด์„œ Slave๋กœ ์ „์†กํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. Slave๋Š” Master์— ์ ‘์† ํ›„ Binary Log ์†ก์‹ ์„ ์š”์ฒญํ•˜๋Š” ๋ช…๋ น์–ด(COM_BINLOG_DUMP ๋˜๋Š” COM_BINLOG_DUMP_GTID)๋ฅผ ์ „์†กํ•œ๋‹ค.

โžก๏ธ Slave I/O Thread

Slave I/O Thread๋Š” Master๋กœ๋ถ€ํ„ฐ ์ˆ˜์‹ ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ Relay Log์— ์ˆœ์ฐจ์ ์œผ๋กœ ๊ธฐ๋กํ•œ๋‹ค. Relay Log ํŒŒ์ผ์˜ ํ˜•์‹์€ Master์˜ Binary Log ํ˜•์‹๊ณผ ์ผ์น˜ํ•œ๋‹ค. Relay Log ํŒŒ์ผ์˜ ์ด๋ฆ„์€ ๊ธฐ๋ณธ์ ์œผ๋กœ 'ํ˜ธ์ŠคํŠธ๋ช…-relay-bin'์ด๋ฉฐ, relay_log ์˜ต์…˜์„ ํ†ตํ•ด ์ด๋ฆ„์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ช…๋ น์–ด
Relay Log ๋‚ด์šฉ์„ ํ™•์ธํ•˜๋ ค๋ฉด SHOW RELAYLOG EVENTS ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

โžก๏ธ Slave SQL Thread

Slave SQL Thread๋Š” Relay Log์— ๊ธฐ๋ก๋œ ๋ณ€๊ฒฝ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์„ ํ†ตํ•ด Slave ์ธก์— ์ ์šฉํ•œ๋‹ค. SQL Thread๋Š” Replication ์ฒ˜๋ฆฌ์˜ ๋ณ‘๋ชฉ ์ง€์ ์ด ๋  ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ”– MySQL Replication์„ ์ด์šฉํ•œ ๋‹ค์–‘ํ•œ ๊ตฌ์„ฑ

MySQL Replication์€ ์—ฌ๋Ÿฌ ๋ฐฉ์‹์œผ๋กœ ์‹œ์Šคํ…œ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์•„๋ž˜ ๊ทธ๋ฆผ๋“ค์€ ์‹ค์ œ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋‹ค์–‘ํ•œ ๊ตฌ์„ฑ ์˜ˆ๋“ค์„ ๋ชจ์•„๋ณธ ๊ฒƒ์ด๋‹ค.
MySQL Replication ์€ ๋‹ค์Œ์˜ ๋ช‡ ๊ฐ€์ง€ ํŠน์ง•์„ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ข€ ๋” ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

ํŠน์ง•

Slave๋Š” ๋‹ค๋ฅธ MySQL ์„œ๋ฒ„์˜ Master๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.
ํ•˜๋‚˜์˜ Master๋Š” ๋‹ค์ˆ˜์˜ Slave๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.
๋‘ ๊ฐœ์˜ MySQL ์„œ๋ฒ„๊ฐ€ ์„œ๋กœ์˜ Master ๋˜๋Š” Slave๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.
ํ•˜๋‚˜์˜ Slave๊ฐ€ ์—ฌ๋Ÿฌ Master๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. (N:1 - MySQL 5.7 ์ด์ƒ)

_

๐Ÿšจ ์ฃผ์˜์‚ฌํ•ญ
Dual Master์˜ ๊ฒฝ์šฐ ์–‘์ชฝ ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๋น„๋™๊ธฐ ๋ฐฉ์‹์ด๋ฏ€๋กœ ๋ฐ์ดํ„ฐ์˜ ๋ถ€์ •ํ•ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ๊ณ ๋ คํ•œ Application ์ž‘์„ฑ์ด ํ•„์š”ํ•˜๋‹ค.

์ถœ์ฒ˜ : http://cloudrain21.com/mysql-replication

profile
"๋กœ์ปฌ์—์„  ๋ฌธ์ œ์—†์—ˆ๋Š”๋ฐโ€ฆ?"

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