Replication Architecture
MySQL μλ²μμ λ°μνλ λͺ¨λ λ³κ²½ μ¬νμ λ°μ΄λ리 λ‘κ·Έ(Binary Log)μ μμλλ‘ κΈ°λ‘λλ€.
λ°μ΄λ리 λ‘κ·Έμλ λ°μ΄ν°μ λ³κ²½ λ΄μλΏλ§ μλλΌ DBλ ν μ΄λΈ ꡬ쑰 λ³κ²½κ³Ό κ³μ , κΆνμ λ³κ²½ μ 보κΉμ§ λͺ¨λ μ μ₯λλ€.
볡μ λ μ΄ λ‘κ·Έλ₯Ό κΈ°λ°μΌλ‘ ꡬνλλλ°, μμ€ μλ²μμ μμ±λ λ°μ΄λ리 λ‘κ·Έκ° λ ν리카 μλ²λ‘ μ μ‘λκ³ λ ν리카 μλ²μμλ ν΄λΉ λ΄μ©μ λ‘컬 λμ€ν¬μ μ μ₯ν λ€ μμ μ΄ κ°μ§ DBμ λ°μνμ¬ μμ€ μλ²μ λ ν리카 μλ² κ° λ°μ΄ν° λκΈ°νκ° μ΄λ€μ§λ€.
λ ν리카 μλ²μμ μμ€ μλ²μ λ°μ΄λ리 λ‘κ·Έλ₯Ό μ½μ΄μ λ‘컬 λμ€ν¬μ μ μ₯ν νμΌμ 릴λ μ΄ λ‘κ·Έ(Relay Log)λΌκ³ νλ€.

MySQL 볡μ λ 3κ°μ μ€λ λμ μν΄ λμνλλ°, μ΄ μ€ νλλ μμ€ μλ²μ, λλ¨Έμ§ λ κ°λ λ ν리카μ μ‘΄μ¬νλ€.
Binary Log Dump Thread:
λ ν리카 μλ²λ λ°μ΄ν° λκΈ°νλ₯Ό μν΄ μμ€ μλ²μ μ μν΄μ λ°μ΄λ리 λ‘κ·Έ μ 보λ₯Ό μμ²νλ€.
μμ€ μλ²μμ λ ν리카 μλ²κ° μ°κ²°λ λ λ΄λΆμ μΌλ‘ λ°μ΄λ리 λ‘κ·Έ λ€ν μ€λ λλ₯Ό μμ±ν΄μ λ°μ΄λ리 λ‘κ·Έμ λ΄μ©μ λ ν리카 μλ²λ‘ μ μ‘νλ€.
λ°μ΄λ리 λ‘κ·Έ λ€ν μ€λ λλλ ν리카 μλ²μ λ³΄λΌ μ΄λ²€νΈλ₯Ό μ½μ λμΌμμ μΌλ‘λ°μ΄λ리 λ‘κ·Έμ μ κΈμ μννλ©°, μ½κ³ λ ν λ°λ‘ μ κΈμ ν΄μ νλ€. (μμ€ μλ²μμ SHOW PROCESSLIST λͺ λ ΉμΌλ‘ νμΈ)
Replication I/O Thread:
볡μ κ° μμ(start slave)λλ©΄ λ ν리카 μλ²λ I/O μ€λ λλ₯Ό μμ±νκ³ λ³΅μ κ° λ©μΆλ©΄(stop slave) I/O μ€λ λλ μ’ λ£λλ€. I/O μ€λ λλ μμ€ μλ²μ λ°μ΄λ리 λ‘κ·Έ λ€ν μ€λ λλ‘λΆν° λ°μ΄λ리 λ‘κ·Έ μ΄λ²€νΈλ₯Ό κ°μ Έμ
릴λ μ΄ λ‘κ·Έ(λ‘컬 μλ² νμΌ)λ‘ μ μ₯νλ μν μ λ΄λΉνλ€.μμ€ μλ²μ λ°μ΄λ리 λ‘κ·Έλ₯Ό μ½μ΄ νμΌλ‘
μ°λ μν λ§νκΈ° λλ¬ΈμβI/Oβμ€λ λλΌκ³ λͺ λͺ λ κ²μ΄λ€.
Replication SQL Thread:
SQL μ€λ λλ I/O μ€λ λμ μν΄ μμ±λ Relay Log νμΌμ μ΄λ²€νΈλ₯Ό μ½κ³ μ€ννλ€.
μ½κ² μκΈ°νλ©΄, λ ν리카 μλ²μμλ μ μ‘λ°μ λ‘κ·Έλ₯Ό Relay Logμ κΈ°λ‘νκ³ SQL μ€λ λκ° μ΄λ₯Ό μ½μ΄μ μ μ©νλ€. μ΄ κ³Όμ μμ 릴λ μ΄ λ‘κ·Έμ λν μ κΈμ΄ λ°μνλ€. (릴λ μ΄ λ‘κ·Έμ μ μ₯λ νΈλμμ μ΄λ²€νΈλ€μ λ ν리카 μλ²μ μ μ©)
λ ν리카 μλ²μμ Replicaiton I/O μ€λ λμ SQL μ€λ λλ λ
립μ μΌλ‘ λμνλ€. κ·Έλ¬λ―λ‘ SQL μ€λ λμμ μ΄λ²€νΈλ₯Ό μ μ©νλ κ² λλ €λ I/O μ€λ λλ μ μμ μΌλ‘ λΉ λ₯΄κ² μμ€ μλ²λ‘λΆν° μ΄λ²€νΈλ₯Ό μ½μ΄μ¬ μ μλ€.
λν λ ν리카 μλ²μμ μμ€ μλ²μ λ³κ²½ μ¬νλ€μ΄ μ μ©λλ κ²μ μμ€ μλ²μ λ 립μ μΌλ‘ λμκ°κΈ° λλ¬Έμ λ ν리카 μλ²μ λ¬Έμ κ° μ겨λ μμ€ μλ²μλ μν₯μ λ°μ§ μλλ€.
νμ§λ§ μμ€ μλ²μ λ¬Έμ κ° μ겨μ λ ν리카 μλ²μ I/O μ€λ λκ° μ μ λμ νμ§ μμΌλ©΄, 볡μ λ μλ¬λ₯Ό λ°μμν€κ³ μ€λ¨λλ€. μ΄λ λ ν리카 μλ²μ 볡μ κΈ°λ₯λ§ μ€λ¨λ κ²μ΄κΈ° λλ¬Έμ λ ν리카 μλ²μμ 쿼리λ₯Ό μ²λ¦¬νλ λ° μλ¬΄λ° λ¬Έμ κ° μλ€. λ€λ§ λ°μ΄ν° λκΈ°νκ° λμ§ μμ λΏμ΄λ€.
볡μ κ° μμλλ©΄ λ€μκ³Ό κ°μ΄ μ΄ 3κ°μ§ μ νμ 볡μ κ΄λ ¨ λ°μ΄ν°λ₯Ό μμ±νλ€.
Relay Log:
릴λ μ΄ λ‘κ·Έλ Replication I/O Threadμ μν΄ μμ±λλ νμΌλ‘, μμ€ μλ²μ λ°μ΄λ리 λ‘κ·Έμμ μ½μ΄μ¨ μ΄λ²€νΈ(νΈλμμ ) μ λ³΄κ° μ μ₯λλ€.
λ°μ΄λ리 λ‘κ·Έμ λ§μ°¬κ°μ§λ‘ νμ¬ μ‘΄μ¬νλ
Relay Log νμΌλ€μ λͺ©λ‘μ΄ λ΄κΈ΄ Index νμΌκ³Όμ€μ μ΄λ²€νΈ μ λ³΄κ° μ μ₯λΌ μλ λ‘κ·Έ νμΌλ€λ‘ꡬμ±λλ€.
Connection Metadata:
Replication I/O Threadμμ μμ€ μλ²μ μ°κ²°ν λ μ¬μ©νλ DB κ³μ μ 보 λ° νμ¬ μ½κ³ μλ μμ€ μλ²μ λ°μ΄λ리 νμΌλͺ κ³Ό νμΌ λ΄ μμΉ κ° λ±μ΄ λ΄κ²¨ μμΌλ©° μ΄λ¬ν μ 보λ κΈ°λ³Έμ μΌλ‘ mysql.master_info ν μ΄λΈμ μ μ₯λλ€.
Applier Metadata:
Relay Logμ μ μ₯λ μμ€ μλ²μ μ΄λ²€νΈλ€μ λ ν리카 μλ²μ μ μ©νλ μ»΄ν¬λνΈλ₯Ό
μ΄νλΌμ΄μ΄(Applier)λΌκ³ νλ€.μ΄νλΌμ΄μ΄ λ©νλ°μ΄ν°λ μ΅κ·Ό μ μ©λ μ΄λ²€νΈμ λν΄ ν΄λΉ μ΄λ²€νΈκ° μ μ₯λΌ μλ 릴λ μ΄ λ‘κ·Έ νμΌλͺ κ³Ό νμΌ λ΄ μμΉ μ 보 λ±μ λ΄κ³ μμΌλ©°, Replication I/O Threadλ μ΄ μ 보λ€μ κ°μ§κ³ λ ν리카 μλ²μ λλ¨Έμ§ μ΄λ²€νΈλ€μ μ μ©νλ€. mysql.slave_relay_log_info ν μ΄λΈμ μ μ₯λλ€.
컀λ₯μ λ° μ΄νλΌμ΄μ΄ λ©νλ°μ΄ν°λ FILE νΉμ TABLE ννλ‘ λ°μ΄ν°λ₯Ό κ΄λ¦¬ν μ μλ€.
MySQL 8.0.2 λ²μ λΆν° λν΄νΈκ° TABLEλ‘ λ³κ²½λγ γ μΌλ©°, FILEμ μ κ±° λ μμ μ΄λ€.
FILEμ΄ κΈ°λ³Έκ° μ΄μλ λλ Replication I/O Threadμ SQL Threadκ° λμν λ λ νμΌμ λ΄μ©μ΄ λκΈ°νλμ§ μλ κ²½μ°κ° λΉλ²νκ² λ°μνλ€.
ex) λ ν리카 μλ²κ° λΉμ μ μ’ λ£λλ κ²½μ° μ€μ μ μ©λ λ°μ΄λ리 λ‘κ·Έ μμΉμ νμΌμ μ μ₯λ μμΉκ° μΌμΉνμ§ μκ±°λ νμΌ μμ²΄κ° μμλμ΄ λ³΅μ κ° μ¬μμλμ§ λͺ»νλ κ²½μ° λ°μ
TABLEλ‘ μ€μ νλ©΄ λ μ 보 λͺ¨λ InnoDB μ€ν λ¦¬μ§ μμ§ κΈ°λ°μ ν μ΄λΈλ‘ κ΄λ¦¬λκ³ , νΉν Replication SQL Theadκ° νΈλμμ μ νμ©ν λ, slave_relay_log ν μ΄λΈμ λ°μ΄ν°λ κ°μ μμ μ μν λ―Ή(Atomic)νκ² μ λ°μ΄νΈλλ―λ‘ μμνμ§ λͺ»νκ² MySQLμ΄ κ°μκΈ° μ’ λ£λμ΄λ λ€μ ꡬλνμ λ λ¬Έμ μμ΄ λ³΅μ κ° μ§νλ μ μλ€.
μ΄λ₯Ό ν¬λμ μΈμ΄ν 볡μ (Crash-Safe Replication)μ΄λΌκ³ νλ€.
Last updated