Replication Type (볡제 νƒ€μž…)

MySQL의 λ³΅μ œλŠ” 2κ°€μ§€ νƒ€μž…μœΌλ‘œ λ‚˜λ‰˜κ³ , 각 λ°©μ‹μ˜ λ™μž‘ 원리와 ꡬ좕 방법을 μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

  1. λ°”μ΄λ„ˆλ¦¬ 둜그 파일 μœ„μΉ˜ 기반 볡제(Binary Log File Position Based Replication)

  • Source Server의 Binaray Log에 기둝된 λ³€κ²½ λ‚΄μ—­(λ°”μ΄λ„ˆλ¦¬ 둜그 이벀트)듀을 μ‹λ³„ν•˜λŠ” 방식

  1. κΈ€λ‘œλ²Œ νŠΈλžœμž­μ…˜ ID 기반 볡제(Global Transaction Identifiers Based Replication)

  • 각 νŠΈλžœμž­μ…˜μ— κ³ μœ ν•œ μ‹λ³„μž(ID)λ₯Ό λΆ€μ—¬ν•˜μ—¬ μΆ”μ ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.

Binary Log File Position Based

이 방식은 볡제 κΈ°λŠ₯이 처음 λ„μž…λμ„ λ•ŒλΆ€ν„° 제곡된 λ°©μ‹μœΌλ‘œ, λ ˆν”Œλ¦¬μΉ΄ μ„œλ²„μ—μ„œ μ†ŒμŠ€ μ„œλ²„μ˜ λ°”μ΄λ„ˆλ¦¬ 둜그 파일λͺ…κ³Ό 파일 λ‚΄μ—μ„œμ˜ μœ„μΉ˜(Offest or Postion)둜 λ°”μ΄λ„ˆλ¦¬ 둜그 이벀트λ₯Ό μ‹λ³„ν•΄μ„œ λ³΅μ œκ°€ μ§„ν–‰λ˜λŠ” ν˜•νƒœμž…λ‹ˆλ‹€.

볡제λ₯Ό 처음 ꡬ좕할 λ•Œ λ ˆν”Œλ¦¬μΉ΄ μ„œλ²„μ— μ†ŒμŠ€ μ„œλ²„μ˜ μ–΄λ–€ μ΄λ²€νŠΈλΆ€ν„° 동기화λ₯Ό μˆ˜ν–‰ν•  것인가에 λŒ€ν•œ 정보λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€.

  • λ³΅μ œκ°€ μ„€μ •λœ λ ˆν”Œλ¦¬μΉ΄ μ„œλ²„λŠ” μ†ŒμŠ€ μ„œλ²„μ˜ μ–΄λŠ μ΄λ²€νŠΈκΉŒμ§€ 둜컬 λ””μŠ€ν¬λ‘œ κ°€μ Έμ™”κ³ , μ μš©ν–ˆλŠ”μ§€μ— λŒ€ν•œ 정보λ₯Ό 관리

  • μœ„ 정보λ₯Ό μ†ŒμŠ€ μ„œλ²„μ— μ „λ‹¬ν•΄μ„œ μ΄ν›„μ˜ λ°”μ΄λ„ˆλ¦¬ 둜그 μ΄λ²€νŠΈλ“€μ„ κ°€μ Έμ˜΅λ‹ˆλ‹€.

μ΄λŸ¬ν•œ 이유둜 μ†ŒμŠ€ μ„œλ²„μ—μ„œ λ°œμƒν•œ 각 μ΄λ²€νŠΈμ— λŒ€ν•œ 식별이 λ°˜λ“œμ‹œ ν•„μš”ν•©λ‹ˆλ‹€.

1. 핡심 λ™μž‘ 원리: 파일 이름과 μœ„μΉ˜(Offset)

μ†ŒμŠ€ μ„œλ²„μ˜ λ°”μ΄λ„ˆλ¦¬ λ‘œκ·Έμ— 기둝된 λ³€κ²½ 내역듀은 물리적인 파일 μœ„μΉ˜λ‘œ μ‹λ³„ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.

λ ˆν”Œλ¦¬μΉ΄ μ„œλ²„λŠ” μ†ŒμŠ€ μ„œλ²„μ—κ²Œ "μ†ŒμŠ€ μ„œλ²„μ•Ό, mysql-bin.0001 파일의 4820번 μœ„μΉ˜λΆ€ν„° λ³€κ²½λœ λ‚΄μš©μ„ λ³΄μ—¬μ€˜." 라고 μš”μ²­ν•˜λ©° 동기화λ₯Ό μ§„ν–‰ν•©λ‹ˆλ‹€.

λ ˆν”Œλ¦¬μΉ΄ μ„œλ²„λŠ” 이처럼 각 μ΄λ²€νŠΈλ“€μ„ μ‹λ³„ν•˜κ³  μžμ‹ μ˜ 적용 내역을 μΆ”μ ν•¨μœΌλ‘œμ¨ 볡제λ₯Ό μΌμ‹œμ μœΌλ‘œ 쀑단할 수 있으며, μž¬κ°œν•  λ•Œλ„ μžμ‹ μ΄ λ§ˆμ§€λ§‰μœΌλ‘œ μ μš©ν–ˆλ˜ 이벀트 μ΄ν›„μ˜ μ΄λ²€νŠΈλ“€λΆ€ν„° λ‹€μ‹œ μ½μ–΄μ˜¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

즉, 볡제 κ³Όμ •μ—μ„œ κ°€μž₯ μ€‘μš”ν•œ μ •λ³΄λŠ” 둜그 파일λͺ…(File Name)κ³Ό 파일 λ‚΄ μœ„μΉ˜(File Offset)의 μ‘°ν•©μž…λ‹ˆλ‹€.

2. 볡제 ν”„λ‘œμ„ΈμŠ€

  1. 동기화 지점 μ„€μ •:

  • 볡제λ₯Ό 처음 ꡬ좕할 λ•Œ, λ ˆν”Œλ¦¬μΉ΄ μ„œλ²„λŠ” μ†ŒμŠ€ μ„œλ²„μ˜ "μ–΄λŠ 파일, μ–΄λŠ μœ„μΉ˜"λΆ€ν„° 데이터λ₯Ό κ°€μ Έμ˜¬μ§€ μ„€μ •ν•©λ‹ˆλ‹€.

  1. 이벀트 μˆ˜μ‹  및 기둝:

  • λ ˆν”Œλ¦¬μΉ΄ μ„œλ²„λŠ” μ†ŒμŠ€ μ„œλ²„λ‘œλΆ€ν„° 이벀트λ₯Ό 받아와 둜컬 λ””μŠ€ν¬(릴레이 둜그)에 μ €μž₯ν•˜κ³  이λ₯Ό μ μš©ν•©λ‹ˆλ‹€.

  1. μœ„μΉ˜ 관리:

  • λ ˆν”Œλ¦¬μΉ΄ μ„œλ²„λŠ” μžμ‹ μ΄ μ†ŒμŠ€ μ„œλ²„μ˜ 이벀트λ₯Ό μ–΄λ””κΉŒμ§€ κ°€μ Έμ™”κ³ , μ–΄λ””κΉŒμ§€ μ μš©ν–ˆλŠ”μ§€λ₯Ό μ§€μ†μ μœΌλ‘œ κ΄€λ¦¬ν•©λ‹ˆλ‹€.

μ΄λŸ¬ν•œ 볡제 ν”„λ‘œμ„ΈμŠ€ 덕뢄에 볡제λ₯Ό μΌμ‹œμ μœΌλ‘œ μ€‘λ‹¨ν–ˆλ‹€κ°€ μž¬κ°œν•˜λ”λΌλ„, λ ˆν”Œλ¦¬μΉ΄ μ„œλ²„λŠ” κΈ°μ–΅ν•΄ λ‘” λ§ˆμ§€λ§‰ μœ„μΉ˜(Offset) μ΄ν›„μ˜ μ΄λ²€νŠΈλΆ€ν„° λ‹€μ‹œ μš”μ²­ν•˜μ—¬ λˆ„λ½ 없이 데이터λ₯Ό 동기화할 수 μžˆμŠ΅λ‹ˆλ‹€.

3. ν•„μˆ˜ 주의 사항: κ³ μœ ν•œ server_id

λ°”μ΄λ„ˆλ¦¬ 둜그 기반 λ³΅μ œμ—μ„œ κ°€μž₯ μ€‘μš”ν•œ 섀정은 server_idμž…λ‹ˆλ‹€.

볡제 ν† ν΄λ‘œμ§€μ— μ°Έμ—¬ν•˜λŠ” λͺ¨λ“  MySQL μ„œλ²„λŠ” λ°˜λ“œμ‹œ μ„œλ‘œ λ‹€λ₯Έ κ³ μœ ν•œ server_idλ₯Ό κ°€μ Έμ•Ό ν•©λ‹ˆλ‹€.

  • κΈ°λ³Έκ°’: 1 (μ„€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ 좩돌 λ°œμƒ)

  • λ ˆν”Œλ¦¬μΉ΄ μ„œλ²„μ— μ„€μ •λœ κ°’κ³Ό λ™μΌν•œ 경우 λ ˆν”Œλ¦¬μΉ΄ μ„œλ²„μ—μ„œλŠ” ν•΄λ‹Ή 이벀트λ₯Ό μ μš©ν•˜μ§€ μ•Šκ³  λ¬΄μ‹œν•˜κ²Œ λ©λ‹ˆλ‹€.

GTID Based Replication

MySQL 5.6 버전뢀터 λ„μž…λœ GTID(Global Transaction Identifier) 방식은 물리적인 파일 μœ„μΉ˜κ°€ μ•„λ‹Œ, 논리적인 νŠΈλžœμž­μ…˜ IDλ₯Ό 기반으둜 볡제λ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€.

1. GTIDλž€?

GTIDλŠ” μ†ŒμŠ€ μ„œλ²„μ—μ„œ μ»€λ°‹λœ 각 νŠΈλžœμž­μ…˜μ— λΆ€μ—¬λœ μ „μ—­μ μœΌλ‘œ κ³ μœ ν•œ μ‹λ³„μžμž…λ‹ˆλ‹€.

GTID=source_uuid:transaction_idGTID = source\_uuid : transaction\_id
  • source_uuid: νŠΈλžœμž­μ…˜μ΄ 졜초둜 λ°œμƒν•œ μ„œλ²„μ˜ 고유 μ‹λ³„μž

  • transaction_id: ν•΄λ‹Ή μ„œλ²„μ—μ„œ νŠΈλžœμž­μ…˜μ΄ λ°œμƒν•œ μˆœμ„œ(일련번호)

예λ₯Ό λ“€μ–΄ 3E11FA47...:23μ΄λΌλŠ” GTIDλŠ” νŠΉμ • μ„œλ²„μ—μ„œ 23번째둜 λ°œμƒν•œ νŠΈλžœμž­μ…˜μž„μ„ μ˜λ―Έν•©λ‹ˆλ‹€. 이 IDλŠ” 전체 볡제 κ·Έλ£Ή λ‚΄μ—μ„œ μœ μΌν•©λ‹ˆλ‹€.

2. 핡심 λ™μž‘ 원리: μžλ™ 포지셔닝 (Auto-Positioning)

파일 μœ„μΉ˜ 기반 λ³΅μ œκ°€ "μ’Œν‘œ(파일λͺ…+μœ„μΉ˜)"λ₯Ό 일일이 λ§žμ·„λ‹€λ©΄, GTID λ³΅μ œλŠ” μ§‘ν•©(Set) κ°œλ…μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.

  1. λ ˆν”Œλ¦¬μΉ΄ μ„œλ²„λŠ” μ†ŒμŠ€ μ„œλ²„μ— μ—°κ²°ν•  λ•Œ, "λ‚˜λŠ” μ§€κΈˆκΉŒμ§€ μ΄λŸ¬ν•œ GTID 집합을 μ²˜λ¦¬ν–ˆμ–΄"라고 μžμ‹ μ˜ μƒνƒœλ₯Ό λ³΄λƒ…λ‹ˆλ‹€.

  2. μ†ŒμŠ€ μ„œλ²„λŠ” μžμ‹ μ΄ κ°€μ§„ νŠΈλžœμž­μ…˜ 쀑 λ ˆν”Œλ¦¬μΉ΄μ— μ—†λŠ” νŠΈλžœμž­μ…˜λ§Œ μžλ™μœΌλ‘œ μ„ λ³„ν•˜μ—¬ λ³΄λ‚΄μ€λ‹ˆλ‹€.

κ΄€λ¦¬μžκ°€ 둜그 파일λͺ…μ΄λ‚˜ μœ„μΉ˜λ₯Ό 직접 κ³„μ‚°ν•˜κ±°λ‚˜ μž…λ ₯ν•  ν•„μš”κ°€ μ—†μœΌλ―€λ‘œ 운영이 훨씬 νŽΈλ¦¬ν•΄μ§‘λ‹ˆλ‹€.

3. μž₯점

  • κ°„νŽΈν•œ μž₯μ•  쑰치(Failover):

    • μ†ŒμŠ€ μ„œλ²„κ°€ λ‹€μš΄λ˜μ–΄ μƒˆλ‘œμš΄ μ†ŒμŠ€ μ„œλ²„λ₯Ό μ„ μΆœν•΄μ•Ό ν•  λ•Œ, GTID 방식은 μ„œλ²„ κ°„ 동기화 지점을 μžλ™μœΌλ‘œ κ³„μ‚°ν•΄μ£Όλ―€λ‘œ 볡ꡬ μ ˆμ°¨κ°€ 맀우 κ°„λ‹¨ν•©λ‹ˆλ‹€. (파일 기반 λ³΅μ œλŠ” 이 과정이 λ³΅μž‘ν•˜κ³  μˆ˜λ™ 계산이 ν•„μš”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.)

  • 데이터 일관성:

    • νŠΈλžœμž­μ…˜ λ‹¨μœ„λ‘œ μ‹λ³„ν•˜λ―€λ‘œ 데이터 λˆ„λ½μ΄λ‚˜ 쀑볡 μ μš©μ„ 더 ν™•μ‹€ν•˜κ²Œ λ°©μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Last updated