λΆ€ν•˜ 뢄산을 μœ„ν•œ λ‘œλ“œ λ°ΈλŸ°μ‹± μ•Œκ³ λ¦¬μ¦˜(load balancing algorithm)

μ„œλΉ„μŠ€κ°€ μ‚¬μš©λŸ‰μ΄ λ§Žμ•„λ„ 견디기 μœ„ν•΄μ„œλŠ” μ—¬λŸ¬ μ„œλ²„λ₯Ό κ΅¬μ„±ν•˜κ³  이듀간에 λΆ€ν•˜ 뢄산을 ν•΄μ£Όμ–΄μ•Ό ν•©λ‹ˆλ‹€

이λ₯Ό μ²˜λ¦¬ν•˜λŠ” μ œν’ˆμ„ Load balancer 라고 ν•˜λ©° μ μ ˆν•˜κ²Œ λΆ€ν•˜λ₯Ό λΆ„μ‚°ν•˜κΈ° μœ„ν•΄ μ—¬λŸ¬κ°€μ§€ λΆ€ν•˜ λΆ„μ‚° 방식을 μ œκ³΅ν•©λ‹ˆλ‹€.


λΆ€ν•˜ λΆ„μ‚° μ•Œκ³ λ¦¬μ¦˜

Round Robin(RR)

λΌμš΄λ“œ 둜빈 μ•Œκ³ λ¦¬μ¦˜μ€ 일반적으둜 κΈ°λ³Έ λ‘œλ“œ λ°ΈλŸ°μ‹± 섀정이며 ν΄λŸ¬μŠ€ν„°λ‚΄μ˜ Server λ₯Ό μˆœνšŒν•˜λ©΄μ„œ μ„œλΉ„μŠ€ν•©λ‹ˆλ‹€.Β 

즉 ν΄λŸ¬μŠ€ν„°μ— A, B, C μ„œλ²„κ°€ μžˆμ„ 경우 A β†’ B β†’ C β†’ A μ‹μœΌλ‘œ μˆœνšŒν•˜μ—¬ λΆ€ν•˜λ₯Ό λΆ„μ‚°ν•©λ‹ˆλ‹€.


처리 μ„œλ²„κ°€ λ°”λ€”μˆ˜ μžˆμœΌλ―€λ‘œ 이 방식을 μ‚¬μš©ν•˜λ €λ©΄ session clustering 이 κ΅¬μ„±λ˜μ–΄ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.


κ°€μž₯ κ°„λ‹¨ν•˜κ³  이해도 μ‰¬μ›Œμ„œ 많이 μ‚¬μš©ν•˜μ§€λ§Œ μ„œλ²„κ°„ 처리 μš©λŸ‰μ΄ λ‹€λ₯Έ 경우 μ ν•©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

least connection

κ°€μž₯ ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²° κ°―μˆ˜κ°€ 적은 μ„œλ²„λ‘œ λΆ€ν•˜λ₯Ό λΆ„μ‚°ν•˜μ—¬ κ· λ“±ν•˜κ²Œ μ „λ‹¬ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.

RR κ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ 이 방식을 μ‚¬μš©ν•˜λ €λ©΄ session clustering 이 κ΅¬μ„±λ˜μ–΄ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.


ip hash

ν΄λΌμ΄μ–ΈνŠΈ IP λ₯Ό hash ν•΄μ„œ νŠΉμ • ν΄λΌμ΄μ–ΈνŠΈλŠ” νŠΉμ • μ„œλ²„λ‘œ μ—°κ²°ν•˜λ„λ‘ ν•˜λŠ” μ„€μ •μž…λ‹ˆλ‹€.

Session clustering 이 κ΅¬μ„±λ˜μ§€ μ•Šμ€ 경우 μœ μš©ν•˜μ§€λ§Œ λΆ€ν•˜κ°€ 골고루 λΆ„μ‚°λ˜μ§€ μ•Šκ³  νŠΉμ • μ„œλ²„μ— λͺ°λ¦΄ 수 μžˆλŠ” μœ„ν—˜μ΄ μžˆμŠ΅λ‹ˆλ‹€.

Server Weights RR

μ„œλ²„μ— κ°€μ€‘μΉ˜λ₯Ό μ£Όμ–΄μ„œ κ°€μ€‘μΉ˜κ°€ 높은 μ„œλ²„κ°€ 더 λ§Žμ€ 일을 μ²˜λ¦¬ν•˜κ²Œ ν•©λ‹ˆλ‹€.

μ„œλ²„κ°€ λ™μ‹œμ— λ“€μ–΄μ™€μ„œ 같은 사양이 μ•„λ‹ˆκ³  νŠΉμ • μ„œλ²„μ˜ μŠ€νŽ™μ΄ 더 쒋을 경우 μŠ€νŽ™ 쒋은 μ„œλ²„μ— κ°€μ€‘μΉ˜λ₯Ό λ†’κ²Œ μ£Όμ–΄ μ²˜λ¦¬λŸ‰μ„ 늘릴수 μžˆμŠ΅λ‹ˆλ‹€.


nginx μ›Ή μ„œλ²„λ„ λ‘œλ“œ λ°ΈλŸ°μ„œ κΈ°λŠ₯이 있으며 λ‹€μŒκ³Ό 같이 Upstream 에 κ°€μ€‘μΉ˜λ₯Ό 쀄 수 μžˆμŠ΅λ‹ˆλ‹€.

upstream phpserver {       
        server was1-ip:1234 weight=5;
        server was2-ip:1234 ;
        server 192.0.0.1 backup;
}

μœ„ 섀정은 was1 μ„œλ²„μ— 5번 μš”μ²­ν•œ 후에 was2 μ„œλ²„μ— μš”μ²­ν•˜λ©°Β backup 으둜 μ§€μ •λœ μ„œλ²„λŠ” 메인 μ„œλ²„κ°€ λ‹€ fault 일 κ²½μš°μ—λ§Œ μ„œλΉ„μŠ€ν•˜λŠ” μ„€μ •μž…λ‹ˆλ‹€.


Server Slow Start

λ³„λ„μ˜ λΆ€ν•˜ λΆ„μ‚° μ•Œκ³ λ¦¬μ¦˜λ³΄λ‹€λŠ” 볡ꡬ된 μ„œλ²„μ˜ 재μž₯μ• λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•œ κΈ°λ²•μž…λ‹ˆλ‹€.

예둜 ν΄λŸ¬μŠ€ν„°λ‚΄ νŠΉμ • μ„œλ²„κ°€ μž₯μ• μ—μ„œ λ³΅κ΅¬λ˜μ–΄μ„œ λ‹€μ‹œ ν΄λŸ¬μŠ€ν„°μ— μ°Έμ—¬ν–ˆμ„ 경우 μ΅œκ·Όμ— μš”μ²­μ΄ λͺ°λ €μ„œ λ‹€μ‹œ μž₯μ• κ°€ λ‚˜μ§€ μ•Šλ„λ‘ slow_start 에 μ‹œκ°„μ„ μ„€μ •ν•˜λ©΄ 주어진 μ‹œκ°„λ§ŒνΌ κΈ°λ‹€λ € μ€λ‹ˆλ‹€.

즉 slow_start λ₯Ό μ„€μ •ν•œ μ„œλ²„μ—λŠ” 정해진 μ‹œκ°„λ™μ•ˆ λΆ€ν•˜λ₯Ό λΆ„μ‚°ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

일반적인 Load Balancer κΈ°λŠ₯은 아리며 μ œν’ˆμ— 따라 κΈ°λŠ₯이 μ‘΄μž¬ν•˜μ§€ μ•Šμ„μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.


같이 보기


Ref