์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Java
- ์ค๋ผํด
- ๋ ์
- ํ๋ก๊ทธ๋๋ฐ
- ์ค๋ธ์
- dmz๊ตฌ์ฑ
- dmz๋คํธ์ํฌ
- ์นํผ๋ธ๋ฆฌ์ฑ
- Python
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ์๋ฐ์คํฌ๋ฆฝํธ
- ํ์ฒ์ ๋ฆฌํธ๋ฆฌํธ
- html
- ์ฑ
- ํ์ด์ฌ
- ๊ฐ๋ฐ
- ์ํ
- ์นดํ๋๊ฐ
- ์ ๋ฆฌํธ๋ฆฌํธ
- ๊ฐ์์ ์
- ์๋ฐ
- dmz๋
- database
- ๋๊ฐ
- css
- ๋ฐฉํ๋ฒฝdmz
- ์ฝ๋ฉ
- JavaScript
- ๋คํธ์ํฌdmz
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- Today
- Total
JiYoung Dev ๐ฅ
Galera Cluster๋ฅผ ํตํ MariaDB ์ด์คํ ๊ตฌ์ฑ (1) MariaDB ์ด์คํ ์ข ๋ฅ(Replication, Galera Cluster) ๋ณธ๋ฌธ
Galera Cluster๋ฅผ ํตํ MariaDB ์ด์คํ ๊ตฌ์ฑ (1) MariaDB ์ด์คํ ์ข ๋ฅ(Replication, Galera Cluster)
Shinjio 2025. 2. 19. 22:24DB ํน์ ์คํ๋ง ๋ถํธ ์๋ฒ์ ๊ฐ์ ์์คํ ์ ๊ตฌ์ฑํ ๋, ๋จ ํ๋์ ์๋ฒ๋ณด๋ค๋ ์ด์คํ ํน์ ๊ทธ ์ด์์ผ๋ก ํ์ฌ ์ํคํ ์ฒ๋ฅผ ์ค๊ณํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ์ด์คํ์ ๋ชฉ์ ์ ๊ณ ๊ฐ์ฉ์ฑ์ธ๋ฐ, ์ฌํด ๋ฐ์์ด๋ ์์์น ๋ชปํ ์ฅ์ ์ํฉ์์๋ ์์คํ ์ด ๋ฉ์ถ์ง ์๊ณ ์ ์์ ์ผ๋ก ์ด์๋๋๋ก ํ๊ณ ์ ํจ์ด๋ค.
์ค๋์ DB ์ค์์๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ข ๋ฅ์ธ MariaDB๋ฅผ ์ด์คํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๊ณ ์ ํ๋ค.
ํ์๋ MariaDB์ ์ฌ๋ฌ ์ด์คํ ๋ฐฉ๋ฒ ์ค์์ Galera Cluster๋ฅผ ์ฌ์ฉํ์ฌ ์ด์คํ๋ฅผ ์๋ํ๊ณ , ๊ทธ ๊ณผ์ ๊ณผ ๊ด๋ จ๋ ์ด๋ก ์ ์ ๋ฆฌํด ๋ณด์๋ค.
โญMariaDB๋ฅผ ์ด์คํํ๋ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ๋ค
๋ณธ๋ก ์ ๋ค์ด๊ฐ๊ธฐ์ ์์ MariaDB๋ฅผ ์ด์คํํ๋ ์ฌ๋ฌ ๋ฐฉ๋ฒ์ ๋ํด ๋จผ์ ์์๋ณด์. Galera Cluster๋ฅผ ํตํ ๋ฐฉ๋ฒ๋ ์์ง๋ง, MariaDB ์์ฒด์์ ์ง์ํ๋ ๋ฐฉ๋ฒ์ ํตํด์๋ ์ด์คํ๊ฐ ๊ฐ๋ฅํ๋ค.
1. MariaDB Replication
Master-Slave Replication (๋น๋๊ธฐ ๋ณต์ , ํ์ค ๋ฐฉ์)
MariaDB Replication์ ํ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ(Primary, Master)์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ์๋ฒ(Replica, Slave)๋ก ๋ณต์ ํ์ฌ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ๊ณ , ๊ณ ๊ฐ์ฉ์ฑ๊ณผ ๋ถํ๋ถ์ฐ์ ์ง์ํ๋ ๊ธฐ์ ์ด๋ค.
๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ(Binary Log)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ณต์ ๊ฐ ์ด๋ฃจ์ด์ง๋ ๋ฐฉ์์ด๋ ์ฟผ๋ฆฌ ํน์ Row ๊ธฐ๋ฐ์ ๋ณต์ ๋ฐฉ์๋ ์ง์ํ๋ค.
๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ณต์ ๊ฐ ์ด๋ฃจ์ด์ง๋ค๋ ๊ฒ์ ์ด๋ค ์๋ฏธ์ผ๊น? ๋์ ๋ฐฉ์์ ์๋์ ๊ฐ๋ค.
1) Master๊ฐ Insert, update, delete์ ๊ฐ์ ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์์ ์ ์ํํ๋ฉด, ์ด๋ฅผ Binary Log์ ๊ธฐ๋กํ๋ค. ์ค์ MariaDB์์๋ binlog ํ์ผ์ ํตํด ๋ณ๊ฒฝ ์ฌํญ์ ๋ก๊ทธ๋ก ๊ด๋ฆฌํ๋ค.
2) Slave๋ Master์ Binary Log๋ฅผ I/O Thread๋ฅผ ํตํด ๊ฐ์ ธ์ Relay Log์ ์ ์ฅํ๋ค.
3) Slave์ SQL Thread๊ฐ Relay Log๋ฅผ ์คํํ์ฌ Master์ ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ์ํ๋ค.
4) Slave์ ๋ฐ์ดํฐ๊ฐ Master์ ๋๊ธฐํ๋๋ค.
Replication์์ Slave ์๋ฒ๋ Master ์๋ฒ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ณต์ ํ๊ธฐ ์ํด ๋ ๊ฐ์ ์ฃผ์ ์ฐ๋ ๋๋ฅผ ์ฌ์ฉํ๋ค.
I/O Thread
- Master ์๋ฒ์ ์ ์ํด์ ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ(Binary Log)๋ฅผ ์ฝ์ด์จ๋ค.
- ๊ฐ์ ธ์จ ๋ก๊ทธ๋ฅผ Relay Log(์ค๊ฐ ๋ก๊ทธ ํ์ผ)์ ์ ์ฅํ๋ค.
SQL Thread
- Relay Log์ ๊ธฐ๋ก๋ ์ฟผ๋ฆฌ๋ฅผ ์คํํ์ฌ ์ค์ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ ์ ์ฉํ๋ค.
Slave๋ Master์์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์ํจ์ ๊ฐ์งํ๊ธฐ ์ํด Polling ๋ฐฉ์์ ์ฌ์ฉํ๋ค. ์ฆ, Slave์ I/O Thread๋ Master์ Binary Log๋ฅผ "Polling" ๋ฐฉ์์ผ๋ก ํ์ธํ๊ณ ๊ฐ์ ธ์ค๋ ์ญํ ์ ํ๋ค.
Master ์๋ฒ์ Slave ์๋ฒ๋ฅผ ์ค์ ํ START SLAVE; ๋ฅผ ํตํด Replication์ ์์ํ๋ฉด, Slave๊ฐ I/O Thread๊ฐ ์์๋๊ณ , ์ฐ๋ ๋๊ฐ Master์ ์ฃผ๊ธฐ์ ์ผ๋ก ์๋ก์ด Binary Log๊ฐ ์๋์ง ์์ฒญํ๋ ๊ฒ์ด๋ค.
Master-Slave ๋ฐฉ์์ ๋ณต์ ๋ฐฉ์ ์ธ์ Master-Master, Multi-Source ๋ฑ์ ๋ฐฉ์ ๋ํ ์กด์ฌํ๋ค.
2. MariaDB Galera Cluster
MariaDB Galera Cluster๋ ๋๊ธฐ์ Multi-Master ๋ณต์ (Synchronous Multi-Master Replication)๋ฅผ ์ง์ํ๋ ํด๋ฌ์คํฐ ์๋ฃจ์ ์ผ๋ก, ๋ชจ๋ ๋ ธ๋๊ฐ ๋๋ฑํ Master ์ญํ ์ ํ๋ฉฐ ์ค์๊ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๋ ๊ตฌ์กฐ์ด๋ค.
Galera Cluster๋ฅผ ์ดํดํ๊ธฐ ์ํด์๋ ๋ช ๊ฐ์ง ๊ฐ๋ ์ ๋ํด ์ดํดํ ํ์์ฑ์ด ์๋ค. ํด๋น ๊ฐ๋ ๋ค์ ์ดํดํจ์ผ๋ก์จ ์ด๋ป๊ฒ Galera Cluster๊ฐ ๋๊ธฐ์ ๋ฉํฐ ๋ง์คํฐ๋ฅผ ์ง์ํ๋์ง์ ๋ํด ๋๋ต์ ์ผ๋ก ์์๋ณด์.
๐ ์ธ์ฆ ๊ธฐ๋ฐ ๋ณต์ (Certification-Based Replication)
Galera Cluster๋ ๊ทธ๋ฃน ํต์ ๊ณผ ํธ๋์ญ์ ์ ๋ ฌ ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ๋๊ธฐ ๋ณต์ ๋ฅผ ๊ตฌํํ๋ค.
ํธ๋์ญ์ ์ ๊ฐ๋ณ ๋ ธ๋์์ ์คํ๋๋ฉฐ, ์ปค๋ฐ ์์ ์ ์ ์ฒด ํด๋ฌ์คํฐ์ ๋๊ธฐํ๋์ด ์ผ๊ด์ฑ์ ์ ์งํ๋ค.
์ด์ ๋ํ ๋ด์ฉ์ ์์ ๋ ๋ฌธ์ฅ๋ง์ผ๋ก ์ดํดํ๊ธฐ ํ๋ค ๊ฒ์ด๋ค. ๊ด๋ จ๋ ๋ด์ฉ์ ์๋์ Galera Cluster ๋ณต์ ๊ณผ์ ๊ณผ ํต์ ๋ฐฉ์ ๋ถ๋ถ์ ์ฝ์ผ๋ฉด ์ด๋ ์ ๋ ์ดํด๊ฐ ๋ ๊ฒ์ด๋ค.
๐ Replication API
Galera Cluster๋ wresp API๋ฅผ ์ฌ์ฉํ์ฌ Write-set ๋ณต์ ๋ฅผ ์ํํ๋ค.
1. ํ ๋ ธ๋์์ ๋ฐ์ดํฐ์ ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ค.
2. wsrep API๊ฐ ๋ณ๊ฒฝ ์ฌํญ์ ์ฐ๊ธฐ ์งํฉ(write-set)์ผ๋ก ๋ณํํ๋ค.
3. Galera ๋ณต์ ํ๋ฌ๊ทธ์ธ(Galera Replication Plugin)์ด ์ธ์ฆ ๋ฐ ๋ณต์ ๋ฅผ ์ํํ๋ค.
4. ๋ชจ๋ ๋ ธ๋๊ฐ ๋์ผํ ์์๋ก ํธ๋์ญ์ ์ ์ ์ฉํ๋ค.
๐ ๊ฒฉ๋ฆฌ ์์ค(Isolation Levels)
Galera Cluster๋ ์๋์ ๊ฒฉ๋ฆฌ ์์ค์ ์ง์ํ๋ค.
- READ-UNCOMMITED: ํธ๋์ญ์ ์ด ์ปค๋ฐ๋์ง ์์ ๋ฐ์ดํฐ๋ ์ฝ์ ์ ์์
- READ-COMMITED: ์ปค๋ฐ๋ ๋ฐ์ดํฐ๋ง ์ฝ์ ์ ์์ง๋ง, ๋ฐ๋ณต ๋ถ๊ฐ๋ฅํ ์ฝ๊ธฐ๊ฐ ๋ฐ์ํ ์ ์์
- REPEATABLE-READ: ์ฒซ ๋ฒ์งธ SELECT ์คํ ์์ ์ ์ค๋ ์ท์ ์ ์งํ์ฌ ๋ฐ๋ณต ๊ฐ๋ฅ์ฑ์ ๋ณด์ฅํจ
- SERIALIZABLE: ํธ๋์ญ์ ๊ฐ ์์ ํ ๊ฒฉ๋ฆฌ๋ฅผ ๋ณด์ฅํ์ง๋ง ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์
๐ ์ํ ์ ์ก (State Transfer)
ํด๋ฌ์คํฐ ๋ด ๋ ธ๋ ๊ฐ ๋๊ธฐํ๋ฅผ ์ํ ๋๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
- State Snapshot Transfer (SST)
- ๋ ธ๋ ์ ์ฒด ๋ฐ์ดํฐ์ ์ค๋ ์ท์ ์ ์กํ์ฌ ๋๊ธฐํํ๋ ๋ฐฉ์
- mysqldump, rsync, xtrabackup ๋ฑ์ ์ฌ์ฉ
- ์ ๋ ธ๋๊ฐ ํด๋ฌ์คํฐ์ ์ถ๊ฐ๋ ๋ ์ฌ์ฉ
- Incremental State Transfer (IST)
- ๊ธฐ์กด ๋ ธ๋์ ๋๋ฝ๋ ํธ๋์ญ์ ๋ง ์ ์กํ์ฌ ๋๊ธฐํ
- gcache๋ฅผ ์ด์ฉํด ํ์ํ ๋ฐ์ดํฐ๋ง ์ ๋ฌ
- ๋คํธ์ํฌ ํธ๋ํฝ์ ์ค์ด๊ณ ์๋๋ฅผ ํฅ์์ํด
๐ ํ๋ฆ ์ ์ด (Flow Control)
Galera Cluster๋ ํผ๋๋ฐฑ ๊ธฐ๋ฐ์ ํ๋ฆ ์ ์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋ ธ๋ ๊ฐ ๋๊ธฐํ๋ฅผ ์กฐ์ ํ๋ค.
๋ ธ๋๊ฐ ๋๋ฌด ๋๋ฆฌ๊ฒ ํธ๋์ญ์ ์ ์ฒ๋ฆฌํ๋ฉด ๋ณต์ ๋ฅผ ์ผ์ ์ค์งํ๊ณ ๋ฐ๋ผ์ก์ ์ ์๋๋ก ํ๋ค.
gcs.fc_limit ๋ฑ์ ํ๋ผ๋ฏธํฐ๋ฅผ ํตํด ํธ๋์ญ์ ์ฒ๋ฆฌ ์๋๋ฅผ ์กฐ์ ํ ์ ์๋ค.
๐ ๋ ธ๋ ์ฅ์ ๋ฐ ๋ณต๊ตฌ (Node Failure & Recovery)
๋ ธ๋๊ฐ ํด๋ฌ์คํฐ์์ ์ฐ๊ฒฐ์ ์์ผ๋ฉด ์ฅ์ ์ํ๋ก ๊ฐ์ฃผ๋๋๋ฐ ์ฅ์ ๋ฐ์ ์ ์ฟผ๋ผ(quorum) ๊ณ์ฐ์ ํตํด ํด๋ฌ์คํฐ ์ํ๋ฅผ ์ ์งํ๋ค. ๋ ธ๋ ๋ณต๊ตฌ ์์๋ SST ๋๋ IST๋ฅผ ์ฌ์ฉํ์ฌ ๋๊ธฐํ๋ฅผ ์งํํ๋ค.
๐ ์ฟผ๋ผ(Quorum) ๊ตฌ์ฑ ์์
Galera Cluster์์๋ ํด๋ฌ์คํฐ์ ๊ฐ์ฉ์ฑ์ ์ ์งํ๊ธฐ ์ํด ์ฟผ๋ผ ๊ธฐ๋ฐ์ ์์ฌ ๊ฒฐ์ ์ ์ํํ๋ค.
- ์ฟผ๋ผ(Quorum): ํด๋ฌ์คํฐ ๋ด์์ ๊ณผ๋ฐ์ ์ด์(50% + 1)์ ๋ ธ๋๊ฐ ๋์ํ๋ ๊ฒฝ์ฐ ํด๋ฌ์คํฐ๊ฐ ์ ์ง๋๋ค.
- ๋ฌด๊ฒ ๊ธฐ๋ฐ ์ฟผ๋ผ(Weighted Quorum): ํน์ ๋ ธ๋์ ๋ ๋์ ๊ฐ์ค์น๋ฅผ ๋ถ์ฌํ์ฌ ์์ ์ฑ์ ํ๋ณดํ๋ค.
- ๋คํธ์ํฌ ๋ถํ ๋ฐ์ ์, ํด๋ฌ์คํฐ๋ Primary Component์ Non-Primary Component๋ก ๋๋๋ค.
Galera Cluster๋ ์ฟผ๋ผ(Quorum) ๋ฌธ์ ์ ๋คํธ์ํฌ ๋ถํ (Split-Brain) ๋ฐฉ์ง๋ฅผ ์ํด ์ต์ 3๊ฐ์ ๋ ธ๋๋ฅผ ์ฌ์ฉํ๊ณ ํ์ ๊ฐ์ ๋ ธ๋๋ฅผ ์ฌ์ฉํ ๊ฒ์ ๊ถ์ฅํ๋ค.
โ 1. ํด๋ฌ์คํฐ ์ฟผ๋ผ ๋ฌธ์
Galera Cluster๋ ๊ณผ๋ฐ์ ํฌํ ๋ฐฉ์์ ์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ์ ์ํ๋ฅผ ์ ์งํ๋ค.
๊ทธ๋ฐ๋ฐ ๋ง์ฝ ๋ ธ๋๊ฐ 2๊ฐ ๋ฟ์ด๋ผ๋ฉด, 1๊ฐ์ ๋ ธ๋๊ฐ ์ฅ์ ๊ฐ ๋ฐ์ํด ๋ค์ด๋์ ๊ฒฝ์ฐ ๋จ์ ํ ๊ฐ์ ๋ ธ๋๋ ๋จ๋ ์ผ๋ก Primary Component๊ฐ ๋ ์ ์๋ค. ์ฆ, ํ ๊ฐ์ ๋ ธ๋๊ฐ ์ฃฝ์ผ๋ฉด ๋๋จธ์ง ๋ ธ๋๋ ๋นํ์ฑํ ์ํ๊ฐ ๋๋ ๊ฒ์ด๋ค.
๋ฐ๋ผ์ ํด๋ฌ์คํฐ๋ฅผ ์ ์งํ๋ ค๋ฉด ์ต์ 3๊ฐ์ ๋ ธ๋๊ฐ ์์ด์ผ ๋ค์๊ฒฐ์ ํตํด ์ ์์ ์ธ Primary Component๋ฅผ ์ ์งํ ์ ์๋ค.
โ 2. ๋คํธ์ํฌ ๋ถํ (Split Brain) ๋ฐฉ์ง
๋คํธ์ํฌ ์ฅ์ ๊ฐ ๋ฐ์ํ์ฌ ํด๋ฌ์คํฐ๊ฐ 2๊ฐ์ ๊ทธ๋ฃน์ผ๋ก ๋๋ ๊ฐ๋ฅ์ฑ์ด ์๋ค. ๋ง์ฝ ์ง์๊ฐ์ ๋ ธ๋๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์ด๋ ์ชฝ๋ ๊ณผ๋ฐ์๋ฅผ ํ๋ณดํ์ง ๋ชปํด ํด๋ฌ์คํฐ๊ฐ ๋นํ์ฑํ ๋ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ์ด 4๊ฐ์ ๋ ธ๋๋ก ๊ตฌ์ฑ๋์ด ์์๋๋ฐ ๋คํธ์ํฌ ๋ฌธ์ ๋ก 2๊ฐ์ ๋ ธ๋๋ผ๋ฆฌ๋ง ๋คํธ์ํฌ ํต์ ์ด ๋์ด 2:2๋ก ๋๋ ์ ์๋ค. 2:2์ธ ๊ฒฝ์ฐ ์ด๋์ชฝ๋ ๊ณผ๋ฐ์ ์ด์์ด ์๋๋ฏ๋ก ๋ ๊ฐ์ ๊ทธ๋ฃน์ด ๋ชจ๋ ๋นํ์ฑํ ๋ ธ๋๊ฐ ๋์ด ๋ฒ๋ฆฐ๋ค.
๋ฐ๋ฉด, ์ด 5๊ฐ์ ๋ ธ๋๋ก ๊ตฌ์ฑ์ด ๋์๋๋ฐ ๋คํธ์ํฌ ์ฅ์ ๋ก ๊ทธ๋ฃน์ด 2๊ฐ๋ก ๋๋ ๊ฒฝ์ฐ ํ๋์ ๊ทธ๋ฃน์ 3๊ฐ์ ๋ ธ๋๋ก ๊ตฌ์ฑ๋๊ณ , ๋ค๋ฅธ ๋ ธ๋๋ 2๊ฐ์ ๋ ธ๋๋ก ๊ตฌ์ฑ๋๋ค. ๊ทธ๋ด ๊ฒฝ์ฐ 3๊ฐ์ ๋ ธ๋๊ฐ ์ํ ๊ทธ๋ฃน์ด ๊ณผ๋ฐ์ ์ด์์ด๊ธฐ ๋๋ฌธ์ 3๊ฐ์ ๋ ธ๋ ๊ทธ๋ฃน์ ๋นํ์ฑํ ๋์ง ์๊ณ ๊ณ์ ์ด์์ด ๋๋ค.
๐ ์คํธ๋ฆฌ๋ฐ ๋ณต์ (Streaming Replication)
์ผ๋ฐ์ ์ผ๋ก ํธ๋์ญ์ ์ ์ปค๋ฐ๋ ๋๋ง ๋ณต์ ๋ฐ ์ธ์ฆ๋๋ค. ๊ทธ๋ฌ๋ ๋์ฉ๋์ ํธ๋์ญ์ ์ด ๋ฐ์ํ ๊ฒฝ์ฐ ์คํธ๋ฆฌ๋ฐ ๋ณต์ ๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋์ญ์ ์ ์ฌ๋ฌ ์กฐ๊ฐ์ผ๋ก ๋๋ ๋ณต์ ํ ์ ์๋ค.
๊ธฐ์กด Master-Slave ๋ฐฉ์๊ณผ์ ์ฐจ์ด์
๋น๊ต ํญ๋ชฉ | Master-Slave ๋ฐฉ์ | Galera Cluster |
๋ณต์ ๋ฐฉ์ | ๋น๋๊ธฐ(Asynchronous) | ๋๊ธฐ(Synchronous) |
์ฐ๊ธฐ ๊ฐ๋ฅ ๋ ธ๋ | 1๊ฐ(Master) | ๋ชจ๋ ๋ ธ๋ |
Failover | ์๋์ผ๋ก Slave๋ฅผ ์น๊ฒฉํด์ผ ํจ | ์๋ Failover ๊ฐ๋ฅ |
๋ฐ์ดํฐ ์ ํฉ์ฑ | Replication Lag ๋ฐ์ ๊ฐ๋ฅ | ๋ชจ๋ ๋ ธ๋๊ฐ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง |
์ฑ๋ฅ | ์ฐ๊ธฐ๋ ๋จ์ผ Master๊ฐ ์ฒ๋ฆฌ | ์ฌ๋ฌ Master์์ ๋ถ์ฐ ๊ฐ๋ฅ |
๐ Galera Cluster๋ ๋ชจ๋ ๋ ธ๋๊ฐ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ์ ์งํ๋ฏ๋ก, ์ฝ๊ธฐ/์ฐ๊ธฐ๋ฅผ ๋ถํ ๋ถ์ฐํ ์ ์๊ณ , Master ์ฅ์ ์์๋ ์๋ ๋ณต๊ตฌ๊ฐ ๊ฐ๋ฅํ๋ค.
Galera Cluster ๋ณต์ ๊ณผ์
1. ํด๋ผ์ด์ธํธ(์คํ๋ง๋ถํธ ์๋ฒ)๊ฐ INSERT, UPDATE, DELETE์ ๊ฐ์ ์ฐ๊ธฐ ์์ ์ ์์ฒญํ๋ค.
2. ์์ฒญ ๋ฐ์ ๋ ธ๋์ Galera Cluster์์ ํธ๋์ญ์ ์ด ์ฒ๋ฆฌ๋๊ณ Write Set์ผ๋ก ๋ณํ๋๋ค.
์๋์ ๊ฐ์ UPDATE ์์ฒญ์ด ๋ค์ด์ค๋ฉด ํธ๋์ญ์ ์ด ์ฒ๋ฆฌ๋๊ณ
UPDATE users SET email = 'bob.newemail@mail.com' WHERE id = 2;
ํด๋น ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๋ก Write Set์ด ์์ฑ๋๋ค.
{
"transaction_id": 12345,
"changes": [
{
"table": "users",
"operation": "UPDATE",
"primary_key": 2,
"old_values": {
"email": "bob@mail.com"
},
"new_values": {
"email": "bob.newemail@mail.com"
}
}
]
}
3. Certification ๋จ๊ณ์์ ํธ๋์ญ์ ์ถฉ๋์ ๊ฒ์ฆํ ํ, Write set์ด Galera Cluster๋ฅผ ๊ตฌ์ฑํ๋ ๋ ๋ค๋ฅธ ์๋ฒ๋ก ์ ํ๋๋ค. ๋ง์ฝ ์ด ๋จ๊ณ์์ ์ถฉ๋์ด ๋ฐ์ํ๋ฉด ํธ๋์ญ์ ์ด ๋กค๋ฐฑ๋๋ค.
4. Galera Cluster๋ฅผ ๊ตฌ์ฑํ๋ ๋ ๋ค๋ฅธ ๋ ธ๋๊ฐ Write Set์ ๋ฐ์์ ํด๋น ํธ๋์ญ์ ์ ์คํํ๋ค.
5. ๋ชจ๋ ๋ ธ๋์์ ํด๋น ํธ๋์ญ์ ์ ์ฒ๋ฆฌํ๊ณ ๋ฐ์ดํฐ๊ฐ ๋๊ธฐํ๋๋ฉด, MariaDB์ ์ปค๋ฐ์ด ์ด๋ฃจ์ด์ง๊ณ , ์ปค๋ฐ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์ธํธ๊ฐ ์๋ต ๋ฐ๋๋ค.
6. ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด Galera Cluster๋ ๋ค๋ฅธ ๋ ธ๋์์ ํธ๋์ญ์ ์ ์ฒ๋ฆฌํ๊ณ ์ด๋ฅผ ๋๊ธฐํํ์ฌ ํด๋ผ์ด์ธํธ์๊ฒ ์ ์ ์๋ต์ ๋ณด๋ธ๋ค.
Galera Cluster ๋ ธ๋ ๊ฐ ํต์ ๋ฐฉ์
Galera Cluster์์ ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑํ๋ ๋ ธ๋๋ค์ ์๋ก ๋ฐ์ดํฐ ๋๊ธฐํ ๋ฐ ํธ๋์ญ์ ๊ฒ์ฆ์ ์ํด ํน๋ณํ ๋ฐฉ์์ผ๋ก ํต์ ํ๋ค.
1. ํธ๋์ญ์ ์คํ
๋ ธ๋ A์์ INSERT ์ฟผ๋ฆฌ๊ฐ ์คํ๋๋ฉด, ์ด ์ฟผ๋ฆฌ๋ Write Set์ผ๋ก ๋ณํ๋์ด Galera Cache(GCache)์ ์ ์ฅ๋๋ค.
- GCache(Galera Cache)
GCache๋ Galera์ ์ฐ๊ธฐ ์บ์๋ก, ๋ ธ๋ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐํํ ๋ ์ฌ์ฉ๋๋ค. ๊ฐ ๋ ธ๋๋ ์์ ์ ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ๋ฅผ GCache์ ์ ์ฅํ๊ณ , ์ด๋ฅผ ๋ค๋ฅธ ๋ ธ๋๋ค๊ณผ ๊ณต์ ํ์ฌ ๋๊ธฐํํ๋ค. GCache๋ ํธ๋์ญ์ ์ ๊ฒ์ฆํ๊ณ , Write Set๋ฅผ ์ ์ฅํ๋ค.
2. ํธ๋์ญ์ ์ ํ(I/O Thread)
๋ ธ๋ A์์ ๋ฐ์ํ Write Set์ Replication Bus๋ฅผ ํตํด ๋ค๋ฅธ ๋ ธ๋(์: ๋ ธ๋ B, ๋ ธ๋ C)๋ก ์ ํ๋๋ค.
- Replication Bus
Galera Cluster์ ๋ ธ๋๋ค์ Replication Bus๋ฅผ ํตํด ์๋ก ํต์ ํ๋ค. Replication Bus๋ ๋ด๋ถ ํต์ ์ฑ๋๋ก, ํธ๋์ญ์ ์ ๋ค๋ฅธ ๋ ธ๋์ ์ ๋ฌํ๊ณ , ํธ๋์ญ์ ์ ์ธ์ฆํ๋๋ฐ ์ฌ์ฉ๋๋ค.
Replication Bus๋ ํต์ ํ๋กํ ์ฝ๋ก TCP/IP ๊ธฐ๋ฐ์ Gcomm(Galera Communication Protocol)์ ์ฌ์ฉํ๋ค.
Gcomm์ ๋ด๋ถ ํต์ ์ ์ํด ํฌํธ ๋ฒํธ(4567/UDP, 4568/TCP)
** ์ฐธ๊ณ : Gcomm์ UDP๋ก ๋ ธ๋ ๊ฒ์๊ณผ ์ฐ๊ฒฐ์ ์ฒ๋ฆฌํ์ง๋ง, ๋ฐ์ดํฐ ์ ํ๋ TCP/IP๋ก ์ด๋ฃจ์ด์ง๋ค.
- WSREP(Write Set Replication Protocol)
WSREP๋ Write Set์ ์ ํํ๊ณ ๋๊ธฐํํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํ๋กํ ์ฝ๋ก, Write Set ์ ํ ์ ํ์ํ ์์๊ณผ ๊ท์น์ ์ ์ํ๋ค.
3. ํธ๋์ญ์ ์ธ์ฆ(SQL Thread)
๋ ธ๋ B์ C๋ ํด๋น Write Set์ ์ธ์ฆํ๊ณ , ์ถฉ๋์ด ์์ผ๋ฉด ์ด๋ฅผ ์ฒ๋ฆฌํ์ฌ ๋๊ธฐํํ๋ค.
4. ๋ฐ์ดํฐ ๋๊ธฐํ (SQL Thread)
ํธ๋์ญ์ ์ด ์ธ์ฆ๋๋ฉด, ๊ฐ ๋ ธ๋๋ ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐํํ์ฌ ๋์ผํ ๋ฐ์ดํฐ ์ํ๋ฅผ ์ ์งํ๋ค.
SQL Thread๋ ๊ฐ ๋ ธ๋์์ ์์ ๋ Write Set์ ์ ์ฉํ๊ณ , ์ด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ํ๋ค.
5. ํธ๋์ญ์ ์ปค๋ฐ (SQL Thread)
๋ชจ๋ ๋ ธ๋๊ฐ ํธ๋์ญ์ ์ ์ฒ๋ฆฌํ๊ณ , ์ปค๋ฐ์ด ์ด๋ฃจ์ด์ง๋ฉด ํด๋ฌ์คํฐ๋ ๋๊ธฐํ๋ ์ํ๋ก ์ ์ง๋๋ค.
garbd(Galera Arbitrator)
Galera Cluster์ ๋ํด ์ค๋ช ํ ๋, Galera Cluster๋ ์ต์ 3๊ฐ์ ๋ ธ๋๋ก ๊ตฌ์ฑํ ๊ฒ์ ๊ถ์ฅํ๋ค๊ณ ์ธ๊ธํ๋ค. ๊ทธ๋ฌ๋ ๋ง์ฝ ์๋ฒ์ ์์์ด ๋ถ์กฑํด์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๊ณต๊ฐ์ด ๋ถ์กฑํด 2๊ฐ์ DB๋ง ์ค์น๊ฐ ๊ฐ๋ฅํ๋ค๊ณ ํ๋ฉด ์ด๋ป๊ฒ ํ ๊ฒ์ธ๊ฐ?
์ด๋ด ๋ ์ฌ์ฉํ๋ ๊ฒ์ด garbd์ด๋ค.
garbd๋ Galera Cluster์ ๋ณด์กฐ ๊ตฌ์ฑ ์์๋ก ๋ณต์ ์๋ ์ฐธ์ฌํ์ง ์์ง๋ง ํด๋ฌ์คํฐ์ ํฌํ์๋ ์ฐธ์ฌํด ์ค์ ๋ ธ๋๋ 2๊ฐ๋ฟ์ด์ง๋ง ํ ๊ฐ๊ฐ ์ฃฝ๋๋ผ๋ garbd๊ฐ ํฌํ์ ์ฐธ์ฌํด Quorum์ ์ ์งํด ํด๋ฌ์คํฐ๊ฐ ์ ์์ ์ผ๋ก ๋์ํ๊ฒ ํ ์ ์๋ค.
Garbd๋ ํด๋ฌ์คํฐ์ ํฌํ ๊ฒฐ์ ์ ์ฌ์ฉ๋๋ฏ๋ก, ์ค์ ๋ ธ๋๊ฐ ๋ค์ด๋๋ ์๊ด์ด ์๋ ๋ณ๋์ ์๋ฒ์ ์ค์นํ๋ ๊ฒ์ด ์ข๋ค. ๋ง์ฝ Mariadb๊ฐ ์ค์น๋ ๋ ธ๋์ ์ค์นํ๊ฒ ๋๋ฉด ํด๋น ์๋ฒ๊ฐ ์ฃฝ๋ ๊ฒฝ์ฐ Garbd๋ ํจ๊ป ์ฃฝ๊ธฐ ๋๋ฌธ์ ์๋น์ค๊ฐ ์ค๋จ๋ ๊ฐ๋ฅ์ฑ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ garbd๋ ๋ณ๋์ ์๋ณด ๋๋ ๊ฐ๋ฒผ์ด VM์ ์ค์นํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค.
์ฐธ๊ณ ์๋ฃ
1. https://mariadb.com/kb/en/replication-overview/
Replication Overview
Allow the contents of one or more primary servers to be mirrored on one or more replicas.
mariadb.com
'Study > database' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Galera Cluster๋ฅผ ํตํ MariaDB ํด๋ฌ์คํฐ๋ง ๊ตฌ์ฑ (2) Galera Cluster ๋์ ์๋ฆฌ (1) | 2025.02.20 |
---|---|
[database ๊ณ ๊ธ] db ์ค๊ณ (2023.08.10) (0) | 2023.08.10 |
[database ๊ณ ๊ธ] ํ๋ก์์ (2023.08.09 ~ 10) (0) | 2023.08.09 |
[database ๊ณ ๊ธ] ๊ณ์ธต ์ฟผ๋ฆฌ (2023.08.09) (0) | 2023.08.09 |
[database ๊ณ ๊ธ] ์ธ๋ฑ์ค (2023.08.09) (0) | 2023.08.09 |