Database Replication Architecture
DB Replication ๊ตฌ์กฐ
Source(์๋ณธ) -- Replication(๋ณต์ ) ๊ตฌ์กฐ์ด๋ค.
์๋ณธ ์๋ฒ์์ ๋ณ๊ฒฝ์ด ์ผ์ด๋๋ฉด ๋ณต์ ์๋ฒ์๋ ๋์ผํ๊ฒ ๋ฐ์๋๋ค.
์๋ณธ ์๋ฒ๊ฐ ๋ค์ด๋๋ฉด ๋ณต์ ์๋ฒ๋ฅผ ์๋ณธ ์๋ฒ๋ก ์น๊ฒฉ์์ผ ์ฌ์ฉํ ์ ์๋ค.
์๋ณธ ์๋ฒ๋ฅผ Write DB๋ก, ๋ณต์ ์๋ฒ๋ฅผ Read DB๋ก ์ฌ์ฉํด ๋ถํ๋ฅผ ๋ถ์ฐ์ํฌ ์ ์๋ค.
MySQL ์๋ฒ์์ ๋ฐ์ํ๋ ์ด๋ฒคํธ(์ฝ์ /์ญ์ , ๊ณ์ ๊ถํ ๋ณ๊ฒฝ๊ณผ ๊ฐ์)๊ฐ ๋ฐ์ํ๋ฉด ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ์ ๊ธฐ๋ก๋๋ค.
Binary Log: ์ด๋ฒคํธ(๋ณ๊ฒฝ์ฌํญ)์ด ๋ก๊ทธํ์ผ์ ์์ฐจ์ ์ผ๋ก ๊ธฐ๋ก๋ ๊ฒ
์๋ณธ ์๋ฒ์ ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ๋ฅผ ๋ณต์ ์๋ฒ๋ก ๋ณด๋ด๊ณ , ๋ณต์ ์๋ฒ๋ Relay Log๋ผ๋ ๋ก์ปฌ ๋์คํฌ์ ์ ์ฅํ๊ณ ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ์ํ๋ค.
๋ณต์ ํ ํด๋ก์ง

ํธ๋์ญ์ ์ค๋ ๋๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ Binary log์ ๊ธฐ๋กํ๋ค.
๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ ๋คํ ์ค๋ ๋๊ฐ ๊ฐ ์ด๋ฒคํธ์ Lock์ ์ค์ ํ๊ณ ์ฝ์ ๋ค์, ๋ณต์ ์๋ฒ๋ก ์ ์กํ๋ค.
Replicaiton I/O ์ค๋ ๋๋ ๋คํ ์ค๋ ๋๊ฐ ๋ณด๋ด์ค ์ด๋ฒคํธ๋ฅผ ์์ ์ ๋ก์ปฌ ํ์ผ์ธ Relay log์ ์ ์ฅํ๋ค.
์์ง ๋ฐ์ดํฐ๋ ๋ฐ์๋์ง ์์ ์ํ์ด๋ค. show replica status ๋ช ๋ น์ผ๋ก ์ํ๋ฅผ ๋ณผ ์ ์๋ค.
Replication SQL ์ค๋ ๋๊ฐ Binary log๋ฅผ DB์ ๋ฐ์ํ๋ค. (I/O ์ค๋ ๋๋์ ๋ณ๊ฐ๋ผ๊ณ ํ๋ค.)
์ ๋ฆฌํ๋ฉด ์ด๋ ๋ค.
Master(Source) ์๋ฒ
๋ ํ๋ฆฌ์นด ์๋ฒ๊ฐ ์ฐ๊ฒฐ ๋ ๋
๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ ๋คํ ์ค๋ ๋(Binary Log Dump Thread)๋ฅผ ์์ฑํด, ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ ๋ด์ฉ์ ๋ ํ๋ฆฌ์นด ์๋ฒ๋ก ์ ์กํ๋ค.
Slave(Replica) ์๋ฒ
๋ ํ๋ฆฌ์ผ์ด์ (Replication) I/O ์ค๋ ๋๋ฅผ ์์ฑํด์ Master ์๋ฒ์๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ ๋คํ ์ค๋ ๋๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ ์ด๋ฒคํธ๋ฅผ ๊ฐ์ ธ์์Relay log์ ์ ์ฅํ๋ค.๋ ํ๋ฆฌ์ผ์ด์ I/O ์ค๋ ๋๊ฐ ์์ฑํ Relay log ํ์ผ์ ์ด๋ฒคํธ๋ฅผ๋ ํ๋ฆฌ์ผ์ด์ (Replication) SQL ์ค๋ ๋๊ฐ ์ฝ๊ณ ์คํ(์ ์ฅ)ํ๋ค.
์๋ณ ๋ฐฉ๋ฒ (๋ณต์ ๋ฐฉ๋ฒ)
๋ ํ๋ฆฌ์นด ์๋ฒ๋ ์๋ณธ ์๋ฒ์ ์ด๋ฒคํธ์ ๋ํ ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ๋ฅผ ์ด๋ป๊ฒ ์๋ณํ ๊น?

1. ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ ํ์ผ ์์น๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๋ณต์ (Binary Log File Position Based)
์๋ณธ ์๋ฒ์ ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ ํ์ผ๋ช ๊ณผ offset(position)์ ๊ฐ์ง๊ณ ์๋ณํ๋ค.
๊ทธ๋ฆผ์์๋ offset ์ ๋ณด๊ฐ ๋ณด์ด์ง๋ง, ์ค์ ํ์ผ์๋ ๋ํ๋์ง ์๋๋ค.
๋จ์ ์ผ๋ก๋ ๋ ํ๋ฆฌ์นด๊ฐ ๋ง์คํฐ๋ก ์น๊ฒฉ๋๋ฉด ๋๋จธ์ง ๋ ํ๋ฆฌ์นด๋ ๋ฐ๋ ๋ง์คํฐ์ ๋ฐ์ด๋๋ฆฌ ์คํ์ ์ ๋ค์ ์ฐพ์์ผํ๊ธฐ ๋๋ฌธ์ ๋ณต๊ตฌ์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ณ , ์ค๊ฐ์ ๋คํธ์ํฌ ์ฐ๊ฒฐ์ด ๋์ด์ง๊ธฐ๋ผ๋ ํ๋ฉด ๋ณ๊ฒฝ ์ฌํญ์ ๋ณต์ ํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๋ ๋ฐ์ํ ์ ์๋ค.
2. ๊ธ๋ก๋ฒ ํธ๋์ญ์
์์ด๋ ๊ธฐ๋ฐ ๋ณต์ (Global Transaction ID = GTID)
MySQL 5.6๋ถํฐ๋ GTID๋ฅผ ๊ธฐ๋ณธ ๋ณต์ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉํ๊ณ ์๋ค.
GTID = source_id:transaction_id๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
1. ๋ง์คํฐ์์ ๊ฐ ํธ๋์ญ์ ์ ๊ณ ์ ํ GTID ํ ๋น
2. ๋ง์คํฐ๋ ํธ๋์ญ์ ๋ก๊ทธ์ ํจ๊ป GTID๋ฅผ ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ์ ๊ธฐ๋ก
3. ์ฌ๋ ์ด๋ธ๋ ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ์์ ํธ๋์ญ์ ๊ณผ GTID๋ฅผ ์ฝ๋๋ค.
4. ์ฌ๋ ์ด๋ธ๋ GTID๋ฅผ ์ฌ์ฉํด์ ์ด๋ฏธ ์ ์ฉ๋ ํธ๋์ญ์ ์ ๋ฌด์ํ๊ณ ์์ง ์ ์ฉ๋์ง ์์ ํธ๋์ญ์ ์๋ง ์ ์ฉํ๋ค.
GTID_PURGED ๊ฐ์ ์ฃผ์ํด์ ๊ด๋ฆฌํด์ผ ํ๋ค.
๋ก๊ทธ ํ์ผ์์๋ offset ์ถ์ ์ด ํ์ํ์ง๋ง, GTID๋ ๋์ผํ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ํธ๋์ญ์ ID๋ง ์ฝ์ผ๋ฉด๋๋ค.
GTID ๋ณต์ ์ ์ด์ ์ ์๋์ ๊ฐ๋ค.
์๋ ์ฅ์ ์กฐ์น (Failover) ๊ฐ์
์ฅ์ ๋ฐ์ ์ ๋ค๋ฅธ ์ฌ๋ ์ด๋ธ๋ฅผ ์๋ก์ด ๋ง์คํฐ๋ก ์น๊ฒฉํ๋ ๊ณผ์ ์ด ๋ ๊ฐ๋จํ๊ณ ์์ ์
GTID๋ฅผ ํตํด ๊ฐ ํธ๋์ญ์ ์ ์คํ ์ฌ๋ถ๋ฅผ ์ถ์ ๊ฐ๋ฅ
๋ณต์ ํ ํด๋ก์ง ๋ณ๊ฒฝ ์ฉ์ด์ฑ
binary log ํ์ผ ์์น๋ฅผ ์๋์ผ๋ก ์ฐพ์ ํ์๊ฐ ์์
ํธ๋์ญ์ ์ผ๊ด์ฑ ๋ณด์ฅ
๊ฐ ํธ๋์ญ์ ์ ๊ณ ์ ํ ID๊ฐ ๋ถ์ฌ๋๊ธฐ ๋๋ฌธ์ ์ค๋ณต ์คํ ๋ฐฉ์ง ๊ฐ๋ฅ
๋๋ฝ๋ ํธ๋์ญ์ ์๋ณ์ ์ฉ์ด
๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ๋ ์ด๋ป๊ฒ ์ ์ฅ๋ ๊น? (Binary Log Format)
Row ๋ฐฉ์ --> ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ
๋งค์ฐ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒฝ์ฐ ๋๋์ ๋ฐ์ดํฐ๊ฐ ๋ก๊ทธ์ ๊ธฐ๋ก๋๋ฉด์ ๊ณผ๋ถํ๋ฅผ ์ค ์ ์๋ค.
Statement ๋ฐฉ์ --> SQL๋ฌธ์ ์ ์ฅ
์คํํ SQL๋ฌธ์ ๊ทธ๋๋ก ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ์ ์ ์ฅํ๋ ํ์์ด๋ค. ๋จ์ ์ฟผ๋ฆฌ๋ง ๊ธฐ๋ก๋๊ธฐ ๋๋ฌธ์ ์ ์ ์ฉ๋์ ๋ก๊ทธํ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค.
๋นํ์ ์ฟผ๋ฆฌ์ผ ๊ฒฝ์ฐ ๋ฐ์ดํฐ ๋๊ธฐํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค. ๋ฐ๋ผ์ ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค์ด Repeatable Read ์ด์๋ง ๊ฐ๋ฅํ๋ค.
๋นํ์ ์ฟผ๋ฆฌ : ์คํ๋ง๋ค ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ SQL
๋ง์คํฐ์์ timestamp๋ฅผ ์คํํ๊ณ ๋ก๊ทธ๋ฅผ ๋จ๊ฒผ๋๋ฐ, ์ฌ๋ ์ด๋ธ์์๋ ์ด๋ฅผ ์ ์ฉํ๊ธฐ ์ํด timestamp๋ฅผ ์คํํ๋ค๋ฉด ๋ ์คํ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ ธ ๋ฐ์ดํฐ
์ผ๊ด์ฑ์ ๋ฌธ์ ๊ฐ ์์ ์ ์๋ค.
Mixed ๋ฐฉ์ --> Statement + Row
ํ์์๋ Statement ํฌ๋งท์ผ๋ก ๊ธฐ๋กํ๋ค๊ฐ Statement ํฌ๋งท์ผ๋ก ๋ณต์ ํ์ ๋ ๋ฌธ์ ๊ฐ ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ ์ฟผ๋ฆฌ๋ Row ํฌ๋งท์ผ๋ก ๋ณํํ์ฌ ๊ธฐ๋กํด์ค๋ค.
๋ณต์ ๋๊ธฐํ ๋ฐฉ์
1. ๋ณต์ ๋น๋๊ธฐ ๋ฐฉ์
mysql์ ๊ธฐ๋ณธ ๋ณต์ ๋ฐฉ์์ด๋ค.
๋๊ธฐ ๋ฐฉ์์์๋ ๋คํ ์ค๋ ๋์์ ์์ ์ด ์์๋๋ฉด ์์ ์ด ์๋ฃ๋ ๋๊น์ง ํธ๋์ญ์ ์ค๋ ๋๋ ๋๊ธฐํ๊ฒ ๋๋ค. ๋, ์์ค ์๋ฒ๊ฐ ๋ณต์ ์๋ฒ์ ๋ณ๊ฒฝ์ ํ์ธํ๋ค.
์ฆ, ๋น๋๊ธฐ ๋ฐฉ์์ ํธ๋์ญ์ ์ค๋ ๋๋ ๋คํ ์ค๋ ๋์ ์์ ์๋ฃ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์๋๊ฒ์ด๋ค.
์ด์ฒ๋ผ ๋๊ธฐ ๋ฐฉ์์ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์ ์งํ ์ ์๊ฒ ์ง๋ง, ๋น๋๊ธฐ ๋ฐฉ์์ ๋ง์คํฐ ์๋ฒ์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด ์๋กญ๊ฒ ์ถ๊ฐ๋ ๋ฐ์ดํฐ๊ฐ ๋ ํ๋ฆฌ์นด ์๋ฒ์ ๋ฐ์๋์ง ์์ ๋ฐ์ดํฐ ์ ํฉ์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
ex) ๋ง์คํฐ ์๋ฒ ์ฅ์ ๋ฐ์ ์ , ํธ๋์ญ์ ์ ์ปค๋ฐ ๋์์ง๋ง ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ์ ๊ธฐ๋ก๋์ง ์์ ๊ฒฝ์ฐ
2. ๋ณต์ ๋ฐ๋๊ธฐ ๋ฐฉ์
1. ํธ๋์ญ์ ์ค๋ ๋๊ฐ ์ปค๋ฐํ๊ฒ ๋๋ฉด ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ์ ๋ณ๊ฒฝ ๊ธฐ๋ก์ ์์ฑํ๋ค.
2. ๋คํ ์ค๋ ๋๊ฐ ๋ณต์ ์๋ฒ ์ค๋ ๋์ ๋ฆด๋ ์ด ๋ก๊ทธ๋ฅผ ์ ์กํ๋ค.
3. ๋ณต์ ์๋ฒ์์ ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ๋ฅผ wrtieํ๋ค.
4. ๋ณต์ ์๋ฒ๋ ์๋ณธ ์๋ฒ์ write ํ๋ค๋ ์๋ต์ ๋ณด๋ธ๋ค.
5. ํธ๋์ญ์ ์ค๋ ๋๊ฐ ์ด๋ฅผ ํ์ธํ๊ณ ์ปค๋ฐ์ ํ์ ํ๋ฉด์ ์๋ณธ ์คํ ๋ฆฌ์ง์ wirte ํ๋ค.
์ด๋ฐ ๊ณผ์ ์ด๋ผ๋ฉด, ๋ณต์ ์๋ฒ์์ wrtieํ๊ณ ์ค๊ฐ์ ํธ๋์ญ์ ์ด rollback ๋๋ค๋ฉด ๋ณต์ ์๋ฒ๋ ๊ฐ์ด rollback ๋๋๊ฒ ๊ฐ๋ค.
Summary
๋ ํ๋ฆฌ์ผ์ด์ ์ ๋ถํ ๋ถ์ฐ ๋ฐ ๋ฐฑ์ ๋ฑ์ ์ํ master/slave ๊ตฌ์กฐ๋ก ๊ตฌ์ฑํ๋ Scale-Out ์๋ฃจ์ ์ด๋ค.
ํด๋ฌ์คํฐ๋ง์ด๋ผ๊ณ ๋ ํ๋ ๋๊ธฐ ๋ณต์ ๋ฐฉ์์ ๋ฐ์ดํฐ ์ ํฉ์ฑ์ ๋ณด์ฅํ๋ ๋์ , ๊ฐ ํธ๋์ญ์ ๋ด์์ ๋ค๋ฅธ ๋ ธ๋๋ค๊ณผ ๋๊ธฐํ ํ๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ ์ด์๊ฐ ์๋ค. (ํด๋ฌ์คํฐ๋ง์๋ ๋ ผ๋ฆฌ์ ๋ณต์ ๋ฐฉ์, ๋ฌผ๋ฆฌ์ ์คํ ๋ผ์ง ๊ณต์ ๋ฐฉ์ ๋ฑ ๋ค์ํ ๋ฐฉ์์ด ์กด์ฌ)
๋ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์กฐ๋ ๊ฒฐ๊ตญ ํธ๋ํฝ์ ๋์ํ๊ธฐ ์ํจ์ธ๋ฐ, ์ผ๋ฐ์ ์ผ๋ก ๋๊ธฐ ๋ณต์ ๋ฐฉ์์ด ์๋ ๋น๋๊ธฐ ๋ณต์ ๋ฐฉ์์ด๋ ๋ฐ๋๊ธฐ(Semi-Sync) ๋ณต์ ๋ฐฉ์์ ์ฌ์ฉํ๋ค๊ณ ํ๋ค. ๋๋ถ๋ถ ์์ฒญ์ด read ์์ ์ธ ํน์ง์ด๋ฉด master ๋ ธ๋๋ write ์์ ์ผ๋ก, ๋ณต์ (slave)๋ ธ๋๋ค์ read ์์ ์ผ๋ก ๋ผ์ฐํ ํ์ฌ ๋ถํ๋ฅผ ๋ถ์ฐํ๋ค.
Last updated
