Becker
Becker ์˜ TIL
Becker
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (30)
    • Computer Science (15)
      • Python (7)
      • Java (1)
      • Algorithm (0)
      • Database (3)
      • Network (1)
      • Openstack (2)
      • ETC (1)
    • ์ž๋™ํ™” (3)
      • Github Action (1)
      • Airflow (0)
      • Docker (2)
    • ๋…ผ๋ฌธ ๋ฆฌ๋ทฐ (1)
    • ์„œํ‰ (3)
    • ๋„์ ๋„์  (8)
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ

์ธ๊ธฐ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
Becker

Becker ์˜ TIL

HAProxy๋ฅผ ์‚ฌ์šฉํ•œ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ์„œ๋ฒ„์™€ ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ ํ™˜๊ฒฝ ๊ตฌ์ถ•(1)
Computer Science/ETC

HAProxy๋ฅผ ์‚ฌ์šฉํ•œ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ์„œ๋ฒ„์™€ ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ ํ™˜๊ฒฝ ๊ตฌ์ถ•(1)

2023. 3. 26. 20:42

๐Ÿ ๋“ค์–ด๊ฐ€๊ธฐ ์ „

ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ Nginx๋ฅผ ์‚ฌ์šฉํ•ด ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•ด ๋ณธ ๊ฒฝํ—˜์ด ์žˆ๋‹ค. Nginx๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ์„ธํŒ…๊ณผ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์Šค ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ 2% ์•„์‰ฌ์šด ๋ถ€๋ถ„์ด ์กด์žฌํ–ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ๋Œ€์•ˆ์œผ๋กœ HAProxy๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ์ด ๊ฐ€๋Šฅํ•œ ๊ณ ๊ฐ€์šฉ์„ฑ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ๋” ๋‚˜์•„๊ฐ€ ๋ฌด์ค‘๋‹จ ๋ฐฐํฌํ™˜๊ฒฝ๊นŒ์ง€ ๋งŒ๋“ค์–ด๋ณด๊ณ ์ž ํ•œ๋‹ค.


โœ… HAProxy

HAProxy๋Š” ๊ณ ๊ฐ€์šฉ์„ฑ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ์™€ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ์„œ๋ฒ„๋ฅผ ์ง€์›ํ•˜๋Š” ์˜คํ”ˆ์†Œ์Šค ์†Œํ”„ํŠธ์›จ์–ด์ด๋‹ค. Nginx ์ผ๋ฐ˜ ๋ฒ„์ „๊ณผ ์ฐจ๋ณ„ํ™”๋œ HAProxy์˜ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์€ health check ๊ทธ๋ฆฌ๊ณ  failover ๊ธฐ๋Šฅ์ด๋‹ค. ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜๋ฉด, HAProxy ์„œ๋ฒ„๊ฐ€ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์˜ ์ƒํƒœ๋ฅผ ์ง€์†์ ์œผ๋กœ ํ™•์ธํ•˜๊ณ  ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๋…ธ๋“œ(์„œ๋ฒ„)๊ฐ€ ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ์„œ๋ฒ„๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด์ง€ ์•Š๊ณ  ์ •์ƒ์ ์ธ ๋…ธ๋“œ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์ „๋‹ฌํ•˜๋Š” ์ง€์› ํ•œ๋‹ค. ์ด ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•ด ์ด์ค‘ํ™” ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๋ฅผ ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ ํ•˜๋Š” ๊ธฐ๋Šฅ๊ณผ ๋ฌด์ค‘๋‹จ ๋ฐฐํฌํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค.


๐Ÿ—บ ์ธํ”„๋ผ ๊ตฌ์„ฑ

 

  • ๋ชจ๋“  ์ธํ”„๋ผ ๋ฐ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ปจํ…Œ์ด๋„ˆ ํ˜•ํƒœ๋กœ ๋งŒ๋“ ๋‹ค
  • HAProxy๋ฅผ ํ™œ์šฉํ•ด 2๊ฐœ์˜ Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ์ด ๊ฐ€๋Šฅํ•œ ํ™˜๊ฒฝ ๊ตฌ์ถ•
  • Gitlab Runner๋ฅผ ํ™œ์šฉํ•ด Blue Green ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ ํ™˜๊ฒฝ ๊ตฌ์ถ•
  • ๋ฐฐํฌ ์ดํ›„ ๋กค๋ฐฑ ์Šคํฌ๋ฆฝํŠธ ๊ตฌ์ถ•

 

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” HAProxy๋ฅผ ์‚ฌ์šฉํ•ด ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ์ธํ”„๋ผ๊นŒ์ง€ ๋งŒ๋“ค ๊ฒƒ์ด๋‹ค.


โš™๏ธ Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฏธ์ง€

1. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ„๋‹จํ•˜๊ฒŒ GET /hello ์š”์ฒญ์— "hello"๋กœ ์‘๋‹ตํ•˜๋Š” API๋ฅผ ๋งŒ๋“ ๋‹ค.

@RestController
@RequiredArgsConstructor
@Slf4j
public class HelloController {
	@GetMapping("/hello")
	public ResponseEntity<String> hello() {
		log.info("hello controller requested!");
		return ResponseEntity.ok().body("hello");
	}
}
  • ์š”์ฒญ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด hello controller requestd! ๋ฅผ ์ถœ๋ ฅํ•˜๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค.

 

2. health check๋ฅผ ์œ„ํ•ด acturator์˜ ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •ํ•œ๋‹ค.

์ฐธ๊ณ  http://forward.nhnent.com/hands-on-labs/java.spring-boot-actuator/06-health.html

//build.gradle
dependencies {
    // actuator
    implementation 'org.springframework.boot:spring-boot-starter-actuator:3.0.4'

}
//application.yml
management:
  endpoints:
    web:
      base-path: /application
  endpoint:
    health:
      show-details: always

 

3. Spring boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ด๋ฏธ์ง€ ํ˜•ํƒœ๋กœ ๋ฐฐํฌํ•ด์•ผ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด Dockerfile์„ ์ž‘์„ฑํ•˜๊ณ  ๋นŒ๋“œ ํ›„ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

FROM openjdk:17-jdk-slim-buster
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
docker build . -t backend:latest

 

4. ์ปจํ…Œ์ด๋„ˆ๋กœ ๋งŒ๋“ค์–ด์ง„ ์„œ๋น„์Šค๋“ค์ด ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ๋งŒ๋“ ๋‹ค.

docker network create haproxy-net

 

5. ๋ฐฑ์—”๋“œ ์„œ๋ฒ„ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‘ ๊ฐœ ๋„์šด๋‹ค(Blue server group)

docker run -d --name blue-server-1 -p 8081:8080 --net haproxy-net backend:latest
docker run -d --name blue-server-2 -p 8082:8080 --net haproxy-net backend:latest

๐Ÿšง ํ…Œ์ŠคํŠธ

1. ์ปจํ…Œ์ด๋„ˆ ํ™•์ธ

docker ps

 

2. api ํ…Œ์ŠคํŠธ

curl -X GET localhost:8081/hello

 

3. health check ํ…Œ์ŠคํŠธ

curl -X GET localhost:8081/application/health


โš™๏ธ HAProxy ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ์„œ๋ฒ„ ๊ตฌ์ถ•

1. ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ์„ธํŒ…์„ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด haproxy.cfg ํŒŒ์ผ์„ ๋งŒ๋“ค์—ˆ๋‹ค.

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    log	127.0.0.1 local1
    maxconn	4000 # ํ”„๋กœ์„ธ์Šค ๋‹น ์ตœ๋Œ€ ์—ฐ๊ฒฐ ์ˆ˜์น˜
    daemon       # Background ์‹คํ–‰
    
    stats socket /var/lib/haproxy/stats mode 660 level admin expose-fd listeners # ํ†ต๊ณ„ ๊ด€๋ จ ์ •๋ณด์— ๋Œ€ํ•œ ์œ„์น˜๋ฅผ ์ง€์ •
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------	
defaults # front, back, listen์— ๊ด€ํ•œ ์ „์—ญ ์„น์…˜
    mode	http # http ํ”„๋กœํ† ์ฝœ ์‚ฌ์šฉํ•˜๋Š” ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ ๋ชจ๋“œ
    log	global   # ๋กœ๊ทธ๋Š” global ์„ค์ •์„ ๋”ฐ๋ฆ„
    option httplog # ๋กœ๊ทธ ๋””ํ…Œ์ผ์„ ๋†’์ž„
    option	dontlognull # ๋กœ๊ทธ ๋น„๋Œ€ํ™” ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด probe(์ •์ฐฐ, ์Šค์บ”) ์žก๋‹คํ•œ ๊ธฐ๋ก์€ ๋‚จ๊ธฐ์ง€ ์•Š์Œ
    retries	3 # ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋˜์—ˆ๋‹ค๊ณ  ํŒ๋‹จํ•˜๋Š” ์š”์ฒญ ํšŸ์ˆ˜
    option forwardfor # X-Forwarded-For๋ฅผ ํ—ค๋”์— ์ถ”๊ฐ€
    option	http-server-close # ์‹ค์ œ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„ ์—ฐ๊ฒฐ์ด ์ข…๋ฃŒ ๋  ์‹œ ์œ ํœด์ƒํƒœ๋กœ ๋Œ€๊ธฐํ•˜์ง€ ์•Š๊ณ  ์„œ๋ฒ„์—์„œ Handshake๋ฅผ ์ข…๋ฃŒํ•˜์—ฌ ๋” ๋น ๋ฅด๊ฒŒ ์ƒˆ๋กœ์šด ์„ธ์…˜์„ ์ค€๋น„ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์˜ต์…˜
    timeout http-request	2m # ์š”์ฒญํƒ€์ž„์•„์›ƒ ์‹œ๊ฐ„ ์„ค์ •
    timeout	queue	2m 
    timeout connect	2m
    timeout client	2m
    timeout server	2m
    timeout http-keep-alive	2m
    timeout check	2m
#---------------------------------------------------------------------
# FrontEnd Configuration
#---------------------------------------------------------------------
frontend http # ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์— ๋Œ€ํ•œ ์„ค์ •
    bind *:8080 # 8080 ๋ฒˆ์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ ์ฒ˜๋ฆฌ
    http-request set-header X-Forwarded-Proto http 
    use_backend backend_blue

#---------------------------------------------------------------------
# BackEnd Platform Configuration
#---------------------------------------------------------------------
backend backend_blue
    balance roundrobin # ๋ถ€ํ•˜๋ถ„์‚ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜

    # health check
    option httpchk
    http-check send meth GET uri /application/health
    http-check expect status 200
    
    # configure platform instances
    server s1 blue-server-1:8080 check inter 1s fastinter 500ms # ํ‰์ƒ์‹œ์—” 1์ดˆ ๋‹จ์œ„๋กœ ์ฒดํฌ ํ•˜๊ณ  ์„œ๋ฒ„์˜ ์ƒํƒœ๊ฐ€ ๋ณ€๋™์ด ์žˆ์„ ๋•Œ .5์ดˆ ๋งˆ๋‹ค ์ฒดํฌ 
    server s2 blue-server-2:8080 check inter 1s fastinter 500ms
#---------------------------------------------------------------------
# HAProxy Monitoring Config
#---------------------------------------------------------------------
listen stats
    bind *:9000
    mode  http
    option dontlog-normal
    stats enable
    stats uri /haproxy
  • 8080 ํฌํŠธ๋กœ ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ backend_blue๋กœ ๋ณด๋‚ธ๋‹ค
  • backend_blue์—์„œ๋Š” ๋ผ์šด๋“œ ๋กœ๋นˆ ๋ฐฉ์‹์œผ๋กœ ์œ„์—์„œ ์„ธํŒ…ํ•œ 2๊ฐœ์˜ backend ์„œ๋ฒ„๋กœ ๋ถ„๋ฐฐํ•œ๋‹ค
  • /application/health๋กœ ์„œ๋ฒ„์˜ ์ƒํƒœ๋ฅผ health check ํ•œ๋‹ค.
  • 9000 ํฌํŠธ๋กœ haproxy๋กœ ์—ฐ๊ฒฐ๋œ ์„œ๋ฒ„๋“ค์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

2. HAProxy ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰

docker run -d --name haproxy -p 8080:8080 -p 9000:9000 -v $(pwd)/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg --net haproxy-net haproxy:alpine

 


๐Ÿšง ํ…Œ์ŠคํŠธ

1. ์ปจํ…Œ์ด๋„ˆ ๋กœ๊ทธ ํ™•์ธ

docker logs ๋ช…๋ น์–ด๋กœ ์ปจํ…Œ์ด๋„ˆ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

docker logs -f haproxy

haproxy ์„œ๋ฒ„๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•จ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค

 

2. HAProxy ์ƒํƒœ ๋ธŒ๋ผ์šฐ์ € ํ™•์ธ

๋กœ์ปฌ์—์„œ HAProxy๋ฅผ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์„œ๋ฒ„์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

http://localhost:9000/haproxy


๐Ÿšง ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ํ…Œ์ŠคํŠธ

์ปจํ…Œ์ด๋„ˆ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์ด ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๋กœ ๋ถ„๋ฐฐ๋˜์–ด ์ฒ˜๋ฆฌ๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

 

1. ๋ฐฑ์—”๋“œ ์„œ๋ฒ„ ๋กœ๊ทธ ํ™•์ธ

docker logs -f blue-server-1
docker logs -f blue-server-2

2. 100๋ฒˆ์˜ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ

๋‹ค์Œ ์‰˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด 100๋ฒˆ์˜ ์š”์ฒญ์„ haproxy ์„œ๋ฒ„๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค

#!/bin/bash
#load_balancing.sh
url="http://localhost:8080/hello"

count=0

# Loop 100 times
for i in {1..100}
do
  # Send an HTTP GET request and capture the response status code
  status=$(curl -s -o /dev/null -w "%{http_code}" $url)
done

 

3. ๊ฒฐ๊ณผ ํ™•์ธ

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ชจ๋“  ์š”์ฒญ์ด ๋ผ์šด๋“œ ๋กœ๋นˆ ๋ฐฉ์‹์œผ๋กœ ์ด์ค‘ํ™”๋œ ์„œ๋ฒ„๋กœ ๊ท ์ผํ•˜๊ฒŒ ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ขŒ์ธก ํ„ฐ๋ฏธ๋„์€ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰(sh load_balancing.sh)
  • ์šฐ์ธก์€ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์˜ ๋กœ๊ทธ๋ฅผ ํ™•์ธ(blue-server-1, blue-server-2)


๐Ÿšง failover ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ

1. ๋ฐฑ์—”๋“œ ์„œ๋ฒ„ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ์ •์ง€

docker stop blue-server-1

s1 ์„œ๋ฒ„๊ฐ€ ์ฃฝ์€ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

2. 100๋ฒˆ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ(fail_over_test.sh)

  • GET /hello๋กœ 100๋ฒˆ์˜ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
  • ์ƒํƒœ์ฝ”๋“œ๊ฐ€ 200๋ฒˆ์ž„์„ ํ™•์ธํ•˜๊ณ  count๋ฅผ ์˜ฌ๋ฆฐ๋‹ค.
  • ๋ชจ๋“  ์š”์ฒญ์ด ์„ฑ๊ณต์ ์ด๋ฉด count ๊ฐ’์„ 100์œผ๋กœ ์ถœ๋ ฅํ•œ๋‹ค.
#!/bin/bash
#fail_over_test.sh

url="http://localhost:8080/hello"

count=0

# Loop 100 times
for i in {1..100}
do
  # Send an HTTP GET request and capture the response status code
  status=$(curl -s -o /dev/null -w "%{http_code}" $url)

  # If the status code is 200, increment the counter
  if [ "$status" -eq "200" ]; then
    ((count++))
  fi
done

# Output the count of successful requests
echo "Number of successful requests: $count"

3. ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ํ™•์ธ

100๋ฒˆ์˜ ์š”์ฒญ ๋ชจ๋‘ ์„ฑ๊ณต

์ด๋ฅผ ํ†ตํ•ด ํ•˜๋‚˜์˜ ์„œ๋ฒ„์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๊ฒฝ์šฐ HAProxy๊ฐ€ ๋‹ค๋ฅธ ์„œ๋ฒ„๋กœ ๋ชจ๋“  ์š”์ฒญ์„ ๋ผ์šฐํŒ… ํ•ด์ฃผ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 


๐Ÿชข ๋งˆ์น˜๋ฉฐ

HAProxy๋กœ ์ด์ค‘ํ™”๋œ ์„œ๋ฒ„์— ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค๊ณ  ํ…Œ์ŠคํŠธํ•ด๋ณด์•˜๋‹ค. ๊ธฐ์กด์— ์‚ฌ์šฉํ•˜๋˜ Nginx์™€ ๋น„๊ตํ•ด ๋ดค์„ ๋•Œ ์„ค์ • ํŒŒ์ผ์˜ ์˜ต์…˜๋“ค์ด ์กฐ๊ธˆ ๋” ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์› ๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์—์„œ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ ์ด์™ธ์—๋„ failover๊ณผ ๊ฐ™์€ ๊ณ ๊ฐ€์šฉ์„ฑ ์„œ๋ฒ„ ๊ตฌ์„ฑ์„ ์œ„ํ•œ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. HAProxy๊ฐ€ ์žฅ์ ๋งŒ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. Nginx๋Š” ๊ทธ ์ž์ฒด๋กœ ์›น ์„œ๋ฒ„๋กœ์„œ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๊ณ  ์ •์  ์ฝ˜ํ…์ธ ๋ฅผ ๋น ๋ฅด๊ฒŒ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ œ๊ณตํ•˜๊ณ  ๋” ๋งŽ์€ connection์„ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ๋Š” HAProxy์™€ Gitlab-CI ํŒŒ์ดํ”„๋ผ์ธ์„ ํ™œ์šฉํ•ด Blue-Green ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค.

To Be Continue...

    Becker
    Becker

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”