๐ก ์๋ณธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ์ ๋ณต์ ๋ณธ์ ์์ฑํ๋ ๊ธฐ์ ๋ก,
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ถํ ๋ถ์ฐ, ๊ณ ๊ฐ์ฉ์ฑ, ๋ฐฑ์ ๋ฑ์ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๋ค.
์ผ๋ฐ์ ์ธ ์๋น์ค๋ ์ฐ๊ธฐ ์์ ๋ณด๋ค ์ฝ๊ธฐ ์์ ์ ๋น๋๊ฐ ๋๋ค.
Replication์ ํตํด ์ฝ๊ธฐ ์์ ์ ๋ณ๋์ ๋ณต์ ๋ณธ(์ฝ๊ธฐ ์ ์ฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค)์ ํ ๋นํ์ฌ ์ฃผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฝ๊ธฐ ์์ ๋ถํ๋ฅผ ๋ถ์ฐํจ์ผ๋ก์จ, ์์คํ ์ ์ ๋ฐ์ ์๋ต ์๊ฐ์ ํฅ์์ํจ๋ค.
์ฃผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฅ์ ๊ฐ ๋ฐ์ํ์ ๋, ๋ณต์ ๋ณธ์ ์ฌ์ฉํ์ฌ ์๋น์ค์ ์ง์์ฑ์ ๋ณด์ฅํจ์ผ๋ก์จ ์๋น์ค ์ค๋จ์ ๋ฐฉ์งํ๊ณ ์์ ์ฑ์ ๋ณด์ฅํ๋ค.
๋๋ถ๋ถ์ Replication์ WAL์ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์,
PostgreSQL Replication์ ์ค๋ช
ํ๊ธฐ ์์, WAL์ ๋ํด ์ดํดํด์ผ ํ๋ค.
๐ก ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๋ DBMS ํ์ค ๋ฐฉ๋ฒ์ผ๋ก, ํธ๋์ญ์ ๋ก๊น ๋ฐฉ์ ์ค ํ๋์ด๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ํ๋ ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋ก๊ทธ๋ก ๋จ๊ธฐ๋ ๋ฐฉ๋ฒ์ผ๋ก,
๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ๋์คํฌ์ ๊ธฐ๋กํ๊ธฐ ์ ์ ๋ก๊ทธ์ ๋จผ์ ๊ธฐ๋กํ๋ค.
์ฃผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ณต์ ๋ณธ์ผ๋ก ๋๊ธฐํํ๋๋ฐ ํ์ฉ๋ ์ ์๋ค.
PostgreSQL์์ ์ ๊ณตํ๋ Replication ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ๋ค.
PostgreSQL Replication์ ํฌ๊ฒ Physical Replication
๊ณผ Logical Replication
์ผ๋ก ๊ตฌ๋ถํ ์ ์๋ค.
Physical Replication
์
๐ก ํ๋์ WAL ํ์ผ์ ์ฌ๋ฌ ๊ฐ์ WAL Record๋ก ๊ตฌ์ฑ๋๋ค.
๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์ํ ๋, ํ๋์ ๋ณ๊ฒฝ ์ฌํญ์ ํ๋์ WAL Record๋ก ๋ณผ ์ ์๋ค.
Logical Replication
์
WAL์ ๊ธฐ๋ฐ์ผ๋ก ์๋ํ์ง๋ง, DML ๋ฐ์ ์ walsender ํ๋ก์ธ์ค๊ฐ WAL Record๋ฅผ Logical Decoding ์ฒ๋ฆฌ ํ ์ ์กํ๋ค.
๐ก Logical Decoding
: WAL ๋ด์ฉ์ Tuple ๋๋ SQL๋ฌธ๊ณผ ๊ฐ์ ์์ฉ ํ๋ก๊ทธ๋จ ํ์์ผ๋ก ๋์ฝ๋ฉํ๋ ํ๋ก์ธ์ค
= ๋ณ๊ฒฝ ์ฌํญ์ ํด์ ๊ฐ๋ฅํ ์ผ๊ด๋๊ณ , ์ดํดํ๊ธฐ ์ฌ์ด ํ์์ผ๋ก ๋์ฝ๋ฉ
๐ก ์์ฑ๋ WAL ํ์ผ์ ๋ณต์ ๋ณธ์ผ๋ก ๋๊ธฐํ(์ ๋ฌ ๋ฐ ์ ์ฉ)ํ๋ ๋ฐฉ์
์ฆ, ์ฃผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ WAL ํ์ผ์ด ์ ํด์ง ํฌ๊ธฐ (๊ธฐ๋ณธ ๊ฐ : 16MB)๋ฅผ ๋ค ์ฑ์ด ํ ์๋ก์ด ํ์ผ์ด ์์ฑ๋์ด์ผ ๋น๋ก์ ๊ธฐ์กด WAL ํ์ผ์ ๋ณต์ ๋ณธ์ ์ ๋ฌํ๋ ๊ฒ์ด ๊ฐ๋ฅํด์ง๋ค.
๋ฐ๋ผ์, ํ์ฌ ์ฌ์ฉ ์ค์ธ WAL ํ์ผ์ด ์ฑ์์ง๋ ๋์
์ฃผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ณต์ ๋ณธ ๊ฐ์ Data Lag์ด ๋ฐ์ํ ์ ์์ผ๋ฉฐ,
์ด๋ ์ฅ์ ๋ฐ์ ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์ต๋ WAL ํ์ผ ํฌ๊ธฐ๋งํผ ์์ค๋๋ ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํ๋ค.
๐ข
active_timeout
ํ๋ผ๋ฏธํฐ๋ฅผ ํตํด WAL ํ์ผ์ ์ฃผ๊ธฐ์ ์ผ๋ก ์ ํํ๋ ์๊ฐ์ ์ง์ ํจ์ผ๋ก์จ, Data Lac์ ์ค์ผ ์ ์๋ค.
๋ค๋ฅธ Replication ๋ฐฉ์์ ๋นํด ๊ตฌ์ฑ์ด ๊ฐ๋จํ๋ค.
archive_command
ํ๋ผ๋ฏธํฐ๋ฅผ ์ด์ฉํ์ฌ ๋ณต์ ๋ณธ์ผ๋ก WAL ํ์ผ์ ์ ๋ฌํ๊ธฐ ์ฝ๋ค.
๋ค์ค ๋ณต์ ๋ณธ์ ๊ตฌ์ฑํ ์ ์๋ค.
์ฃผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ณต์ ๋ณธ ๊ฐ์ major ๋ฒ์ (Ex: PostgreSQL 10, 11๋ฑ) ๋ฐ bit (Ex: 32bits, 64bits)๊ฐ ๋์ผํด์ผ ๊ตฌ์ฑ ๊ฐ๋ฅํ๋ค.
WAL ํ์ผ์ด ๊ฐ๋์ฐจ๊ฑฐ๋, archive_time
์ ์ํด ๊ต์ฒด๋์ง ์์ ์ํฉ์์
์ฃผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด, ์์ง ๋ณต์ ๋ณธ์ผ๋ก ๋๊ธฐํ๋์ง ์์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ํ ์ ์ค์ด ๋ฐ์ํ ์ ์๋ค.
๐ก ์ฃผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ WAL ํ์ผ์ด ์์ฑ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ , WAL Record๋ฅผ ์ค์๊ฐ์ผ๋ก Streaming ํ๋ ๋ฐฉ์
์ฃผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ WAL Record๋ฅผ ๋ณต์ ๋ณธ์ผ๋ก ์ ๋ฌํ๊ธฐ ์ํด,
WAL Sender
WAL Receiver
๋ผ๋ ํ๋ก์ธ์ค๊ฐ ํ์ํ๋ฉฐ, ์ด ํ๋ก์ธ์ค๋ค์ด ์ฃผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ณต์ ๋ณธ ๊ฐ์ ๋๊ธฐํ๋ฅผ ์ํํ๋ค.
๋ค๋ฅธ Replication ๋ฐฉ์์ ๋นํด ๊ตฌ์ฑ์ด ๊ฐ๋จํ๋ค.
File-based Log Shipping ๋ฐฉ์์ ๋นํด ์ฃผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฑฐ์ ์ค์๊ฐ์ผ๋ก ๋ณต์ ๋ณธ์ ๋๊ธฐํํ๋ค.
WAL ํ์ผ์ ๊ต์ฒด ์ฌ๋ถ์ ๊ด๊ณ ์์ด ๋๊ธฐํ ๊ฐ๋ฅํ๋ค.
์์ง ๋๊ธฐํ๋์ง ์์ WAL Record๊ฐ ํฌํจ๋ WAL ํ์ผ์ด ์ญ์ ๋ ๊ฒฝ์ฐ,
๋ ์ด์ ๋๊ธฐํ๋ฅผ ์งํํ ์ ์์ผ๋ฏ๋ก ๋ณต์ ๋ณธ์ ์ฌ๊ตฌ์ฑ ํด์ผ ํ๋ค.
์ฃผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ณ์ ๋ณต์ ๋ณธ์ ์คํธ๋ฆฌ๋ฐํด์ผ ํ๋ฏ๋ก ์ฃผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น ์ ์๋ค.
Physical Replication์ ๊ตฌ์ฑ์ด ๋น๊ต์ ๊ฐ๋จํ๋ค๋ ์ฅ์ ์ด ์์ง๋ง,
๋ค์๊ณผ ๊ฐ์ ๊ณตํต์ ์ธ ์ ์ฝ ์ฌํญ์ด ์กด์ฌํ๋ค.
Physical Replication์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฒด๋ฅผ ๋ณต์ ํ๊ธฐ ๋๋ฌธ์, ํน์ ๋ถ๋ถ๋ง ์ ํ์ ์ผ๋ก ๋ณต์ ํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค.
PostgreSQL์ Major ๋ฒ์ ์ด ๋ค๋ฅด๋ค๋ฉด ๋ณต์ ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค.
PostgreSQL์ด ์ค์น๋ ์ด์์ฒด์ ๊ฐ ๋ค๋ฅด๋ค๋ฉด ๋ณต์ ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค.
Physical Replication์ ์์ ๊ฐ์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด,
๋ค์์ผ๋ก ์ค๋ช
ํ Logical Replication์ด ๋์
๋์๋ค.
Logical Replication์ Physical Replication์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด ๋์ ๋์์ผ๋ฉฐ, PostgreSQL 10 ๋ฒ์ ๋ถํฐ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
Logical Replication์ ํ๋์ ๊ฒ์์์, ํ๋ ์ด์์ ๊ตฌ๋
์๋ก ๊ตฌ์ฑ๋๋ค.
๊ตฌ๋
์๋ ์์ ์ด ๊ตฌ๋
์ค์ธ ๊ฒ์์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์, ์ด๋ฅผ ๊ฒ์ํ์ฌ ๊ฒ์์๊ฐ ๋ ์ ์๋ค.
๊ตฌ๋ ๊ณผ ๊ฒ์ ๊ฐ์ Replication์ ๋ณต์ ID(Replication Identify)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ํ๋๋ฉฐ, ๋ณต์ ID๋ ๊ธฐ๋ณธ ํค ๋๋ ๊ณ ์ ํค๊ฐ ๋ ์ ์๋ค.
๊ธฐ๋ณธ ํค์ ๊ณ ์ ํค๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ฉด REPLICA IDENTITY FULL
์ต์
์ผ๋ก Table ์์ฑ์ ๋ณ๊ฒฝํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
ALTER REPLICATION my_publication ADD TABLE publication_table WITH (REPLICA IDENTITY FULL);
ํ์ง๋ง ์ด ๋ฐฉ๋ฒ์ Table ๋ณ๊ฒฝ ์ฌํญ์ด ์์ ๋๋ง๋ค ์ ์ฒด Table์ ๋ณต์ ํ๋ฏ๋ก, ์์ฃผ ์ ๋ฐ์ดํธ ๋๋ ๋์ฉ๋ Table์ ๋ํด์๋ ๋นํจ์จ์ ์ด๋ฉฐ ์์์ ๋ง์ด ์๋ชจํ๋ค.
์ฌ๋ฌ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ๊ฐ์ ๋ฐ์ดํฐ ํตํฉ
(ex : ์ฌ๋ฌ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ฐ์ดํฐ๋ฅผ ์ค์ ์ง๊ณ ์์คํ
์ ์ ๋ฌํ๋ ๊ฒฝ์ฐ)
์๋ก ๋ค๋ฅธ Major ๋ฒ์ ๊ฐ์ Replication
์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ ๋ฐ์ดํฐ ๋ง์ด๊ทธ๋ ์ด์
Physical Replication๋ณด๋ค ๋ ๋ง์ ์ค๋ฒํค๋์ ๋ณํ ์์ ์ ํ์๋ก ํ๋ฏ๋ก, ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์๋ค.
์๋ฐฉํฅ Replication์ด ๋ถ๊ฐ๋ฅํ๋ค.
์ด๋ฒ ํฌ์คํ ์์๋ Replication์ ๊ฐ๋ ๊ณผ ๋ชฉ์ , ๊ทธ๋ฆฌ๊ณ PostgreSQL์์ ์ ๊ณตํ๋ ๋ค์ํ Replication ๋ฐฉ์์ ์ข ๋ฅ์ ๊ฐ๊ฐ์ ์ฅ๋จ์ ์ ๋ํด ์์๋ณด์๋ค.
๊ทธ๋ฆฌ๊ณ , ๋ค์๊ณผ ๊ฐ์ ์ด์ ๋ก OurHour ์๋น์ค์ ๋ฉ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ธ PostgreSQL์ Streaming Replication์ ์ฌ์ฉํ์ฌ ์ฝ๊ธฐ ์ ์ฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ธฐ ์ ์ฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋ถ๋ฆฌํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค.
์ฐ๊ธฐ ์ ์ฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ณ๊ฒฝ ์ฌํญ์ด ๊ฑฐ์ ์ค์๊ฐ์ผ๋ก ์ ํ๋์ด ๋๊ธฐํ ๋๊ธฐ ๋๋ฌธ์, ์ฝ๊ธฐ ์ ์ฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ํญ์ ์ต์ ์ํ๋ฅผ ์ ์งํ ์ ์๋ค.
์ฝ๊ธฐ ์ ์ฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ๋ฌ ๋ ๋์ด ์ฝ๊ธฐ ์์ ๋ถํ๋ฅผ ๋ถ์ฐ ์ํฌ ์ ์์ด ํ์ฅ์ฑ์ด ์ข๋ค.
PostgreSQL์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ผ๋ก, ๊ตฌ์ฑ ๋ฐ ์ ์ง ๋ณด์๊ฐ ์ฉ์ดํ๋ค.
์ฃผ ๋ฐ์ดํฐ๋ฒ ์ด์ค(์ฐ๊ธฐ ์ ์ฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค) ์ฅ์ ์, ๋ณต์ ๋ณธ(์ฝ๊ธฐ ์ ์ฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค)๋ก ์ฝ๊ฒ ์ ํ์ด ๊ฐ๋ฅํด ์๋น์ค์ ๊ฐ์ฉ์ฑ์ ํฅ์ ์ํฌ ์ ์๋ค.
์ฌ์ค, ์์ ์์ ํ ๋ค๊ฐ์ง ์ฅ์ ์ค ์ธ๊ฐ์ง๋ Steaming Replication ๋ฐฉ์์ ๊ณ ์ ํ ์ฅ์ ์ด๋ผ๊ธฐ ๋ณด๋ค๋ Physical Replication์ ์ฅ์ ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
Logical Replication์ ์ฃผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง์ด๊ทธ๋ ์ด์ ์ด๋, ํตํฉ์ ์ฌ์ฉ๋๋ ๋ฐฉ์์ผ๋ก ๋ชฉ์ ๊ณผ ๋ง์ง ์์ ์ ์ด์ ๊ณ ๋ ค ๋์์์ ๋ฐฐ์ ๋์๊ณ ,
๊ฒฐ๊ตญ, ๋๊ธฐํ ์๋์ ์ฃผ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ๋ณต์ ๋ณธ ๋ชจ๋์ ์ํฅ์ ๋ฏธ์น๋ ์์คํ ๋ถํ ์ฌ์ด์ ๋ฌด์์ ์ทจํ๊ณ , ๋ฌด์์ ํฌ๊ธฐํ ๊ฒ์ธ์ง์ ๋ฐ๋ผ File-based Log Shipping๊ณผ Streaming ๋ฐฉ์ ์ค ์ด๋ค ๋ฐฉ์์ ์ฌ์ฉํ ๊ฒ์ธ์ง ๊ฒฐ์ ๋๋๋ฐ, ์ด ๊ฐ๋ฆผ๊ธธ์์ ๋๋ ๋๊ธฐํ ์๋๋ฅผ ์ทจํ๊ธฐ๋ก ์ ํํ๋ค.
์ฐธ๊ณ ๋งํฌ : https://blog.ex-em.com/1781