[Network] Load Balancing (λ‘œλ“œ λ°ΈλŸ°μ‹±)의 κ°œλ…κ³Ό 이해

λ°˜μ‘ν˜•

처음 μ„œλ²„λ₯Ό κ°œλ°œν•˜κ³ , 이λ₯Ό μš΄μ˜ν•˜λŠ” λ°κΉŒμ§€ λ§Žμ€ ν•™μŠ΅ μ‹œκ°„μ΄ ν•„μš”ν–ˆμŠ΅λ‹ˆλ‹€. μ„œλ²„ κ°œλ°œμ„ μœ„ν•΄ Servlet, JSP, Spring을 배우게 λ˜μ—ˆκ³ , λ‚˜μ•„κ°€μ„œλŠ” 더 λ‚˜μ€ ν”„λ ˆμž„μ›Œν¬ 및 차이λ₯Ό μ•Œμ•„λ³΄κΈ° μœ„ν•΄ Flask, Django, Nest.js λ“± λ‹€μ–‘ν•œ ν”„λ ˆμž„μ›Œν¬λ₯Ό μ‚¬μš©ν–ˆμ—ˆμ£ . κ·ΈλŸ¬λ‚˜ μ„œλ²„ κ³΅λΆ€λŠ” 이것이 끝이 μ•„λ‹ˆμ—ˆμŠ΅λ‹ˆλ‹€.

μš°λ¦¬λŠ” μ΄λŸ¬ν•œ μ„œλ²„λ₯Ό 인터넷에 μ„œλΉ„μŠ€ν•˜κΈ° μœ„ν•΄ λ§Žμ€ 것을 κ³ λ―Όν•΄μ•Ό ν–ˆμŠ΅λ‹ˆλ‹€. μ„œλ²„μ—μ„œ 10, 100λͺ…λ§Œ μ ‘μ†ν•΄μ„œ 끝날 일이라면 κ·Έλƒ₯ μ„œλ²„λ₯Ό κ°œλ°œν•˜κ³ , λ°°ν¬ν•˜λŠ” κ²ƒλ§ŒμœΌλ‘œ 끝날 μΌμ΄μ§€λ§Œ, λ§Œμ•½ μˆ˜μ‹­λ§Œ λͺ…μ˜ μ‚¬μš©μžλ“€μ΄ λ‚΄ μ„œλ²„μ— 접속해야 ν•œλ‹€λ©΄ μ–΄λ–€ 일이 λ²Œμ–΄μ§ˆκΉŒμš”?

λ§Œμ•½, μ„œλ²„κ°€ λ©€ν‹° μŠ€λ ˆλ“œλ₯Ό μ‚¬μš©ν•˜κ³ , 각 μ‚¬μš©μžκ°€ 접속할 λ•Œλ§ˆλ‹€ μŠ€λ ˆλ“œλ₯Ό μƒμ„±ν•˜λŠ” ν˜•νƒœλ₯Ό 가지고 μžˆλ‹€λ©΄, 1만 λͺ… μ•„λ‹ˆ κ·Έ μ΄ν•˜μ˜ μ‚¬μš©μžκ°€ μ ‘μ†ν•˜λŠ” μˆœκ°„ μ„œλ²„μ—μ„œ 였λ₯˜λ₯Ό λ°œμƒν•  κ²ƒμž…λ‹ˆλ‹€. μ™œλƒκ΅¬μš”? 보톡 μš΄μ˜μ²΄μ œμ—μ„œ μŠ€λ ˆλ“œλ₯Ό 생성할 수 μžˆλŠ” κ°―μˆ˜κ°€ μ œν•œλ˜μ–΄ 있기 λ•Œλ¬Έμ΄μ£ .. λ§Œμ•½ λ‚΄κ°€ 128 μ½”μ–΄ ν”„λ‘œμ„Έμ„œμ— 512GB λ©”λͺ¨λ¦¬λ₯Ό μ§€λ‹Œ 덩치 큰 μ„œλ²„λ₯Ό 가지고 μžˆλ‹€κ³  ν•˜λ”λΌλ„ μ„œλ²„μ˜ λ¦¬μ†ŒμŠ€λ₯Ό λ‹€ 쓰지도 λͺ»ν•œ 채 μ‚¬μš©μžκ°€ μ ‘μ†ν•˜μ§€ λͺ»ν•˜λŠ” 어이 μ—†λŠ” 상황을 뢈러였게 λ©λ‹ˆλ‹€.

κ°œμΈν™” μ„œλΉ„μŠ€(λΈ”λ‘œκ·Έ, ν™ˆνŽ˜μ΄μ§€, Git)λ₯Ό κ°œλ°œν•˜κ³ , μš΄μ˜ν•˜λ©΄μ„œ μ΄λŸ¬ν•œ λ¬Έμ œκ°€ λ°œμƒ ν•˜λŠ” κ²½μš°λŠ” 거의 μ—†μ—ˆμŠ΅λ‹ˆλ‹€. μ™œλƒν•˜λ©΄ 잘 κ΅¬μΆ•λ˜μ–΄ μžˆλŠ” ν΄λΌμš°λ“œ(PaaS)λ₯Ό μ΄μš©ν•˜λ©΄ 이λ₯Ό μ•Œμ•„μ„œ μ²˜λ¦¬ν•΄μ£ΌκΈ° λ•Œλ¬Έμ΄μ£  (사싀 κ°œλ³„μ μœΌλ‘œ λ‘œλ“œ λ°ΈλŸ°μ‹±μ„ ν•΄μ•Όν•  만큼 μ„œλΉ„μŠ€λ₯Ό ν•˜λŠ” 것도 μ•„λ‹ˆμ§€λ§Œμš” γ… )

 

 

What is Load Balancing ?

λ‘œλ“œ λ°ΈλŸ°μ‹±μ΄λž€, 인터넷 μ„œλΉ„μŠ€μ—μ„œ λ°œμƒν•˜λŠ” λŒ€λŸ‰μ˜ νŠΈλž˜ν”½μ„ λΆ„μ‚° μ²˜λ¦¬ν•΄μ£ΌλŠ” κΈ°μˆ μž…λ‹ˆλ‹€. μ‹€μ œλ‘œ μ²˜μŒμ—λŠ” L7 μŠ€μœ„μΉ˜λΌλŠ” ν•˜λ“œμ›¨μ–΄ λ„€νŠΈμ›Œν¬ μž₯λΉ„μ—μ„œ μ§€μ›ν•΄μ£Όλ˜ 레벨의 κΈ°μˆ μ΄μ—ˆμ§€λ§Œ μ΅œκ·Όμ—λŠ” μ†Œν”„νŠΈμ›¨μ–΄μ μΈ λ°©μ‹μœΌλ‘œλ„ λ‘œλ“œ λ°ΈλŸ°μ‹±μ„ μ‚¬μš©ν•  수 μžˆμ–΄, λŒ€λΆ€λΆ„μ˜ νšŒμ‚¬μ—μ„œ 이 κΈ°μˆ μ„ μ‚¬μš©ν•˜μ—¬ μ„œλΉ„μŠ€λ₯Ό μš΄μ˜ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

μ›λ¦¬λŠ” μ΄λ ‡μŠ΅λ‹ˆλ‹€. μ‚¬μš©μžκ°€ μΈν„°λ„·μ—μ„œ μ–΄λŠ μ„œλΉ„μŠ€μ— μ ‘μ†ν•˜κ²Œ 되면, μ•žλ‹¨μ— λ„€νŠΈμ›Œν¬ μž₯λΉ„κ°€ 이 이벀트λ₯Ό λ°›κ³ , νŠΈλž˜ν”½μ˜ 상황에 따라 1번 μ„œλ²„μ— 접속을 μ‹œν‚¬μ§€, 2번 μ„œλ²„μ— 접속을 μ‹œν‚¬μ§€λ₯Ό νŒλ‹¨ν•˜μ—¬, κ·Έ μ„œλΉ„μŠ€μ—κ²Œ μš”μ²­μ„ 보내고 μ‘λ‹΅μ‹œν‚€λ„λ‘ ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 

λ‘œλ“œ λ°ΈλŸ°μ‹±μ€ μ•„λž˜μ˜ 3가지 λ„€νŠΈμ›Œν¬ κΈ°μˆ μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.

  • NAT(Network Address Translation) : 사섀 IP μ£Όμ†Œλ₯Ό 곡인 IP μ£Όμ†Œλ‘œ λ³€κ²½ν•˜λŠ” 데 μ‚¬μš©ν•˜λŠ” 기술
  • DSR(Dynamic Source Routing Control) : λ‘œλ“œ λ°ΈλŸ°μ„œ μ‚¬μš©μ‹œ μ„œλ²„μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈλ‘œ λ˜λŒμ•„κ°€λŠ” 경우 λͺ©μ μ§€μ˜ μ£Όμ†Œλ₯Ό μŠ€μœ„μΉ˜ IP μ£Όμ†Œκ°€ μ•„λ‹Œ ν΄λΌμ΄μ–ΈνŠΈμ˜ IP μ£Όμ†Œλ‘œ 전달해 λ„€νŠΈμ›Œν¬ μŠ€μœ„μΉ˜λ₯Ό κ±°μΉ˜μ§€ μ•Šκ³  λ°”λ‘œ ν΄λΌμ΄μ–ΈνŠΈλ₯Ό μ°Ύμ•„κ°œλŠ” κ°œλ…
  • Tunneling : μΈν„°λ„·μƒμ—μ„œ λˆˆμ— 보이지 μ•ŠλŠ” ν†΅λ‘œλ₯Ό λ§Œλ“€μ–΄ 톡신할 수 μžˆλ„λ‘ ν•˜λŠ” κ°œλ…, 데이터λ₯Ό μΊ‘μŠν™”ν•˜μ—¬ μ—°κ²°λœ μƒν˜Έ κ°„μ—λ§Œ μΊ‘μŠν™”λœ νŒ¨ν‚·μ„ ꡬ별해 μΊ‘μŠν™” ν•΄μ œ κ°€λŠ₯

 

 

Operating for Load Balancing

λ‘œλ“œ λ°ΈλŸ°μ‹±μ˜ λ™μž‘μ„ κ°„λ‹¨νžˆ μ„€λͺ…ν•œλ‹€λ©΄, λ„€νŠΈμ›Œν¬μ—μ„œ IP μ£Όμ†Œμ™€ MAC μ£Όμ†Œλ₯Ό μ΄μš©ν•΄ λͺ©μ μ§€ IP μ£Όμ†Œλ₯Ό μ°Ύμ•„κ°€κ³  μΆœλ°œμ§€(Source)둜 λ˜λŒμ•„μ˜€λŠ” κ΅¬μ‘°μž…λ‹ˆλ‹€. 이듀 λ°©μ‹μ—λŠ” μ•„λž˜μ˜ 4가지 방식이 μžˆμŠ΅λ‹ˆλ‹€.

  • Bridge/Transparent Mode
    μ‚¬μš©μžκ°€ μ„œλΉ„μŠ€λ₯Ό μš”μ²­ν•˜λ©΄, L4둜 μ „λ‹¬λœ λͺ©μ μ§€ IP μ£Όμ†Œλ₯Ό Real Server IP μ£Όμ†Œλ‘œ λ³€ν™˜ν•˜κ³  MAC μ£Όμ†Œ λ˜ν•œ λ³€ν™˜ν•΄ λͺ©μ μ§€λ‘œ μ°Ύμ•„κ°€λŠ” 방식

    1. μš”μ²­ 전달 μ‹œ λ³€ν™˜: μ‚¬μš©μž -> L4 -> NAT(IP/MAC λ³€ν™˜) -> Real Server =: μ‚¬μš©μžκ°€ L4 ν˜ΈμΆœμ‹œ 쀑간에 NAT에 μ˜ν•΄ μ£Όμ†Œ λ³€ν™˜λ¨
    2. 응닡 μ „λ‹¬μ‹œ λ³€ν™˜: Real Server -> NAT -> L4 -> μ‚¬μš©μž =: Real Serverμ—μ„œ L4λ₯Ό κ±°μΉ˜λ©΄μ„œ μΆœλ°œμ§€(Source) IP μ£Όμ†Œλ₯Ό L4 사섀 IP μ£Όμ†Œλ‘œ λ³€ν™˜ν•˜ 되, MAC μ£Όμ†ŒλŠ” λ³€ν™˜ν•˜μ§€ μ•ŠμŒ (동일 λ„€νŠΈμ›Œν¬ λŒ€μ—­μ΄κΈ° λ•Œλ¬Έ)

  • Router Mode
    Bridge/Transparent Mode와 방식은 λΉ„μŠ·ν•˜μ§€λ§Œ μΆœλ°œμ§€(Source)의 MAC μ£Όμ†Œλ„ λ³€ν™˜λ˜λŠ” 방식

  • One Arm Mode
    μ‚¬μš©μžκ°€ Real Server에 접속할 λ•Œ, λͺ©μ μ§€(Destination) IPλŠ” L4 μŠ€μœ„μΉ˜μ˜ IPλ₯Ό λ°”λΌλ³΄κ²Œ λ˜λŠ”λ°, L4에 λ„λ‹¬ν•˜λ©΄ L4λŠ” ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 받은 λͺ©μ μ§€ IP μ£Όμ†Œλ₯Ό L4 IP μ£Όμ†Œμ—μ„œ Real Server IP와 MAC μ£Όμ†Œλ‘œ λ³€ν™˜ν•˜κ³ , λ˜λŒμ•„κ°€λŠ” IPλŠ” L4의 IP Pool의 IP μ£Όμ†Œλ‘œ λ³€ν™˜

  • DSR (Direct Server Return) Mode
    μ‚¬μš©μžκ°€ Real Server에 접속할 λ–„, μΆœλ°œμ§€(Source), λͺ©μ μ§€(Destination) IP μ£Όμ†Œλ₯Ό λ³€ν™˜ν•˜μ§€ μ•Šκ³ , L4μ—μ„œ κ΄€λ¦¬ν•˜λŠ” MAC μ£Όμ†Œ ν…Œμ΄λΈ”μ„ 확인해 MAC μ£Όμ†Œλ§Œμ„ λ³€ν™˜ν•˜λŠ” 방식 (μ—¬κΈ°μ„œ ARP ν”„λ‘œν† μ½œμ„ μ‚¬μš©)

 

 

Scheduling Algorithm

λ‘œλ“œ λ°ΈλŸ°μ‹±μ—λ„ νŠΈλž˜ν”½μ„ λΆ„μ‚°ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ΄ μžˆμŠ΅λ‹ˆλ‹€. λ¬΄μž‘μ • μ‚¬μš©μžκ°€ λ“€μ–΄μ˜΄μ— 따라 κ· λ“±ν•˜κ²Œ λΆ„μ‚°μ²˜λ¦¬ν•˜λ©΄ 베슀트라고 보싀 μˆ˜λ„ μžˆκ² μ§€λ§Œ, λ§Œμ•½ 두 μ„œλ²„κ°€ λ‹€λ₯Έ μŠ€νŽ™μ„ 가지고 μžˆλ‹€κ±°λ‚˜, ν™˜κ²½μ΄ λ‹€λ₯Έ κ²½μš°μ—λŠ” μ΄λŸ¬ν•œ μ•Œκ³ λ¦¬μ¦˜μ΄ 였히렀 μ•…νš¨κ³Όλ₯Ό λΆ€λ₯Ό μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ λ‘œλ“œ λ°ΈλŸ°μ‹±μ—λŠ” μ—¬λŸ¬ μ•Œκ³ λ¦¬μ¦˜μ΄ μ‘΄μž¬ν•©λ‹ˆλ‹€.

  • RR(Round-Robin) : λ„€νŠΈμ›Œν¬μ— μ—°κ²°λ˜μ–΄ μžˆλŠ” μ„œλ²„λ₯Ό μ²˜μŒλΆ€ν„° μ°¨λ‘€λŒ€λ‘œ μ„ νƒν•˜λŠ” λ°©μ‹μ˜ μ•Œκ³ λ¦¬μ¦˜
  • WRR(Weighted Round-Robin) : RR에 κ°€μ€‘μΉ˜(Weight)λ₯Ό μΆ”κ°€ν•œ μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ, κ°€μ€‘μΉ˜λ₯Ό μ΄μš©ν•΄ λΆ„μ‚°ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜ κ°€μ€‘μΉ˜λŠ” μš΄μ˜μžκ°€ 선택할 수 있으며, κ°€μ€‘μΉ˜κ°€ 클 수둝 λΉˆλ²ˆν•˜κ²Œ μ„ νƒλœλ‹€.
  • LC(Least-Connection) : 접속 μˆ˜κ°€ κ°€μž₯ 적은 μ„œλ²„λ₯Ό μ„ νƒν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜
  • WLC(Weighted Least-Connection) : LC에 κ°€μ€‘μΉ˜(Weight)λ₯Ό μΆ”κ°€ν•œ μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ, (Connection + 1) / Weightκ°€ μ΅œμ†Œκ°€ λ˜λŠ” μ„œλ²„λ₯Ό μš°μ„ μœΌλ‘œ μ ‘μ†μ‹œν‚¨λ‹€. 
  • SED(Shortest Expected Delay) : κ°€μž₯ 응닡 속도가 λΉ λ₯Έ μ„œλ²„λ₯Ό μ„ νƒν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ, μ„œλ²„μ— ESTABLISHED Connection이 κ°€μž₯ 적은 μ„œλ²„λ₯Ό μ„ νƒν•œλ‹€.

사싀 쉽고, νŽΈν•˜κ²Œ μ“Έ 수 μžˆλŠ” μ•Œκ³ λ¦¬μ¦˜μ€ LC μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€. 접속 μˆ˜κ°€ κ°€μž₯ 적은 μ„œλ²„λ₯Ό μ„ νƒν•˜κ²Œ 되면, μ‚¬μš©μžκ°€ κ°€λŠ₯ν•œ κΉ¨λ—ν•œ ν™˜κ²½μ„ μ‚¬μš©ν•  수 있기 λ•Œλ¬Έμ΄μ£ . κ·ΈλŸ¬λ‚˜ 항상 Bestκ°€ 될 μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

 

 

마치며...

λ‘œλ“œ λ°ΈλŸ°μ‹±μ— λŒ€ν•œ κ°„λ‹¨ν•œ 이야기λ₯Ό ν•΄λ΄€μŠ΅λ‹ˆλ‹€. λ§ˆμ§€λ§‰ ν¬μŠ€νŠΈκ°€ IP Masqueradeμ˜€λŠ”λ°, λ‘œλ“œ λ°ΈλŸ°μ‹± 이전에 λ©€ν‹° ν”„λ‘œμ„ΈμŠ€, λ©€ν‹° μŠ€λ ˆλ“œ λ°©μ‹μ˜ μ„œλ²„ 개발 이야기λ₯Ό 해보렀닀 λ¨Όμ € λ‘œλ“œ λ°ΈλŸ°μ‹± 포슀트λ₯Ό ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

μ°¨ν›„ λ‹€λ₯Έ μΉ΄ν…Œκ³ λ¦¬μ—μ„œ 이 λ‘œλ“œ λ°ΈλŸ°μ‹±μ„ μ–΄λ–»κ²Œ μ‚¬μš©ν•  수 μžˆλŠ”μ§€μ— λŒ€ν•΄ μ μ–΄λ³΄κ³ μž ν•©λ‹ˆλ‹€.

 

 

μ°Έκ³ : https://d2.naver.com/helloworld/284659

λ°˜μ‘ν˜•
TAGS.

Tistory Comments