🐬 μ„œλ²„λ₯Ό docker swarm 으둜 κ΄€λ¦¬ν•΄λ³΄μž

κΈ°μ‘΄ μ„œλ²„ 운영 방식

0졜초의 μ„œλ²„ 섀계

졜초의 μ„œλ²„ μ„€κ³„μ—μ„œλŠ” NCP μ„œλ²„ μΈμŠ€ν„΄μŠ€ 1λŒ€μ— NGINX, μ±„νŒ… μ„œλ²„, API μ„œλ²„, RTMP μ„œλ²„κ°€ 각각 1개의 μ»¨ν…Œμ΄λ„ˆμ”© λ„μ›Œμ ΈμžˆλŠ” κ΅¬μ‘°μ˜€μŠ΅λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ μ‹œκ°„μ΄ μ§€λ‚˜λ©΄μ„œ 각각의 μ„œλ²„λ₯Ό μˆ˜ν‰ ν™•μž₯ν•  ν•„μš”μ„±μ„ 느끼고 μ„œλ²„λ₯Ό μˆ˜ν‰ ν™•μž₯ ν•  수 μžˆλ„λ‘ 섀계λ₯Ό μˆ˜μ •ν•˜κ³  λ³΄λ‹ˆ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ–΄λ–»κ²Œ κ΄€λ¦¬ν•˜κ³ , 또 ncp μ„œλ²„ μΈμŠ€ν„΄μŠ€λ₯Ό μ–΄λ–»κ²Œ μΆ”κ°€/μ‚­μ œ ν•˜λ©΄μ„œ 관리해야할지에 λŒ€ν•œ 어렀움이 μƒκ²ΌμŠ΅λ‹ˆλ‹€.

Docker Swarm

도컀 μŠ€μ›œμ€ μΏ λ²„λ„€ν‹°μŠ€μ™€ ν•¨κ»˜ μ΄μ•ΌκΈ°λ˜λŠ” λŒ€ν‘œμ μΈ μ»¨ν…Œμ΄λ„ˆ μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ λ„κ΅¬μž…λ‹ˆλ‹€. μ΄λ¦„μ—μ„œλΆ€ν„° μ•Œ 수 μžˆλ“―μ΄ 도컀 엔진을 κ·ΈλŒ€λ‘œ μ“°κΈ° λ•Œλ¬Έμ— κ°„λ‹¨ν•œ μ„€μ •λ§ŒμœΌλ‘œλ„ ν΄λŸ¬μŠ€ν„°μ™€ μ„œλΉ„μŠ€λ“€μ„ 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ—”ν„°ν”„λΌμ΄μ¦ˆ 레벨의 μš΄μ˜μ„ ν•œλ‹€λ©΄ μΏ λ²„λ„€ν‹°μŠ€κ°€ 쑰금 더 μ’‹μ•˜κ² μ§€λ§Œ μ•„μ§κΉŒμ§€λŠ” 저희 ν”„λ‘œμ νŠΈμ—μ„œ λ„€νŠΈμ›Œν‚Ήμ΄λ‚˜ Volume 등을 고렀해봀을 λ•Œ, κ°„νŽΈν•˜κ²Œ μ„€μ •ν•  수 μžˆλŠ” 도컀 μŠ€μ›œμ„ μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€κ³  μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€.

ν΄λŸ¬μŠ€ν„°λ§

1image.png

2image.png

저희 νŒ€μ€ 기쑴에 메인 production μ„œλ²„ 1λŒ€, ν…ŒμŠ€νŠΈμš© development μ„œλ²„ 1λŒ€λ‘œ 총 2λŒ€ 가동 ν•˜κ³  μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

그리고 개발이 μ–΄λŠμ •λ„ 마무리 λ˜λŠ” μ‹œμ μΈ 6주차에 μ ‘μ–΄λ“€λ©΄μ„œ ν…ŒμŠ€νŠΈμš© development μ„œλ²„μ˜ ν™œμš©μ„±μ΄ 점점 λ–¨μ–΄μ‘Œκ³ , λΆ€ν•˜ ν…ŒμŠ€νŠΈλ‚˜ 데λͺ¨ μš©λ„λ‘œ production μ„œλ²„μ— λΆ€ν•˜κ°€ 점점 λŠ˜μ–΄λ‚¬μŠ΅λ‹ˆλ‹€.

κ·Έλž˜μ„œ 기쑴의 test μ„œλ²„λ₯Ό production μ„œλ²„μ™€ ν΄λŸ¬μŠ€ν„°λ§ ν•˜λ©΄μ„œ 도컀 μ»¨ν…Œμ΄λ„ˆ 기반으둜 μ„œλΉ„μŠ€λ₯Ό μš΄μ˜ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

3image.png

4image.png

μœ„μ˜ μ΄λ―Έμ§€μ—μ„œ λ³΄μ‹œλ‹€μ‹œν”Ό main, test 2개의 μ„œλ²„μ— chat-server (replica 3), main-server, rtmp-server (replica 3), nginx μ»¨ν…Œμ΄λ„ˆλ₯Ό λ‚˜λˆ„μ–΄ μ‹€ν–‰ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

Docker Swarm 은 μ•„μ‰½κ²Œλ„ μΏ λ²„λ„€ν‹°μŠ€μ²˜λŸΌ μ»¨ν…Œμ΄λ„ˆμ— λŒ€ν•œ λ©”νŠΈλ¦­μ„ μžλ™μœΌλ‘œ μˆ˜μ§‘ν•΄μ„œ μ˜€ν†  μŠ€μΌ€μΌλ§μ„ ν•˜λŠ” μž‘μ—…μ„ κ³΅μ‹μ μœΌλ‘œ μ œκ³΅ν•˜μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ ν˜„μž¬λŠ” μˆ˜λ™μ μœΌλ‘œ ncp μΈμŠ€ν„΄μŠ€λ₯Ό ν΄λŸ¬μŠ€ν„°λ§ν•˜κ³  μ„œλΉ„μŠ€μ˜ scale 을 늘리고 쀄여야 ν•©λ‹ˆλ‹€.

ν•˜μ§€λ§Œ λ©”νŠΈλ¦­ μˆ˜μ§‘κ³Ό μžλ™ μŠ€μΌ€μΌλ§μ„ ν•  수 μžˆλ„λ‘ 슀크립트λ₯Ό μž‘μ„±ν•˜λŠ” λ°©μ‹μœΌλ‘œ λ¦¬νŒ©ν† λ§ ν•˜μ—¬ μ˜€ν†  μŠ€μΌ€μΌλ§μ„ κ΅¬ν˜„ν•  μ˜ˆμ •μž…λ‹ˆλ‹€.