[PostgreSQL(4)] PostgreSQL Replication

๊ฐœ๋ฐœ๋กœ๊ทธยท2023๋…„ 10์›” 31์ผ
0
post-thumbnail

๐Ÿ“Œ Database Replication์ด๋ž€


๐Ÿ’ก ์›๋ณธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ์˜ ๋ณต์ œ๋ณธ์„ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ์ˆ ๋กœ,
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ, ๊ณ ๊ฐ€์šฉ์„ฑ, ๋ฐฑ์—… ๋“ฑ์„ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

โœ… ๋ถ€ํ•˜ ๋ถ„์‚ฐ

์ผ๋ฐ˜์ ์ธ ์„œ๋น„์Šค๋Š” ์“ฐ๊ธฐ ์ž‘์—…๋ณด๋‹ค ์ฝ๊ธฐ ์ž‘์—…์˜ ๋นˆ๋„๊ฐ€ ๋†’๋‹ค.

Replication์„ ํ†ตํ•ด ์ฝ๊ธฐ ์ž‘์—…์„ ๋ณ„๋„์˜ ๋ณต์ œ๋ณธ(์ฝ๊ธฐ ์ „์šฉ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค)์— ํ• ๋‹นํ•˜์—ฌ ์ฃผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ฝ๊ธฐ ์ž‘์—… ๋ถ€ํ•˜๋ฅผ ๋ถ„์‚ฐํ•จ์œผ๋กœ์จ, ์‹œ์Šคํ…œ์˜ ์ „๋ฐ˜์˜ ์‘๋‹ต ์‹œ๊ฐ„์„ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค.



โœ… ๊ณ ๊ฐ€์šฉ์„ฑ

์ฃผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ๋ณต์ œ๋ณธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค์˜ ์ง€์†์„ฑ์„ ๋ณด์žฅํ•จ์œผ๋กœ์จ ์„œ๋น„์Šค ์ค‘๋‹จ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์•ˆ์ •์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.







๐Ÿ“Œ WAL (Write-Ahead Logging)


๋Œ€๋ถ€๋ถ„์˜ Replication์€ WAL์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์—,
PostgreSQL Replication์„ ์„ค๋ช…ํ•˜๊ธฐ ์•ž์„œ, WAL์— ๋Œ€ํ•ด ์ดํ•ดํ•ด์•ผ ํ•œ๋‹ค.

โœ… WAL์ด๋ž€

๐Ÿ’ก ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” DBMS ํ‘œ์ค€ ๋ฐฉ๋ฒ•์œผ๋กœ, ํŠธ๋žœ์žญ์…˜ ๋กœ๊น… ๋ฐฉ์‹ ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋กœ๊ทธ๋กœ ๋‚จ๊ธฐ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ,
    ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์„ ๋””์Šคํฌ์— ๊ธฐ๋กํ•˜๊ธฐ ์ „์— ๋กœ๊ทธ์— ๋จผ์ € ๊ธฐ๋กํ•œ๋‹ค.

  • ์ฃผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ณต์ œ๋ณธ์œผ๋กœ ๋™๊ธฐํ™”ํ•˜๋Š”๋ฐ ํ™œ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.







๐Ÿ“Œ PostgreSQL Replication ์ข…๋ฅ˜


PostgreSQL์—์„œ ์ œ๊ณตํ•˜๋Š” Replication ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

PostgreSQL Replication์€ ํฌ๊ฒŒ Physical Replication๊ณผ Logical Replication์œผ๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค.



Physical Replication ์€

  • 1๏ธโƒฃ : WAL ํŒŒ์ผ ์ž์ฒด๋ฅผ ์ „๋‹ฌํ•˜๋Š” Log Shipping๊ณผ,
  • 2๏ธโƒฃ : WAL ํŒŒ์ผ ์ €์žฅ ์—ฌ๋ถ€์™€ ๊ด€๊ณ„์—†์ด WAL Record๋ฅผ ์ „๋‹ฌํ•˜๋Š” Streaming Replication์œผ๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ’ก ํ•˜๋‚˜์˜ WAL ํŒŒ์ผ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ WAL Record๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ฐœ์ƒํ•  ๋•Œ, ํ•˜๋‚˜์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ํ•˜๋‚˜์˜ WAL Record๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.



Logical Replication ์€
WAL์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘๋™ํ•˜์ง€๋งŒ, DML ๋ฐœ์ƒ ์‹œ walsender ํ”„๋กœ์„ธ์Šค๊ฐ€ WAL Record๋ฅผ Logical Decoding ์ฒ˜๋ฆฌ ํ›„ ์ „์†กํ•œ๋‹ค.

๐Ÿ’ก Logical Decoding

: WAL ๋‚ด์šฉ์„ Tuple ๋˜๋Š” SQL๋ฌธ๊ณผ ๊ฐ™์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ํ˜•์‹์œผ๋กœ ๋””์ฝ”๋”ฉํ•˜๋Š” ํ”„๋กœ์„ธ์Šค
= ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ•ด์„ ๊ฐ€๋Šฅํ•œ ์ผ๊ด€๋˜๊ณ , ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ํ˜•์‹์œผ๋กœ ๋””์ฝ”๋”ฉ







๐Ÿ“Œ Physical Replication


โœ… File-based Log Shipping

๐Ÿ’ก ์™„์„ฑ๋œ 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์— ์˜ํ•ด ๊ต์ฒด๋˜์ง€ ์•Š์€ ์ƒํ™ฉ์—์„œ
    ์ฃผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, ์•„์ง ๋ณต์ œ๋ณธ์œผ๋กœ ๋™๊ธฐํ™”๋˜์ง€ ์•Š์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ์œ ์‹ค์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.





โœ… Streaming Replication


๐Ÿ’ก ์ฃผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ WAL ํŒŒ์ผ์ด ์™„์„ฑ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ , WAL Record๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ Streaming ํ•˜๋Š” ๋ฐฉ์‹

์ฃผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ WAL Record๋ฅผ ๋ณต์ œ๋ณธ์œผ๋กœ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด,

  • ์ฃผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” WAL Sender
  • ๋ณต์ œ๋ณธ์—๋Š” WAL Receiver

๋ผ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ, ์ด ํ”„๋กœ์„ธ์Šค๋“ค์ด ์ฃผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋ณต์ œ๋ณธ ๊ฐ„์˜ ๋™๊ธฐํ™”๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.



๐Ÿ“ ์žฅ์ 

  • ๋‹ค๋ฅธ Replication ๋ฐฉ์‹์— ๋น„ํ•ด ๊ตฌ์„ฑ์ด ๊ฐ„๋‹จํ•˜๋‹ค.

  • File-based Log Shipping ๋ฐฉ์‹์— ๋น„ํ•ด ์ฃผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฑฐ์˜ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณต์ œ๋ณธ์— ๋™๊ธฐํ™”ํ•œ๋‹ค.

  • WAL ํŒŒ์ผ์˜ ๊ต์ฒด ์—ฌ๋ถ€์™€ ๊ด€๊ณ„ ์—†์ด ๋™๊ธฐํ™” ๊ฐ€๋Šฅํ•˜๋‹ค.



๐Ÿ“ ๋‹จ์ 

  • ์•„์ง ๋™๊ธฐํ™”๋˜์ง€ ์•Š์€ WAL Record๊ฐ€ ํฌํ•จ๋œ WAL ํŒŒ์ผ์ด ์‚ญ์ œ๋œ ๊ฒฝ์šฐ,
    ๋” ์ด์ƒ ๋™๊ธฐํ™”๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋ณต์ œ๋ณธ์„ ์žฌ๊ตฌ์„ฑ ํ•ด์•ผ ํ•œ๋‹ค.

  • ์ฃผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ณ„์† ๋ณต์ œ๋ณธ์— ์ŠคํŠธ๋ฆฌ๋ฐํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ฃผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋‹ค.





โœ… Physical Replication์˜ ํ•œ๊ณ„์ 

Physical Replication์€ ๊ตฌ์„ฑ์ด ๋น„๊ต์  ๊ฐ„๋‹จํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ,
๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณตํ†ต์ ์ธ ์ œ์•ฝ ์‚ฌํ•ญ์ด ์กด์žฌํ•œ๋‹ค.

  • Physical Replication์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ „์ฒด๋ฅผ ๋ณต์ œํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํŠน์ • ๋ถ€๋ถ„๋งŒ ์„ ํƒ์ ์œผ๋กœ ๋ณต์ œํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

  • PostgreSQL์˜ Major ๋ฒ„์ „์ด ๋‹ค๋ฅด๋‹ค๋ฉด ๋ณต์ œ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

  • PostgreSQL์ด ์„ค์น˜๋œ ์šด์˜์ฒด์ œ๊ฐ€ ๋‹ค๋ฅด๋‹ค๋ฉด ๋ณต์ œ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.


Physical Replication์˜ ์œ„์™€ ๊ฐ™์€ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด,
๋‹ค์Œ์œผ๋กœ ์„ค๋ช…ํ•  Logical 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์— ๋Œ€ํ•ด์„œ๋Š” ๋น„ํšจ์œจ์ ์ด๋ฉฐ ์ž์›์„ ๋งŽ์ด ์†Œ๋ชจํ•œ๋‹ค.





โœ… Logical Replication ์‚ฌ์šฉ ์‚ฌ๋ก€

  • ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ํ†ตํ•ฉ
    (ex : ์—ฌ๋Ÿฌ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ค‘์•™ ์ง‘๊ณ„ ์‹œ์Šคํ…œ์— ์ „๋‹ฌํ•˜๋Š” ๊ฒฝ์šฐ)

  • ์„œ๋กœ ๋‹ค๋ฅธ Major ๋ฒ„์ „ ๊ฐ„์˜ Replication

  • ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„ ๋ฐ์ดํ„ฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜



๐Ÿ“ ์žฅ์ 

  • ํŠน์ • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋˜๋Š” ํ…Œ์ด๋ธ”๋งŒ ์„ ํƒ์ ์œผ๋กœ ๋ณต์ œํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์„œ๋กœ ๋‹ค๋ฅธ Major ๋ฒ„์ „, ์šด์˜ ์ฒด์ œ ๊ฐ„ ๋ณต์ œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๊ตฌ๋…์ž๊ฐ€ ๊ฒŒ์‹œ์ž๊ฐ€ ๋˜๋Š” ๋‹ค์ค‘ ํ˜•ํƒœ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ตฌ๋…์—๋Š” ๊ฒŒ์‹œ๋ณด๋‹ค ๋งŽ์€ Column ์ •์˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, Column์˜ ์ˆœ์„œ์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค.


๐Ÿ“ ๋‹จ์ 

  • Physical Replication๋ณด๋‹ค ๋” ๋งŽ์€ ์˜ค๋ฒ„ํ—ค๋“œ์™€ ๋ณ€ํ™˜ ์ž‘์—…์„ ํ•„์š”๋กœ ํ•˜๋ฏ€๋กœ, ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค.

  • ์–‘๋ฐฉํ–ฅ Replication์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.







๐Ÿ“Œ ๊ฒฐ๋ก 


์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” Replication์˜ ๊ฐœ๋…๊ณผ ๋ชฉ์ , ๊ทธ๋ฆฌ๊ณ  PostgreSQL์—์„œ ์ œ๊ณตํ•˜๋Š” ๋‹ค์–‘ํ•œ Replication ๋ฐฉ์‹์˜ ์ข…๋ฅ˜์™€ ๊ฐ๊ฐ์˜ ์žฅ๋‹จ์ ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜๋‹ค.



๊ทธ๋ฆฌ๊ณ , ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์œ ๋กœ OurHour ์„œ๋น„์Šค์˜ ๋ฉ”์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ธ PostgreSQL์„ Streaming Replication์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ๊ธฐ ์ „์šฉ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์“ฐ๊ธฐ ์ „์šฉ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ๋ถ„๋ฆฌํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค.

  • ์“ฐ๊ธฐ ์ „์šฉ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๊ฑฐ์˜ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ „ํŒŒ๋˜์–ด ๋™๊ธฐํ™” ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์ฝ๊ธฐ ์ „์šฉ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ํ•ญ์ƒ ์ตœ์‹  ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ฝ๊ธฐ ์ „์šฉ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์—ฌ๋Ÿฌ ๋Œ€ ๋‘์–ด ์ฝ๊ธฐ ์ž‘์—… ๋ถ€ํ•˜๋ฅผ ๋ถ„์‚ฐ ์‹œํ‚ฌ ์ˆ˜ ์žˆ์–ด ํ™•์žฅ์„ฑ์ด ์ข‹๋‹ค.

  • PostgreSQL์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ, ๊ตฌ์„ฑ ๋ฐ ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•˜๋‹ค.

  • ์ฃผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(์“ฐ๊ธฐ ์ „์šฉ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค) ์žฅ์•  ์‹œ, ๋ณต์ œ๋ณธ(์ฝ๊ธฐ ์ „์šฉ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค)๋กœ ์‰ฝ๊ฒŒ ์ „ํ™˜์ด ๊ฐ€๋Šฅํ•ด ์„œ๋น„์Šค์˜ ๊ฐ€์šฉ์„ฑ์„ ํ–ฅ์ƒ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.





์‚ฌ์‹ค, ์œ„์— ์„œ์ˆ ํ•œ ๋„ค๊ฐ€์ง€ ์žฅ์  ์ค‘ ์„ธ๊ฐ€์ง€๋Š” Steaming Replication ๋ฐฉ์‹์˜ ๊ณ ์œ ํ•œ ์žฅ์ ์ด๋ผ๊ธฐ ๋ณด๋‹ค๋Š” Physical Replication์˜ ์žฅ์ ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.


Logical Replication์€ ์ฃผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด๋‚˜, ํ†ตํ•ฉ์— ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ชฉ์ ๊ณผ ๋งž์ง€ ์•Š์•„ ์• ์ดˆ์— ๊ณ ๋ ค ๋Œ€์ƒ์—์„œ ๋ฐฐ์ œ๋˜์—ˆ๊ณ ,

๊ฒฐ๊ตญ, ๋™๊ธฐํ™” ์†๋„์™€ ์ฃผ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์™€ ๋ณต์ œ๋ณธ ๋ชจ๋‘์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์‹œ์Šคํ…œ ๋ถ€ํ•˜ ์‚ฌ์ด์— ๋ฌด์—‡์„ ์ทจํ•˜๊ณ , ๋ฌด์—‡์„ ํฌ๊ธฐํ•  ๊ฒƒ์ธ์ง€์— ๋”ฐ๋ผ File-based Log Shipping๊ณผ Streaming ๋ฐฉ์‹ ์ค‘ ์–ด๋–ค ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ธ์ง€ ๊ฒฐ์ •๋˜๋Š”๋ฐ, ์ด ๊ฐˆ๋ฆผ๊ธธ์—์„œ ๋‚˜๋Š” ๋™๊ธฐํ™” ์†๋„๋ฅผ ์ทจํ•˜๊ธฐ๋กœ ์„ ํƒํ–ˆ๋‹ค.





๐Ÿ™‹๐Ÿปโ€โ™€๏ธ ๊ทธ๋ž˜์„œ ๋‚˜๋Š” Streaming Replication ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค!





์ฐธ๊ณ  ๋งํฌ : https://blog.ex-em.com/1781

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