<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Load Balancer on Joonlog</title><link>https://joonlog.github.io/categories/load-balancer/</link><description>Recent content in Load Balancer on Joonlog</description><generator>Hugo -- gohugo.io</generator><language>ko-kr</language><lastBuildDate>Sun, 14 Dec 2025 09:00:00 +0900</lastBuildDate><atom:link href="https://joonlog.github.io/categories/load-balancer/index.xml" rel="self" type="application/rss+xml"/><item><title>NCP에서 NLB 구성 후 503 발생 TroubleShooting</title><link>https://joonlog.github.io/p/ncp%EC%97%90%EC%84%9C-nlb-%EA%B5%AC%EC%84%B1-%ED%9B%84-503-%EB%B0%9C%EC%83%9D-troubleshooting/</link><pubDate>Sun, 14 Dec 2025 09:00:00 +0900</pubDate><guid>https://joonlog.github.io/p/ncp%EC%97%90%EC%84%9C-nlb-%EA%B5%AC%EC%84%B1-%ED%9B%84-503-%EB%B0%9C%EC%83%9D-troubleshooting/</guid><description>&lt;blockquote&gt;
&lt;p&gt;NLB 사용 시 Source IP 유지로 인해 발생한 ACG 방화벽 정책 이슈 해결&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="문제-상황"&gt;문제 상황
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;NCP에서 WEB → NLB → WAS 구조로 서비스 구성&lt;/li&gt;
&lt;li&gt;구축 단계에서는 아웃바운드 ANY OPEN으로 사이트 정상 동작&lt;/li&gt;
&lt;li&gt;운영 전환을 위해 아웃바운드 제한하니 사이트에서 503 오류 발생&lt;/li&gt;
&lt;li&gt;인바운드는 그대로였으므로 아웃바운드 정책 문제로 확인
&lt;ul&gt;
&lt;li&gt;WEB 서버에서 NLB의 Private IP로 아웃바운드를 허용했던 상황&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="원인-분석"&gt;원인 분석
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;WAS에서 tcpdump 확인
&lt;ul&gt;
&lt;li&gt;Source IP가 NLB Private IP일 줄 알았으나, 덤프 확인 시 WEB 서버 Private IP로 출력됨
&lt;ul&gt;
&lt;li&gt;트래픽을 단순 포워딩만 하고 클라이언트 IP를 그대로 전달&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;결과적으로 WAS는 NLB가 아닌 WEB 서버와 직접 통신하는 형태가 됨&lt;/li&gt;
&lt;li&gt;동작 방식은 AWS에서의 NLB도 동일하며 L4 LB의 정상적인 구조로 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="조치"&gt;조치
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;WEB 서버의 아웃바운드에 WAS 서버의 Private IP 추가 후 정상 동작 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="결론"&gt;결론
&lt;/h3&gt;&lt;p&gt;L4 LB인 NLB NAT를 하지 않기 때문에 WAS는 항상 앞단 서버의 Real IP를 보게 된다.&lt;/p&gt;
&lt;p&gt;따라서 ACG 정책도 NLB가 아닌 실제 통신 경로(WEB → WAS) 기반으로 설정해야 한다.&lt;/p&gt;</description></item><item><title>HAproxy 동시 재기동 오류 TroubleShooting</title><link>https://joonlog.github.io/p/haproxy-%EB%8F%99%EC%8B%9C-%EC%9E%AC%EA%B8%B0%EB%8F%99-%EC%98%A4%EB%A5%98-troubleshooting/</link><pubDate>Tue, 16 Sep 2025 09:00:00 +0900</pubDate><guid>https://joonlog.github.io/p/haproxy-%EB%8F%99%EC%8B%9C-%EC%9E%AC%EA%B8%B0%EB%8F%99-%EC%98%A4%EB%A5%98-troubleshooting/</guid><description>&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;두 서버의 HAProxy를 동시에 재기동하는 과정에서 VIP FAULT 현상이 발생&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;keepalived/corosync/pacemaker 같은 클러스터 프로세스가 VIP 소유권을 제어하는 앱에서 자주 있는 일&lt;/li&gt;
&lt;li&gt;VIP(Virtual IP) 소유권 충돌이 발생하여 이로 인해 VIP가 정상적으로 할당되지 않고 모두 FAULT 상태로 전환 이후 BACKUP 상태로 변경됨&lt;/li&gt;
&lt;li&gt;이후 순차적으로 keepalived를 재기동해서 정상적으로 Master 상태로 전환 확인
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;systemctl restart keepalived&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;위 현상 방지하기 위해 한 HAproZxy 재기동 후, 재기동하지 않은 서버가 MASTER 승격되었는지, VIP 활성화 되었는지 확인 필수&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# HAProxy 재기동 시 로그&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Reloading HAProxy Load Balancer...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Stopping proxy haproxy-ssl...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Stopping proxy haproxy...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Keepalived_vrrp&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="c1"&gt;####]: (VI_1) received an invalid passwd!&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Keepalived_vrrp&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="c1"&gt;####]: (VI_1) Dropping received VRRP packet...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Keepalived_vrrp&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="c1"&gt;####]: VRRP_Instance(VI_1) Entering FAULT STATE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Keepalived_vrrp&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="c1"&gt;####]: VRRP_Script(chk_haproxy) failed&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Keepalived_vrrp&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="c1"&gt;####]: VRRP_Instance(VI_1) Now in FAULT state&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Keepalived_vrrp&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="c1"&gt;####]: VRRP_Instance(VI_1) Entering BACKUP STATE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# haproxy_test.sh 실행 결과&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/keepalived/haproxy_test.sh exited with status &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/keepalived/haproxy_test.sh exited with status &lt;span class="m"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# BACKUP 전환 확인&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Keepalived_vrrp&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="c1"&gt;####]: VRRP_Instance(VI_1) Entering BACKUP STATE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>