πŸ—‚ λ°μ΄ν„°λ² μ΄μŠ€

[ν† μŠ€ SLASH 21] MYSQL HA & DR Topology

미인주 2023. 5. 18. 09:54

βœ… λ°œν‘œ μ˜μƒ

https://www.youtube.com/watch?v=t96l6ry_qmw 

 

βœ”οΈ λ°œν‘œ λ‚΄μš©

MMM

HA μ˜€ν”ˆμ†ŒμŠ€ μ†”λ£¨μ…˜ 이름

ν† μŠ€μ˜ Live MySQL λ°μ΄ν„°λ² μ΄μŠ€ HA μ†”λ£¨μ…˜μœΌλ‘œ μ‚¬μš©λ˜κ³  있음

Googleμ—μ„œ 개발된 μ†”λ£¨μ…˜

버전 μ—…λ°μ΄νŠΈλŠ” μ€‘μ§€λ˜μ–΄μ„œ, ν•„μš” μ‹œ 자체 μ—…λ°μ΄νŠΈλ₯Ό ν•˜λ©΄μ„œ μ‚¬μš© 쀑

 

 

κΈ°λ³Έ ꡬ성도

MASTER-MASTER 01, 02λ…Έλ“œλ§Œ MMM이 κ΄€λ¦¬ν•˜λ„λ‘ ꡬ성

03번 SLAVE도 MMM이 κ΄€λ¦¬ν•˜λ„λ‘ ν¬ν•¨μ‹œν‚¬ 수 μžˆμ§€λ§Œ, μ‹ κ·œ MASTER둜 failover ν•˜λŠ” κ³Όμ •μ—μ„œ λŒ€μ‘λ˜μ§€ μ•ŠλŠ” μΌ€μ΄μŠ€κ°€ μžˆμ–΄μ„œ

이 ꡬ성은 μ‚¬μš©ν•˜μ§€ μ•ŠμŒ

 

 

1. 데λͺ¬ 2개 : Monitoring, Agent 

 

 

2. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„ failoverλ₯Ό μœ„ν•΄ 각 λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ— μ˜¬λΌκ°€λŠ” μ„œλΉ„μŠ€ IP

 

  • Monitoring 데λͺ¬
    • λ³„λ„μ˜ ν˜ΈμŠ€νŠΈμ—μ„œ λͺ¨λ“  λͺ¨λ‹ˆν„°λ§ 및 μ˜μ‚¬ κ²°μ •κ³Ό λͺ…λ Ή μˆ˜ν–‰

 

  • Agent 데λͺ¬
    • 각 λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ 싀행됨
    • Monitoring 데λͺ¬μ—μ„œ λ‚΄λ €μ˜¨ λͺ…λ Ή μˆ˜ν–‰ 

 

 

Service IP

MMM이 λ°μ΄ν„°λ² μ΄μŠ€ Role 변경에 따라 μ΄λ™μ‹œμΌœ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„μ˜ failoverκ°€ μ΄λ£¨μ–΄μ§€κ²Œ 함

 

 

mondκ°€ ν•˜λŠ” μ£Όμš” λͺ¨λ‹ˆν„°λ§ ν•­λͺ©

  • ping - 호슀트 μžμ²΄κ°€ μ‚΄μ•„μžˆλŠ”μ§€
  • mysql - MySQL μΈμŠ€ν„΄μŠ€κ°€ μ‚΄μ•„μžˆλŠ”μ§€
  • rep_threads - 볡제 μŠ€λ ˆλ“œκ°€ 정상 μž‘λ™ 쀑인지
  • rep_backlog - 볡제 μŠ€λ ˆλ“œμ˜ 지연이 정해진 thresholdλ₯Ό λ„˜μ–΄μ„°λŠ”μ§€ 확인

이 λͺ¨λ‹ˆν„°λ§ ν•­λͺ©μ—μ„œ 이상이 μžˆμ„ μ‹œ, MMM이 standby MASTER둜 failover 진행

 

 

 

DR 처음 κ΅¬μ„±ν–ˆμ„ λ•Œ λͺ¨μŠ΅

active : DATA-CENTER1

standby  : DATA-CENTER2

단방ν–₯ 볡제 ꡬ성 : DATA-CENTER κ°„, standby DATA-CENTER λ‚΄μ˜ local MASTER κ°„

-> IDC failover μ‹œ Role μ „ν™˜ μž‘μ—… ν•„μš”..

 

 

BEFORE

μ‹ κ·œ active DATA-CENTER의 MySQL μ„œλ²„λ₯Ό MASTER-MASTER κ΅¬μ„±μœΌλ‘œ μ „ν™˜ν•΄μ•Ό 함

DATA-CENTER κ°„ MySQL μ„œλ²„μ˜ MASTER-SLAVE 관계도 μ „ν™˜ν•΄μ£Όμ–΄μ•Ό 함

μ‹ κ·œ standby DATA-CENTER의 MySQL μ„œλ²„λŠ” MASTER-SLAVE 단방ν–₯으둜 μ „ν™˜ν•΄μ•Ό 함

-> μ–΄λ €μš΄ μž‘μ—…μ€ μ•„λ‹ˆμ§€λ§Œ 번거둭고 λΆ€λ‹΄μŠ€λŸ¬μš΄ μž‘μ—…λ“€ -> κ°œμ„  ν•„μš”!

 

 

μ „ν™˜ν•˜κ²Œ 된 λ°°κ²½

DRμ„Όν„°μ˜ λ³Έ λͺ©μ 

μž¬λ‚œ μ‹œ λΉ„μ¦ˆλ‹ˆμŠ€ 연속성 보μž₯μ΄λ―€λ‘œ

데이터 μ„Όν„° failoverλ₯Ό ν•  κ²½μš°κ°€ 거의 λ°œμƒν•˜μ§€ μ•Šμ„ 거라고 μƒκ°ν–ˆμ§€λ§Œ

ν† μŠ€μ˜ κ°„νŽΈκ²°μ œ νŒŒνŠΈλ„ˆμ‚¬ 증가 -> 무쀑단 운영의 ν•„μš”μ„± 증가

 

이런 μƒν™©μ—μ„œ λŒ€κ·œλͺ¨ λ„€νŠΈμ›Œν¬ μž‘μ—…..

-> 무쀑단 데이터 μ„Όν„° 둀링 μž‘μ—…μœΌλ‘œ κ³„νšμ΄ 됨

-> λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„λ„ 데이터 μ„Όν„° failoverκ°€ ν•„μš”ν•΄μ§

-> μ§„ν–‰ν•˜λ‹€ λ³΄λ‹ˆ λ°μ΄ν„°λ² μ΄μŠ€ Role μ „ν™˜ μž‘μ—…μ— λŒ€ν•œ λΆ€λ‹΄ 증가 + μ‹€μˆ˜λ‘œ λ³΅μ œκ°€ κΉ¨μ§€λŠ” κ²½μš°λ„ λ°œμƒ + λ‹€μš΄νƒ€μž„ ν•„μš” + μœ„ν—˜λΆ€λ‹΄ 큰 μž‘μ—…λ„ λ°œμƒ

-> 데이터 μ„Όν„° μ „ν™˜ 과정을 μ΅œλŒ€ν•œ κ°„μ†Œν™”μ‹œν‚¬ ν•„μš”κ°€ 생김

 

 

 

WISH

1. μ–‘μͺ½ 데이터센터 -> λŒ€μΉ­ ꡬ쑰

2. 데이터센터 failover μ‹œ, μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„ 컀λ„₯μ…˜λ§Œ μ΄λ™ν•˜κ³ 

3. λ°μ΄ν„°λ² μ΄μŠ€ λ ˆλ²¨μ—μ„œλŠ” λ”°λ‘œ μž‘μ—…ν•  것이 μ—†λŠ” ꡬ쑰

 

MASTER-MASTER μ–‘λ°©ν–₯으둜 λ°”λ€” λΆ€λΆ„

1. 기쑴에 단방ν–₯으둜 있던 DR 볡제 채널

2. DR μ„Όν„° 내에 MASTER-SLAVE 볡재 채널

 

but,, 두 가지 이슈 λ°œμƒ

 

1. binlog 쀑볡 전솑 이슈

01, 02번 -> log_slave_update μ˜΅μ…˜μ„ 켜고 운영

sql_threadκ°€ μ μš©ν•œ νŠΈλžœμž­μ…˜λ„ binlog에 κΈ°λ‘ν•˜λŠ” μ˜΅μ…˜

 

 

 

1. actvie 데이터센터 01λ²ˆμ—μ„œ λ°œμƒν•œ νŠΈλžœμž­μ…˜μ˜ binlog 생성

2. DR 채널을 따라 standby 데이터센터 01번으둜 전솑 및 적용됨

3. 적용 이후, standby 데이터센터 01번 μ„œλ²„ -> 이 νŠΈλžœμž­μ…˜μ— λŒ€ν•œ binlog 생성

 

 

4. μ΄λ•Œ 01번의 slave둜 μžˆλŠ” 02, 03번 -> 이 binlogλ₯Ό λ³΅μ œν•˜κ³  μ μš©ν•˜κ²Œ 됨

단방ν–₯ ꡬ성 μ‹œ binlog 볡제 흐름과 동일함

 

 

5. 그런데 02λ²ˆμ—μ„œ μ΅œμ’… μ μš©ν•œ binlogκ°€ 자체 binlog둜 생성이 되고,

6. 01λ²ˆμ€ 02번의 masterλ©΄μ„œ slave이기 λ•Œλ¬Έμ—, 이 binlogλ₯Ό λ³΅μ œν•΄μ•Ό ν•˜λŠ”μ§€ νŒλ‹¨ν•¨

이 νŒλ‹¨ -> ν•΄λ‹Ή binlogκ°€ 처음 μƒμ„±λœ μ„œλ²„μ˜ server-id와 μžμ‹ μ˜ server-idκ°€ λ‹€λ₯Έμ§€ λΉ„κ΅ν•΄μ„œ 이루어짐

λ‹€λ₯Ό 경우 볡제 진행

 

이 binlogλŠ” 데이터센터1μ—μ„œ 처음 μƒμ„±λ˜μ—ˆκΈ° λ•Œλ¬Έμ— server-id 101을 계속 μœ μ§€ν•˜κ³  μžˆλŠ” 상황

server-id 1001인 01번으둜 λ‹€μ‹œ λ³΅μ œκ°€ λ˜μ–΄λ²„λ¦Ό

 

 

 

μ—¬κΈ°μ„œ 적용이 되면 λ‹€μ‹œ 또 03, 02번으둜 볡제 λ˜λŠ” 상황이 생길 수 있음..

 

μ‹€μ œ κ°’ 변경이 μ—†μ—ˆλ‹€λ©΄ binlogκ°€ μƒμ„±λ˜μ§€ μ•ŠλŠ”λ°,

동일 binlogκ°€ 적용된 지 1μ΄ˆλ„ μ§€λ‚˜μ§€ μ•Šμ€ 상황이기 λ•Œλ¬Έμ—

4번의 μƒν™©κΉŒμ§€ λ‚˜μ˜¬ ν™•λ₯ μ€ μ μ§€λ§Œ

μ΄λ‘ μ μœΌλ‘œλŠ” λ¬΄ν•œ 루프가 κ°€λŠ₯해져버림

 

 

2. MMM이 볡제 채널을 κ΅¬λΆ„ν•˜μ§€ λͺ»ν•˜λŠ” 이슈

각 λ°μ΄ν„°μ„Όν„°μ˜ 01번 μ„œλ²„λŠ” DR μ–‘λ°©ν–₯ 볡제 채널이 μΆ”κ°€λ¨μœΌλ‘œ μΈν•΄μ„œ 

DR 볡제 채널과 local master-master 볡제 채널이 λ™μ‹œμ— μƒμ„±λœ λ©€ν‹°μ†ŒμŠ€λ³΅μ œ μƒνƒœκ°€ 됨

 

이 경우 MMM은 μžμ‹ μ΄ λͺ¨λ‹ˆν„°λ§ ν•΄μ•Ό ν•  채널이 μ–΄λ–€ 채널인지 μ•Œμ§€ λͺ»ν•˜κ²Œ 됨

 

 

 

1. binlog λ¬΄ν•œ 루프

방법 1) Gtid둜 쀑볡 적용 막기

but,, λ‹Ήμ‹œ λ°”λ‘œ Gtid μ „ν™˜μ€ μ–΄λ €μš΄ 상황

Gtid둜 가더라도 binlog의 전솑 루프 (No I0 Thread skip)은 λ°œμƒν•˜κ²Œ 되고

λ‹€μ‹œ binlog position λ°©μ‹μœΌλ‘œ μ „ν™˜ μ‹œ μ΄μŠˆκ°€ 되기 λ•Œλ¬Έμ—.. 쀑볡 전솑 자체λ₯Ό 막을 방법이 ν•„μš”

 

방법 2) binlog filter κ±ΈκΈ°

 

 

2. μ–΄λ–€ 채널?

MMM이 MM 채널에 λŒ€ν•΄μ„œλ§Œ λͺ¨λ‹ˆν„°λ§μ„ ν•˜λ„λ‘ μ†ŒμŠ€λ₯Ό μˆ˜μ •

 

 

ν˜„μž¬ DR ꡬ성 λͺ¨μŠ΅