Docker + HAProxy + WEB(httpd,nginx)
HAProxy에서 다중 port를 활용하여 Multi LoadBalancing 을 구현해 보겠다.
사실 Proxy서버는 WEB서버랑 분리되어 있는 것이 맞지만 편의상 안에 들어가 있게 설계해 보겠다.
HAProxy에 대한 자세한 설정 글은 이전 글을 참조하자.
설계도는 다음과 같다.
WEB 페이지는 Docker Container로 실행되는 a와 n 두쌍이 존재한다.
a1 컨테이너와 a2 컨테이너가 로드밸런싱하고
n1 컨테이너와 n2 컨테이너가 로드벨런싱 하는것이다.
Container 구성
설계도에 따라 Docker 1번 머신에서 설정한다.
pull httpd
pull nginx
docker run -itd -p 61080:80 --name a1 httpd:latest
docker run -itd -p 62080:80 --name a2 httpd:latest
docker run -itd -p 63080:80 --name n1 nginx
docker run -itd -p 63080:80 --name n2 nginx
WEB
설계도에 따라 Docker 1번 머신에서 설정한다.
먼저 html을 간단히 작성해서 각각의 컨테이너의 알맞는 아파치 위치로 넣어주자.
vi index.html 로 각각 4개의 파일을 만들어 다음과 같이 a1,a2,n1,n2에 넣어주면 된다 (이름은 알아서 수정 바람)
docker cp index.html a1:/usr/local/apache2/htdocs/index.html
docker cp index.html a2:/usr/local/apache2/htdocs/index.html
docker cp index.html n1:/usr/share/nginx/html/index.html
docker cp index.html n2:/usr/share/nginx/html/index.html
html 파일이 잘 작동하는 지 확인하자.
curl [컨테이너 ip주소]
HAProxy 설정
설계도에 따라 Docker 2번 머신에서 설정한다.
# vi /etc/haproxy/haproxy.cfg
HAProxy에서 다중 port를 다뤄줄 때는 다음과 같이 frontend- backend 를 여러쌍 만들어 주면 된다.
일단 토폴로지 대로 두쌍 만들었다. 중요한 부분은 빨간 줄을 쳤다.
의미를 이해하기 쉽도록 http 한쌍으로 예시를 들겠다.
80번포트로 오는 신호를 받는 프론트엔드를 [backend이름] 을 가진 백엔드와 이어준다.
frontend [아무이름] *: 80
default_backend [backend이름]
----------------------------------------------------------------------------------
----------------------------------------------------------------------------------
[backend이름] 을 가진 백엔드는 a1과 a2를 지정한 주소:포트로 로드밸런싱
backend [backend이름]
server a1 10.0.0.21:61080 check
server a2 10.0.0.21:62080 check
# systemctl restart haproxy
# firewall-cmd --permanent --add-port=80/tcp
# firewall-cmd --permanent --add-port=88/tcp
# firewall-cmd --reload
# netstat -natp 로 보면 80번과 88번이 떠있어야 한다.
VMware 세팅
외부 PC에서 접속하기 위해서 설정
65001 -> 프록시 80
65002 -> 프록시 88
HostPC 방화벽 설정
65001, 65002 접속 허용
외부 PC 결과
65001 접속 후 F5 새로고침.
a1과 a2 페이지가 번갈아 뜬다.
httpd 쪽은 로드밸런스가 잘 작동한다
65002 포트 접속 후 F5 새로고침
n1과 n2 페이지가 번갈아 뜬다.
nginx쪽도 로드밸런스가 잘 작동한다.
'Docker' 카테고리의 다른 글
Dockerfile (개인 프로젝트) (0) | 2022.12.21 |
---|---|
LXC (개인 프로젝트) (0) | 2022.12.19 |
Docker : Link (0) | 2022.12.09 |
Docker : Network (0) | 2022.12.09 |
Volume / bind mount ( Container Data 공유) (0) | 2022.12.09 |