CentOS์— HAProxy ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์„ค์น˜

๊ธฐ์‚ฌ์˜ ๋ฒˆ์—ญ์€ ๊ณผ์ • ์‹œ์ž‘ ์ „๋‚ ์— ์ค€๋น„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. "๋ฆฌ๋ˆ…์Šค ๊ด€๋ฆฌ์ž. ๊ฐ€์ƒํ™” ๋ฐ ํด๋Ÿฌ์Šคํ„ฐ๋ง"

CentOS์— HAProxy ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์„ค์น˜

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

HAProxy๋Š” ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ์„ ์ตœ์ ํ™”ํ•˜๊ณ , ์ฒ˜๋ฆฌ๋Ÿ‰์„ ์ตœ๋Œ€ํ™”ํ•˜๊ณ , ์‘๋‹ต ์‹œ๊ฐ„์„ ์ตœ์†Œํ™”ํ•˜๊ณ , ๊ฐœ๋ณ„ ๋ฆฌ์†Œ์Šค์˜ ๊ณผ๋ถ€ํ•˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ์—์„œ ์ค‘์ ์ ์œผ๋กœ ๋‹ค๋ฃฐ CentOS 8๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ Linux ๋ฐฐํฌํŒ๊ณผ ์‹œ์Šคํ…œ์— ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ๋น„์•ˆ 8 ะธ ์šฐ๋ถ„ํˆฌ 16.

CentOS์— HAProxy ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์„ค์น˜

HAProxy๋Š” ํŠนํžˆ ํŠธ๋ž˜ํ”ฝ์ด ๋งค์šฐ ๋งŽ์€ ์›น์‚ฌ์ดํŠธ์— ์ ํ•ฉํ•˜๋ฏ€๋กœ ๋‹ค์ค‘ ์„œ๋ฒ„ ์›น ์„œ๋น„์Šค ๊ตฌ์„ฑ์˜ ์•ˆ์ •์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฐ ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” HAProxy๋ฅผ CentOS 8 ํด๋ผ์šฐ๋“œ ํ˜ธ์ŠคํŠธ์˜ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋กœ ์„ค์ •ํ•œ ๋‹ค์Œ ํŠธ๋ž˜ํ”ฝ์„ ์›น ์„œ๋ฒ„๋กœ ๋ผ์šฐํŒ…ํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์ตœ์ƒ์˜ ๊ฒฐ๊ณผ๋ฅผ ์–ป์œผ๋ ค๋ฉด ์ตœ์†Œํ•œ ๋‘ ๋Œ€ ์ด์ƒ์˜ ์›น ์„œ๋ฒ„์™€ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ์„œ๋ฒ„๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์›น ์„œ๋ฒ„ ๊ฐ„์˜ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ํ…Œ์ŠคํŠธํ•˜๋ ค๋ฉด ์ตœ์†Œํ•œ nginx ๋˜๋Š” httpd์™€ ๊ฐ™์€ ๊ธฐ๋ณธ ์›น ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

CentOS 8์— HAProxy ์„ค์น˜

HAProxy๋Š” ๋น ๋ฅด๊ฒŒ ๋ฐœ์ „ํ•˜๋Š” ์˜คํ”ˆ ์†Œ์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๊ธฐ ๋•Œ๋ฌธ์— ํ‘œ์ค€ CentOS ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฐํฌํŒ์ด ์ตœ์‹  ๋ฒ„์ „์ด ์•„๋‹ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ฒ„์ „์„ ํ™•์ธํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์„ธ์š”.

sudo yum info haproxy

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

์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” ๊ฐ€์ด๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋‹น์‹œ ํ‘œ์ค€ ์ €์žฅ์†Œ์—์„œ ์•„์ง ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์—ˆ๋˜ ์ตœ์‹  ์•ˆ์ • ๋ฒ„์ „ 2.0์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ์›๋ณธ ์†Œ์Šค์—์„œ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋จผ์ € ํ”„๋กœ๊ทธ๋žจ์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์ปดํŒŒ์ผํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์กฐ๊ฑด์„ ์ถฉ์กฑํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

sudo yum install gcc pcre-devel tar make -y

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

wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gz

๋‹ค์šด๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์•„๋ž˜ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ์„ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.

tar xzvf ~/haproxy.tar.gz -C ~/

์••์ถ•์„ ํ‘ผ ์†Œ์Šค ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

cd ~/haproxy-2.0.7

๊ทธ๋Ÿฐ ๋‹ค์Œ ์‹œ์Šคํ…œ์— ๋งž๊ฒŒ ํ”„๋กœ๊ทธ๋žจ์„ ์ปดํŒŒ์ผํ•˜์‹ญ์‹œ์˜ค.

make TARGET=linux-glibc

๋งˆ์ง€๋ง‰์œผ๋กœ HAProxy ์ž์ฒด๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

sudo make install

์ด์ œ HAProxy๊ฐ€ ์„ค์น˜๋˜์—ˆ์ง€๋งŒ ์ž‘๋™ํ•˜๋ ค๋ฉด ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€ ์กฐ์ž‘์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ณ„์†ํ•ด์„œ ์•„๋ž˜์˜ ์†Œํ”„ํŠธ์›จ์–ด์™€ ์„œ๋น„์Šค๋ฅผ ์„ค์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์„œ๋ฒ„์— HAProxy ์„ค์ •

์ด์ œ HAProxy ํ•ญ๋ชฉ์— ๋Œ€ํ•ด ๋‹ค์Œ ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ฐ ํ†ต๊ณ„ ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

sudo mkdir -p /etc/haproxy
sudo mkdir -p /var/lib/haproxy 
sudo touch /var/lib/haproxy/stats

์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๋กœ HAProxy ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฐ”์ด๋„ˆ๋ฆฌ์— ๋Œ€ํ•œ ๊ธฐํ˜ธ ๋งํฌ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

sudo ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy

์‹œ์Šคํ…œ์— ํ”„๋ก์‹œ๋ฅผ ์„œ๋น„์Šค๋กœ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ์˜ˆ์ œ์˜ haproxy.init ํŒŒ์ผ์„ /etc/init.d ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋ณต์‚ฌํ•˜์„ธ์š”. ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ํŒŒ์ผ ๊ถŒํ•œ์„ ํŽธ์ง‘ํ•œ ๋‹ค์Œ systemd ๋ฐ๋ชฌ์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

sudo cp ~/haproxy-2.0.7/examples/haproxy.init /etc/init.d/haproxy
sudo chmod 755 /etc/init.d/haproxy
sudo systemctl daemon-reload

๋˜ํ•œ ์‹œ์Šคํ…œ์ด ์‹œ์ž‘๋  ๋•Œ ์„œ๋น„์Šค๊ฐ€ ์ž๋™์œผ๋กœ ๋‹ค์‹œ ์‹œ์ž‘๋˜๋„๋ก ํ—ˆ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

sudo chkconfig haproxy on

ํŽธ์˜๋ฅผ ์œ„ํ•ด HAProxy๋ฅผ ์‹คํ–‰ํ•  ์ƒˆ ์‚ฌ์šฉ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๋„ ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค.

sudo useradd -r haproxy

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์น˜๋œ ๋ฒ„์ „ ๋ฒˆํ˜ธ๋ฅผ ๋‹ค์‹œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

haproxy -v
HA-Proxy version 2.0.7 2019/09/27 - https://haproxy.org/

์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ ์œ„์˜ ์ถœ๋ ฅ ์˜ˆ์— ํ‘œ์‹œ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ฒ„์ „์€ 2.0.7์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ CentOS 8์˜ ๊ธฐ๋ณธ ๋ฐฉํ™”๋ฒฝ์€ ์ด ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ์ƒ๋‹นํžˆ ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ์„œ๋น„์Šค๋ฅผ ํ—ˆ์šฉํ•˜๊ณ  ๋ฐฉํ™”๋ฒฝ์„ ์žฌ์„ค์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-port=8181/tcp
sudo firewall-cmd --reload

๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์„ค์ •

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

์ด๋Š” ์„ค์ •์„ ์ •์˜ํ•˜๋Š” /etc/haproxy/haproxy.cfg ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์—ฌ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. HAProxy ๊ตฌ์„ฑ ์˜ต์…˜์— ๋Œ€ํ•ด ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œ ํŽ˜์ด์ง€์—์„œ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๋” ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด.

์ „์†ก ๊ณ„์ธต(๊ณ„์ธต 4)์—์„œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ

๊ธฐ๋ณธ ์„ค์ •๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. vi ์•„๋ž˜ ๋ช…๋ น์œผ๋กœ :

sudo vi /etc/haproxy/haproxy.cfg

ํŒŒ์ผ์— ๋‹ค์Œ ์„น์…˜์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ”๊พธ๋‹ค ์„œ๋ฒ„ ์ด๋ฆ„ ํ†ต๊ณ„ ํŽ˜์ด์ง€์—์„œ ์„œ๋ฒ„๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋Š” ํ•ญ๋ชฉ ๋ฐ ๊ฐœ์ธ_ip โ€” ์›น ํŠธ๋ž˜ํ”ฝ์„ ์ „๋‹ฌํ•˜๋ ค๋Š” ์„œ๋ฒ„์˜ ๊ฐœ์ธ IP ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค. ๊ฐœ์ธ IP ์ฃผ์†Œ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. UpCloud ์ œ์–ดํŒ์—์„œ ๊ทธ๋ฆฌ๊ณ  ํƒญ์—์„œ ์‚ฌ์„ค๋ง ๋ฉ”๋‰ด์—์„œ ๋„คํŠธ์›Œํฌ.

global
   log /dev/log local0
   log /dev/log local1 notice
   chroot /var/lib/haproxy
   stats timeout 30s
   user haproxy
   group haproxy
   daemon

defaults
   log global
   mode http
   option httplog
   option dontlognull
   timeout connect 5000
   timeout client 50000
   timeout server 50000

frontend http_front
   bind *:80
   stats uri /haproxy?stats
   default_backend http_back

backend http_back
   balance roundrobin
   server server_name1 private_ip1:80 check
   server server_name2 private_ip2:80 check

์ด๋Š” ํฌํŠธ 4์—์„œ ์ˆ˜์‹  ๋Œ€๊ธฐํ•˜๋Š” http_front๋ผ๋Š” ์™ธ๋ถ€ ์ด๋ฆ„์˜ ์ „์†ก ๊ณ„์ธต ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ(๊ณ„์ธต 80)๋ฅผ ์ •์˜ํ•œ ๋‹ค์Œ http_back์ด๋ผ๋Š” ๊ธฐ๋ณธ ๋ฐฑ์—”๋“œ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ํ†ต๊ณ„ /haproxy?stats๋Š” ํ†ต๊ณ„ ํŽ˜์ด์ง€๋ฅผ ์ง€์ •๋œ ์ฃผ์†Œ์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์–‘ํ•œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜.

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

๊ท ํ˜• ์กฐ์ • ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ฐ ์—ฐ๊ฒฐ์ด ์ „๋‹ฌ๋˜๋Š” ๋ฐฑ์—”๋“œ์˜ ์„œ๋ฒ„๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์œ ์šฉํ•œ ์˜ต์…˜ ์ค‘ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค.

  • ๋ผ์šด๋“œ ๋กœ๋นˆ: ๊ฐ ์„œ๋ฒ„๋Š” ๋ฌด๊ฒŒ์— ๋”ฐ๋ผ ์ฐจ๋ก€๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์„œ๋ฒ„์˜ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„๋ฐฐ๋  ๋•Œ ๊ฐ€์žฅ ์›ํ™œํ•˜๊ณ  ๊ณต์ •ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋™์ ์ด๋ฏ€๋กœ ์„œ๋ฒ„์˜ ๋ฌด๊ฒŒ๋ฅผ ์ฆ‰์‹œ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ตœ์†Œ ์—ฐ๊ฒฐ: ์—ฐ๊ฒฐ ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ์ ์€ ์„œ๋ฒ„๊ฐ€ ์„ ํƒ๋ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ ๋กœ๋“œ๋ฅผ ๊ฐ€์ง„ ์„œ๋ฒ„ ๊ฐ„์— ๋ผ์šด๋“œ ๋กœ๋นˆ์ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ LDAP, SQL, TSE ๋“ฑ๊ณผ ๊ฐ™์€ ๊ธด ์„ธ์…˜์— ๊ถŒ์žฅ๋˜์ง€๋งŒ HTTP์™€ ๊ฐ™์€ ์งง์€ ์„ธ์…˜์—๋Š” ๊ทธ๋‹ค์ง€ ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋จผ์ €: ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์—ฐ๊ฒฐ ์Šฌ๋กฏ์ด ์žˆ๋Š” ์ฒซ ๋ฒˆ์งธ ์„œ๋ฒ„๊ฐ€ ์—ฐ๊ฒฐ์„ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ๊ฐ€์žฅ ๋‚ฎ์€ ์ˆซ์ž ID๋ถ€ํ„ฐ ๊ฐ€์žฅ ๋†’์€ ์ˆซ์ž ID๊นŒ์ง€ ์„ ํƒ๋˜๋ฉฐ, ๊ธฐ๋ณธ๊ฐ’์€ ํŒœ์˜ ์„œ๋ฒ„ ์œ„์น˜์ž…๋‹ˆ๋‹ค. ์„œ๋ฒ„๊ฐ€ maxconn์— ๋„๋‹ฌํ•˜๋ฉด ๋‹ค์Œ ์„œ๋ฒ„๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์ถœ์ฒ˜: ์†Œ์Šค IP ์ฃผ์†Œ๋Š” ํ•ด์‹œ๋˜๊ณ  ์‹คํ–‰ ์ค‘์ธ ์„œ๋ฒ„์˜ ์ด ๊ฐ€์ค‘์น˜๋กœ ๋‚˜๋ˆ„์–ด ์š”์ฒญ์„ ์ˆ˜์‹ ํ•  ์„œ๋ฒ„๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋™์ผํ•œ ํด๋ผ์ด์–ธํŠธ IP ์ฃผ์†Œ๊ฐ€ ํ•ญ์ƒ ๋™์ผํ•œ ์„œ๋ฒ„๋กœ ์ด๋™ํ•˜๊ณ  ์„œ๋ฒ„๋Š” ๋™์ผํ•˜๊ฒŒ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ˆ˜์ค€(๊ณ„์ธต 7)์—์„œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ์„ค์ •

๋˜ ๋‹ค๋ฅธ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์˜ต์…˜์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต(๊ณ„์ธต 7)์—์„œ ์‹คํ–‰๋˜๋„๋ก ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ผ๋ถ€๊ฐ€ ๋‹ค๋ฅธ ํ˜ธ์ŠคํŠธ์— ์žˆ์„ ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” URL ๋“ฑ์„ ํ†ตํ•ด ์—ฐ๊ฒฐ ์ „์†ก์„ ์ œํ•œํ•จ์œผ๋กœ์จ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ HAProxy ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์—ฝ๋‹ˆ๋‹ค.

sudo vi /etc/haproxy/haproxy.cfg

๊ทธ๋Ÿฐ ๋‹ค์Œ ์•„๋ž˜ ์˜ˆ์— ๋”ฐ๋ผ ํ”„๋ŸฐํŠธ์—”๋“œ ๋ฐ ๋ฐฑ์—”๋“œ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

frontend http_front
   bind *:80
   stats uri /haproxy?stats
   acl url_blog path_beg /blog
   use_backend blog_back if url_blog
   default_backend http_back

backend http_back
   balance roundrobin
   server server_name1 private_ip1:80 check
   server server_name2 private_ip2:80 check

backend blog_back
   server server_name3 private_ip3:80 check

ํ”„๋ŸฐํŠธ์—”๋“œ๋Š” ๊ฒฝ๋กœ๊ฐ€ /blog๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ชจ๋“  ์—ฐ๊ฒฐ์— ์ ์šฉ๋˜๋Š” url_blog๋ผ๋Š” ACL ๊ทœ์น™์„ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค. Use_backend๋Š” url_blog ์กฐ๊ฑด๊ณผ ์ผ์น˜ํ•˜๋Š” ์—ฐ๊ฒฐ์ด blog_back์ด๋ผ๋Š” ๋ฐฑ์—”๋“œ์—์„œ ์ œ๊ณต๋˜์–ด์•ผ ํ•˜๋ฉฐ ๋‹ค๋ฅธ ๋ชจ๋“  ์š”์ฒญ์€ ๊ธฐ๋ณธ ๋ฐฑ์—”๋“œ์—์„œ ์ฒ˜๋ฆฌ๋˜๋„๋ก ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

๋ฐฑ์—”๋“œ ์ธก์—์„œ ๊ตฌ์„ฑ์€ ๋‘ ๊ฐœ์˜ ์„œ๋ฒ„ ๊ทธ๋ฃน, ์ฆ‰ ์ด์ „๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ http_back๊ณผ example.com/blog์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ์„ ์ฒ˜๋ฆฌํ•˜๋Š” blog_back์ด๋ผ๋Š” ์ƒˆ ์„œ๋ฒ„ ๊ทธ๋ฃน์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์„ค์ •์„ ๋ณ€๊ฒฝํ•œ ํ›„ ํŒŒ์ผ์„ ์ €์žฅํ•˜๊ณ  ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ HAProxy๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

sudo systemctl restart haproxy

์‹œ์ž‘ํ•˜๋Š” ๋™์•ˆ ๊ฒฝ๊ณ ๋‚˜ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ฉด ํ•ด๋‹น ๊ตฌ์„ฑ์„ ํ™•์ธํ•˜๊ณ  ํ•„์š”ํ•œ ํŒŒ์ผ๊ณผ ํด๋”๋ฅผ ๋ชจ๋‘ ์ƒ์„ฑํ–ˆ๋Š”์ง€ ํ™•์ธํ•œ ๋‹ค์Œ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด ๋ณด์„ธ์š”.

์„ค์ • ํ…Œ์ŠคํŠธ

HAProxy๊ฐ€ ๊ตฌ์„ฑ๋˜์–ด ์‹คํ–‰๋˜๋ฉด ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์„œ๋ฒ„์˜ ๊ณต์šฉ IP ์ฃผ์†Œ๋ฅผ ์—ด๊ณ  ๋ฐฑ์—”๋“œ์— ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์—ฐ๊ฒฐ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์„ฑ์˜ stats uri ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ง€์ •๋œ ์ฃผ์†Œ์— ํ†ต๊ณ„ ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

http://load_balancer_public_ip/haproxy?stats

ํ†ต๊ณ„ ํŽ˜์ด์ง€๋ฅผ ๋กœ๋“œํ•  ๋•Œ ๋ชจ๋“  ์„œ๋ฒ„๊ฐ€ ๋…น์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋˜๋ฉด ์„ค์ •์ด ์„ฑ๊ณตํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค!

CentOS์— HAProxy ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์„ค์น˜

ํ†ต๊ณ„ ํŽ˜์ด์ง€์—๋Š” ๊ฐ€๋™/์ค‘๋‹จ ์‹œ๊ฐ„ ๋ฐ ์„ธ์…˜ ์ˆ˜๋ฅผ ํฌํ•จํ•˜์—ฌ ์›น ํ˜ธ์ŠคํŠธ๋ฅผ ์ถ”์ ํ•˜๋Š” ๋ฐ ์œ ์šฉํ•œ ๋ช‡ ๊ฐ€์ง€ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„๊ฐ€ ๋นจ๊ฐ„์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋˜๋ฉด ์„œ๋ฒ„๊ฐ€ ์ผœ์ ธ ์žˆ๊ณ  ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์‹œ์Šคํ…œ์—์„œ ํ•ด๋‹น ์„œ๋ฒ„๋ฅผ pingํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๊ฐ€ ์‘๋‹ตํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ HTTP ์—ฐ๊ฒฐ์ด ๋ฐฉํ™”๋ฒฝ์— ์˜ํ•ด ์ฐจ๋‹จ๋˜๊ณ  ์žˆ์ง€ ์•Š์€์ง€ ํ™•์ธํ•˜์„ธ์š”. ๋˜ํ•œ ์•„๋ž˜ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ HAProxy๊ฐ€ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

sudo systemctl status haproxy

๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ํ†ต๊ณ„ ํŽ˜์ด์ง€ ๋ณดํ˜ธํ•˜๊ธฐ

๊ทธ๋Ÿฌ๋‚˜ ํ†ต๊ณ„ ํŽ˜์ด์ง€๋ฅผ ๋‹จ์ˆœํžˆ ํ”„๋ŸฐํŠธ ์—”๋“œ์— ๋‚˜์—ดํ•œ๋‹ค๋ฉด ๋ชจ๋“  ์‚ฌ๋žŒ์ด ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ๊ณต๊ฐœ๋˜๋ฏ€๋กœ ์ด๋Š” ์ข‹์€ ์ƒ๊ฐ์ด ์•„๋‹ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  haproxy.cfg ํŒŒ์ผ ๋์— ์•„๋ž˜ ์˜ˆ์ œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ •์˜ ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๊พธ๋‹ค ์‚ฌ์šฉ์ž ์ด๋ฆ„ ะธ ์•”ํ˜ธ ์•ˆ์ „ํ•œ ๊ฒƒ์„ ์œ„ํ•ด:

listen stats
   bind *:8181
   stats enable
   stats uri /
   stats realm Haproxy Statistics
   stats auth username:password

์ƒˆ ๋ฆฌ์Šค๋„ˆ ๊ทธ๋ฃน์„ ์ถ”๊ฐ€ํ•œ ํ›„ ํ”„๋ŸฐํŠธ์—”๋“œ ๊ทธ๋ฃน์—์„œ ์ด์ „ ํ†ต๊ณ„ URI ๋งํฌ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์™„๋ฃŒ๋˜๋ฉด ํŒŒ์ผ์„ ์ €์žฅํ•˜๊ณ  HAProxy๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

sudo systemctl restart haproxy

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

http://load_balancer_public_ip:8181

๋ชจ๋“  ์„œ๋ฒ„๊ฐ€ ์—ฌ์ „ํžˆ ๋…น์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋˜๋Š”์ง€ ํ™•์ธํ•œ ๋‹ค์Œ ๋ธŒ๋ผ์šฐ์ €์—์„œ ํฌํŠธ ๋ฒˆํ˜ธ ์—†์ด ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ IP๋งŒ ์—ฝ๋‹ˆ๋‹ค.

http://load_balancer_public_ip/

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

๊ฒฐ๋ก : HAProxy ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ

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

์—ฌ๋Ÿฌ ํ˜ธ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›น ์„œ๋น„์Šค๋ฅผ ํ—ค๋“œ๋ฃธ์œผ๋กœ ๋ณดํ˜ธํ•˜๋ฉด ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์ž์ฒด๊ฐ€ ์—ฌ์ „ํžˆ ์‹คํŒจ ์ง€์ ์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์‚ฌ์ด์— ์œ ๋™ IP๋ฅผ ์„ค์น˜ํ•˜๋ฉด ๊ณ ๊ฐ€์šฉ์„ฑ์„ ๋”์šฑ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹น์‚ฌ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. UpCloud์˜ ์œ ๋™ IP ์ฃผ์†Œ์— ๋Œ€ํ•œ ๊ธฐ์‚ฌ.

์ฝ”์Šค์— ๋Œ€ํ•ด ๋” ์•Œ์•„๋ณด๊ธฐ "๋ฆฌ๋ˆ…์Šค ๊ด€๋ฆฌ์ž. ๊ฐ€์ƒํ™” ๋ฐ ํด๋Ÿฌ์Šคํ„ฐ๋ง"***

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€