[Docker] HAProxy๋ฅผ ์ด์šฉํ•œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ

๋ฐ˜์‘ํ˜•

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

 

 

What is HAProxy ?

์ด๋ฆ„๋งŒ ๋†“๊ณ  ๋ณด๋ฉด ํ”„๋ก์‹œ์˜ ์—ญํ• ์„ ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด์ธ ๋“ฏ ๋ณด์ž…๋‹ˆ๋‹ค. ๋งž์Šต๋‹ˆ๋‹ค. HAProxy์˜ ๋ณธ๋ž˜ ๊ธฐ๋Šฅ์€ Reverse Proxy ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด์ด๊ณ , ๋ณธ๋ž˜๋Š” High Availbility Proxy์˜ ์•ฝ์ž์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐ€์ง€๊ณ  TCP / HTTP Load Balancer๋กœ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

nginx๋ž‘ ๋‹ค๋ฅธ ์ ์€ ๋ฌด์—‡์ผ๊นŒ์š”? nginx์—์„œ๋„ ๋ฌผ๋ก  Reverse Proxy, Load Balancer ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€๋งŒ HAProxy๋Š” ์—ฌ๊ธฐ์— Active Health Check ๊ธฐ๋Šฅ์„ ๋ฌด๋ฃŒ๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. (nginx์—์„œ๋„ Active Health Check ๊ธฐ๋Šฅ์€ ์žˆ์ง€๋งŒ nginx plus์ธ ์œ ๋ฃŒ ๋ฒ„์ „์—์„œ๋งŒ ์ œ๊ณตํ•œ๋‹ค๋Š” ์ ์ด ์•„์‰ฌ์› ์ฃ .)

 

 

HAProxy์˜ ๋™์ž‘ ๋ฐฉ์‹

HAProxy๋Š”๊ธฐ๋ณธ์ ์œผ๋กœ Reverse Proxy ํ˜•ํƒœ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๋ณดํ†ต ํ‰๋ฒ”ํ•˜๊ฒŒ ๋ถ€๋ฅด๋Š” ํ”„๋ก์‹œ๋ผ๋Š” ๋‹จ์–ด๋Š” Forward Proxy๋ผ๊ณ  ํ•˜๋Š”๋ฐ, Forward Proxy๋Š” ์ถœ๋ฐœ์ง€(Source)์—์„œ ๋ชฉ์ ์ง€(Destination) ์‚ฌ์ด์— ์กด์žฌํ•˜๊ณ , ํด๋ผ์ด์–ธํŠธ ์•ž์— ์กด์žฌํ•˜๋Š” ๋…€์„์ž…๋‹ˆ๋‹ค. 

Reverse Proxy๋Š” ๊ทธ์˜ ๋ฐ˜๋Œ€๋ผ๊ณ  ๋ณด์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์‹ค์ œ ์„œ๋ฒ„ ์š”์ฒญ์— ๋Œ€ํ•ด ์„œ๋ฒ„ ์•ž ๋‹จ์— ์กด์žฌํ•˜์—ฌ ์„œ๋ฒ„๋กœ ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ ๋Œ€์‹  ๋ฐ›์•„ ์‹ค์ œ ์„œ๋ฒ„์— ์ „๋‹ฌํ•˜๊ณ , ์š”์ฒญํ•œ ๊ณณ์— ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ์ „๋‹ฌํ•˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ nginx๋ฅผ ์ด์šฉํ•ด ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ๊ตฌ์„ฑํ•  ๋•Œ๋„ ์ด์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ–ˆ์—ˆ์ฃ . HAProxy ๋˜ํ•œ ์ด์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

HAProxy์˜ ํ๋ฆ„์€ ์œ„์™€ ๊ฐ™์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ์ตœ์ดˆ ์ ‘๊ทผ์‹œ์—๋Š” ์ผ๋ฐ˜์ ์ธ HTTP ์š”์ฒญ์œผ๋กœ ์ „๋‹ฌํ•˜๋‹ค๊ฐ€, HAProxy๊ฐ€ ์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž์ž„์„ ์ธ์‹ํ•˜๊ณ , ์ด ์‚ฌ์šฉ์ž๊ฐ€ ์—ฐ๊ฒฐํ•œ ์ „์šฉ ์ธ์Šคํ„ด์Šค๋ฅผ ์ฟ ํ‚ค ์ด๋ฆ„์œผ๋กœ ์ „๋‹ฌํ•ด์ฃผ๊ณ , ์žฌ์š”์ฒญ์‹œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ฃผ์–ด์ฃผ๋Š” ์ฟ ํ‚ค๋ฅผ ๊ฐ€์ง€๊ณ  ์ฒ˜์Œ ์—ฐ๊ฒฐํ–ˆ๋˜ ์ธ์Šคํ„ด์Šค๋กœ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

์ˆœ์„œ๋Œ€๋กœ ๋‚˜์—ดํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ตœ์ดˆ ์ ‘์†์‹œ์—๋Š” ์ฟ ํ‚ค ์—†์ด ์ผ๋ฐ˜ ์š”์ฒญ(Request) ์ „๋‹ฌ
  • ์‘๋‹ต(Response)์‹œ ์ฟ ํ‚ค์— ์„œ๋ฒ„ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•œ ํ›„ ๋ฐ˜ํ™˜
  • ์žฌ์š”์ฒญ์‹œ์—๋Š” HAProxy์—์„œ ์ฟ ํ‚ค ์ •๋ณด ํ™•์ธ ํ›„, ์ตœ์ดˆ ์š”์ฒญ ์„œ๋ฒ„๋กœ ์ „๋‹ฌ
  • ๋‹ค์‹œ ์ ‘๊ทผ์‹œ์—๋Š” ์ฟ ํ‚ค ์ถ”๊ฐ€ ์—†์ด ์ „๋‹ฌ (ํด๋ผ์ด์•ˆํŠธ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ฟ ํ‚ค๋กœ ๋Œ€์ฒด)

์ด ์™ธ์—๋„ ๋‹ค์–‘ํ•œ ์˜ต์…˜๋“ค์ด ๋งŽ์ด ์กด์žฌํ•˜์ง€๋งŒ ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ๊ธฐ๋Šฅ๋งŒ ๋‹ค๋ฃจ๊ณ , ๊ทธ ์™ธ์˜ ๊ธฐ๋Šฅ๋“ค์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค๋ฅธ ํฌ์ŠคํŠธ์—์„œ ๋‹ค๋ค„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

How to install

HAProxy๋Š” Linux, OS X์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ์•„์‰ฝ๊ฒŒ๋„ Windows์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ด ๋‹จ์ ์ž…๋‹ˆ๋‹ค. RHEL์—์„œ ์‚ฌ์šฉํ•˜๋Š” YUM ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €, Ubuntu/Debian์—์„œ ์‚ฌ์šฉํ•˜๋Š” APT ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋ฅผ ์ด์šฉํ•ด HAProxy๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๊ณ , ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์—†๋Š” ํ™˜๊ฒฝ์—์„œ๋Š” Source ์„ค์น˜๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ๋Š” APT ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋ฅผ ์ด์šฉํ•˜์—ฌ HAProxy๋ฅผ ์„ค์น˜ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

$ sudo apt install haproxy

์œ„ ๋ช…๋ น์–ด๋กœ ์„ค์น˜๊ฐ€ ๋๋‚˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด Active ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

APT ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋กœ ์„ค์น˜ํ–ˆ์„ ๋•Œ, ์„ค์ •๊ฐ’์€ /etc/haproxy/haproxy.cfg ํŒŒ์ผ์ธ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ์„ธ๋ถ€ ์„ค์ •์„ ์œ„ํ•ด ์œ„ cfg ํŒŒ์ผ์„ ๊ฑด๋“œ๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

 

Configuration

HAProxy์˜ Configuration์€ ๋ณต์žกํ•˜๊ณ , ์ •๊ตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋งŒํผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์ด๋‚˜ ์ง€์›ํ•˜๋Š” ๋ถ€๋ถ„์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ๊ผญ ํ•„์š”ํ•˜๋ฉด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ํฌ์ŠคํŠธ์—์„œ๋Š” ๊ฐ„๋‹จํ•œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์— ๋Œ€ํ•ด์„œ๋งŒ ๋‹ค๋ฃฐ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ๊ฒƒ์„ ๋‹ค๋ฃจ์ง€ ์•Š๊ณ , ์ผ๋ถ€๋งŒ ๋‹ค๋ฃจ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ฒ˜์Œ ์„ค์น˜ํ•œ ๋’ค์—๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ defaults ๋ถ€๋ถ„๊ณผ global ๋ถ€๋ถ„์œผ๋กœ ์„ค์ •์ด ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. global ๋ถ€๋ถ„์€ HAProxy์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์ •์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, SSL ์„ค์ •, ์ปค๋„ฅ์…˜ ์ˆ˜ ๋“ฑ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์ฃ .

defaults์—์„œ๋Š” HAProxy์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์ •์ด ์•„๋‹Œ ๋ถ€๊ฐ€์ ์ธ ์„ค์ •์„ ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฃน๋ณ„๋กœ ๋‚˜๋ˆ ์„œ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ defaults์—์„œ๋Š” ๋ชจ๋“  ๊ทธ๋ฃน์ด ์ ์šฉ๋˜๋Š” ๊ตฌ๊ฐ„์œผ๋กœ ๋กœ๊ทธ์˜ ํฌ๋งท์ด๋‚˜, ์ปค๋„ฅ์…˜ ์œ ์ง€ ์˜ต์…˜ ๋“ฑ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€๋‚œ ํฌ์ŠคํŠธ์— ์ด์–ด์„œ ์šฐ๋ฆฌ๋Š” Spring boot Application์ด ๋งŒ๋“ค์–ด์ง„ Docker ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ์‹œ์ผœ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐ™์€ ์„œ๋น„์Šค๋ฅผ ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ 3๊ฐœ ๋งŒ๋“ค์—ˆ๊ณ , ์ด์— ๋Œ€ํ•œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, HAProxy์—์„œ๋Š” Health check ๊ธฐ๋Šฅ๋„ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์šฐ๋ฆฌ๋Š” ์ด ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜์—ฌ ํ•œ ๋ฒˆ ์„ค์ •์„ ์ง„ํ–‰ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

HAProxy์—์„œ๋Š” ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑํ•œ ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค๋“ค์˜ ์ƒํƒœ๋ฅผ ์›น์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋Š” stats ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. listen stats๋ฅผ ์„ค์ •ํ•˜๋ฉด ์›ํ•˜๋Š” ํฌํŠธ ์ฃผ์†Œ์— ์ ‘์†ํ•˜์—ฌ ์„œ๋น„์Šค์˜ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

๋งˆ์ง€๋ง‰์œผ๋กœ ์šฐ๋ฆฌ๊ฐ€ Docker์— ์˜ฌ๋ฆฐ ์ธ์Šคํ„ด์Šค๋ฅผ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ํ•  ์ˆ˜ ์žˆ๋„๋ก 80๋ฒˆ ํฌํŠธ ์ฃผ์†Œ๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜๊ณ , ๋ผ์šด๋“œ ๋กœ๋นˆ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•˜์—ฌ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ํ•ด์ค๋‹ˆ๋‹ค. (๊ฐ ํฌํŠธ ์ฃผ์†Œ๋กœ ์ •ํ™•ํžˆ ํ†ต์‹ ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.) ๊ทธ๋ฆฌ๊ณ  option์— httpchk๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ฐ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•ด Health Check๋ฅผ ์ง„ํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋“œ์‹œ ์œ ํšจํ•œ URI๋ฅผ ์ž…๋ ฅํ•ด์ค˜์•ผ ํ•˜๋ฉฐ, ์œ ํšจํ•˜์ง€ ์•Š์€ URI๋ฅผ ์ž…๋ ฅํ•  ๊ฒฝ์šฐ, ์ธ์Šคํ„ด์Šค๊ฐ€ ์ •์ƒ ๋™์ž‘ํ•˜๊ณ  ์žˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  HAProxy์—์„œ ์ฃฝ์€ ์ธ์Šคํ„ด์Šค๋กœ ํ™•์ธํ•˜๊ฒŒ ๋˜๋ฉฐ ์ ‘์†์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

$ haproxy -f /etc/haproxy/haproxy.cfg -c

์„ค์ •์„ ์™„๋ฃŒํ•œ ๋’ค์—๋Š” ์„ค์ • ๊ฒ€์‚ฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ํ†ตํ•ด ๋‚ด๊ฐ€ ๋งŒ๋“  ์„ค์ • ํŒŒ์ผ์— ๋ฌธ๋ฒ• ์˜ค๋ฅ˜ ๋“ฑ์ด ์—†๋Š”์ง€๋ฅผ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. nginx์—์„œ๋„ nginx -t ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•˜๋Š”๋ฐ, HAProxy์—์„œ๋„ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š”๊ตฐ์š”.

# systemctl reload haproxy.service

๋ฌธ๋ฒ• ๊ฒ€์‚ฌ ํ›„ ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๋ฉด, haproxy ์„œ๋น„์Šค ๋ฐ๋ชฌ์„ reload ์‹œ์ผœ์ค๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด HAProxy Master ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žฌ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ http://localhost:9000/haproxy_stats ํŽ˜์ด์ง€๋กœ ์ ‘์†ํ•˜๋ฉด, ์œ„์™€ ๊ฐ™์ด ์šฐ๋ฆฌ๊ฐ€ ์„ค์ •ํ•œ ์ปจํ…Œ์ด๋„ˆ๋“ค์˜ ์ƒํƒœ๊ฐ€ UP ์ƒํƒœ์ธ์ง€, DOWN ์ƒํƒœ์ธ์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

Using Docker Swarm

์šฐ๋ฆฌ๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค๊ณ , ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑํ•˜๋Š” ๊ณผ์ •์„ ๋ชจ๋‘ ์ˆ˜๋™์œผ๋กœ ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€๋Š” 3๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋งŒ์„ ์ƒ์„ฑํ•˜์—ฌ ์ง„ํ–‰ํ•˜์˜€๊ณ , ๊ทธ๋žฌ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ๊ณผ์ •์ด ๊ทธ๋‹ค์ง€ ๋งŽ์€ ์†์ด ๊ฐ€์ง€ ์•Š์•˜๊ณ , ์ž˜ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ๊ฐ™์€ ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค๋ฅผ ์ปจํ…Œ์ด๋„ˆ๋กœ ์ˆ˜์‹ญ๊ฐœ๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค๋ฉด, ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์ข‹์„๊นŒ์š”? ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์€ docker ๋ช…๋ น์–ด๋ฅผ ์‰˜ ์Šคํฌ๋ฆฝํŒ…ํ•˜์—ฌ ๋ฐ˜๋ณต ์ž‘์—…์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋งŒ์•ฝ HAProxy๋„ ๋ฆฌ์–ผ ์ธ์Šคํ„ด์Šค์—์„œ ๋Œ๋ฆฌ์ง€ ์•Š๊ณ  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค๋ฉด, ๊ทธ ์„ค์ •๊นŒ์ง€ ๋ชจ๋‘ ํ•ด์ค˜์•ผ ํ• ํ…๋ฐ, ์ด๋Š” ์‰˜ ์Šคํฌ๋ฆฝํŒ…๋งŒ์œผ๋กœ๋Š” ์‰ฝ์ง€ ์•Š๊ฒ ์ฃ ?

์ด๋Ÿด ๋•Œ๋Š” Docker compose๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•œ ์„ค์ •์„ ์ง€์ •ํ•˜๊ณ , ์›ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ ๊ฐฏ์ˆ˜๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์œ„์—์„œ ๋‹ค๋ค˜๋˜ ๊ฒƒ๋ณด๋‹ค ๋” ์‰ฝ๊ฒŒ HAProxy๋ฅผ ์ด์šฉํ•ด ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ํ•œ ๋ฒˆ ์ฐธ๊ณ ํ•ด๋ณด์‹œ๋Š” ๊ฒƒ๋„ ๋‚˜์˜์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™๋„ค์š”. (ํ•˜์ง€๋งŒ ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์—„์ฒญ๋‚œ ๋Ÿฌ๋‹ ์ปค๋ธŒ๊ฐ€ ๋’ค๋”ฐ๋ฆ…๋‹ˆ๋‹ค.)

docker-compose.yml ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ ํ›„, ์œ„์™€ ๊ฐ™์ด ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ์„ค์ • ํŒŒ์ผ๋งŒ ๋ด์„œ๋Š” ๋ฌด์Šจ ๋‚ด์šฉ์ธ์ง€ ์ž˜ ๋ชจ๋ฅผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜์”ฉ ์‚ดํŽด๋ณด๋„๋ก ํ•˜์ฃ .

services ๋ฐ‘์œผ๋กœ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์šด์˜ํ•  ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์„ค์ •ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฆ„์€ ์ž์œ ๋กญ๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ณ , ์šฐ๋ฆฌ๋Š” dockerexample์ด๋ผ๋Š” ์„œ๋น„์Šค์™€ proxy ์ด๋ ‡๊ฒŒ ๋‘ ๊ฐ€์ง€๋ฅผ ์ƒ์„ฑํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด, ํ•œ ์„œ๋น„์Šค ์•„๋ž˜๋กœ ๋„คํŠธ์›Œํฌ ์˜์—ญ์ด ์ƒ์„ฑ๋˜๋ฉฐ, ์ด ์„œ๋น„์Šค์— ๋Œ€ํ•œ ๊ณต๊ฐ„์ด ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์ง€๋Š” ์›๋ฆฌ์™€ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.

๋ฐ”๋กœ ์ด๋Ÿฐ ํ˜•ํƒœ๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด์ฃ . ์—ฌ๊ธฐ์—์„œ Proxy๊ฐ€ ์ž…๊ตฌ๊ฐ€ ๋˜๊ณ , ๊ทธ ์ž…๊ตฌ์— ์˜ํ•ด ์ปจํ…Œ์ด๋„ˆ ์„œ๋น„์Šค๋“ค์ด ๋ถ€ํ•˜ ๋ถ„์‚ฐ ํ˜•ํƒœ๋กœ ์„œ๋น„์Šคํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ Ingress Load Balancing์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์™ธ๋ถ€์—์„œ ๋‚ด๋ถ€ ๋„คํŠธ์›Œํฌ๋กœ ์ ‘์†ํ•  ๋•Œ์˜ ๋ฐฉ์นจ์„ ๋งํ•˜๋Š” ๊ฒƒ์ด์ฃ 

# docker swarm init
# docker stack deploy --compose-file=docker-compose.yml tutorial

Docker์—์„œ ๋„คํŠธ์›Œํฌ, ์„œ๋น„์Šค ๋“ฑ์˜ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๋ฅผ Stack์ด๋ผ๊ณ  ๋ถ€๋ฅด๋Š”๋ฐ, ์Šคํƒ์„ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์–ด๊ฐ€ ๋ฐ”๋กœ docker stack ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค. ๋ณดํ†ต์€ ๋ช…๋ น์–ด ์•ˆ์— ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‹ค ๋„ฃ์–ด์•ผ ํ•˜์ง€๋งŒ, docker-compose.yml ํŒŒ์ผ ๋“ฑ์œผ๋กœ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ์“ด tutorial์€ ์ด ๊ทธ๋ฃน์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

์ €๋Š” Replica์˜ ๊ฐฏ์ˆ˜๋ฅผ 5๊ฐœ๋กœ ์„ค์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ž์‹ ์˜ ์ธ์Šคํ„ด์Šค ์„ฑ๋Šฅ์— ๋”ฐ๋ผ ๊ฐฏ์ˆ˜๋ฅผ ์„ค์ •ํ•ด์•ผํ•˜๋ฏ€๋กœ ๊ฐ€๋Šฅํ•œ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋งŽ๋‹ค๋ฉด 20๊ฐœ๋กœ ์„ค์ •ํ•ด๋„ ๋˜๊ฒ ์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด, Docker์—์„œ Out of Memory ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ด์— ๋งž์ถฐ ์ง€์ •ํ•ด์ฃผ์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค.

docker ps ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด 5๊ฐœ์˜ ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค์™€ ํ”„๋ก์‹œ ์ธ์Šคํ„ด์Šค 1๊ฐœ๊ฐ€  ์ƒ์„ฑ๋˜์—ˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

๋งˆ์น˜๋ฉฐ...

HAProxy๋ฅผ ์ด์šฉํ•œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์€ Health Check๋ฅผ ํ†ตํ•ด์„œ ์ธ์Šคํ„ด์Šค์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๋Š” ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์„œ๋น„์Šค์˜ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์ง€์†์ ์œผ๋กœ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ Docker Swarm์„ ์ถ”๊ฐ€๋กœ ์ด์šฉํ•˜์—ฌ DockerCloud์—์„œ ์ œ๊ณตํ•˜๋Š” HAProxy ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ด์šฉํ•œ๋‹ค๋Š” ์ ์€ ๋ณต์žกํ•œ HAProxy ์„ค์ • ์—†์ด๋„ ์‰ฝ๊ฒŒ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

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

๊ทธ๋ž˜๋„ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ํˆด์„ ์‚ฌ์šฉํ•œ ๋ฐฉ๋ฒ• ํ†ตํ•ด ์ˆ˜๋™์œผ๋กœ Docker ๋„คํŠธ์›Œํฌ ์„ค์ • ๋“ฑ์„ ์ผ์ผ์ด ํ•˜์ง€ ์•Š์•„๋„ YAML ํŒŒ์ผ์„ ํ†ตํ•ด์„œ ํ•œ ๋ฒˆ์— ์ผ๊ด„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๋ถ€๋ถ„์€ ๊ต‰์žฅํžˆ ํŽธํ–ˆ๋˜ ๋ถ€๋ถ„์ธ ๊ฒƒ ๊ฐ™๋„ค์š” ^^;

 

 

์ฐธ์กฐ: https://d2.naver.com/helloworld/284659

๋ฐ˜์‘ํ˜•
TAGS.

Tistory Comments