[Docker] Nginx-tomcat 로드밸런서(Load Balancer) 구현하기 / feat.docker-compose
2021. 11. 17. 15:11ㆍServer
[Docker] Nginx-tomcat 로드밸런서(Load Balancer) 구현하기
# Tree
├── docker-compose.yml
├── mariadb
│ ├── config
│ └── data
├── nginx
│ └── config
│ └── nginx.conf
├── tomcat1
│ └── webapps
│ └── index.html
└── tomcat2
└── webapps
└── index.html
# docker-compose.yml
version: "3.3"
services:
nginx:
image: nginx
container_name: nginx
restart: always
ports:
- 80:80
volumes:
- ./nginx/config/nginx.conf:/etc/nginx/nginx.conf
tomcat1:
image: tomcat
container_name: tomcat1
ports:
- 10001:8080
volumes:
- ./tomcat1/webapps/:/usr/local/tomcat/webapps/ROOT
tomcat2:
image: tomcat
container_name: tomcat2
ports:
- 10002:8080
volumes:
- ./tomcat2/webapps/:/usr/local/tomcat/webapps/ROOT
1. nginx
- ports : nginx의 port입니다. 외부 80번 포트, container 80번 포트로 매칭하였습니다
- volumes : container 외부에서 관리하기 위해, 로드밸런싱 설정을 위해 nginx/config 폴더를 생성 후 nginx.conf 파일을 만들었습니다. nginx.conf 파일은 아래에서 설명드리겠습니다.
2. tomcat
톰캣 설정부분 입니다. 2개의 톰캣을 container로 만들며, 외부 port를 다르게 설정하며, container 포트는 동일하게 설정합니다.
# nginx/config/nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
# include /etc/nginx/conf.d/*.conf;
upstream tomcat {
server 서버ip:10001;
server 서버ip:10002;
# 예시) server 123.45.678.999:10001;
# 예시) server 123.45.678.999:10002;
}
server {
listen 80;
location / {
proxy_pass http://tomcat;
}
}
}
1. upstream {tomcat} : upstream을 설정해야 합니다.
서버ip:port로 지정할 수 있습니다.
nginx upstream이란?
> proxy_pass를 통해 nginx가 받은 Request를 넘겨 줄 서버를 정의
## 옵션
# 참조 : http://nginx.org/en/docs/stream/ngx_stream_upstream_module.html
########## ip_hash
upstream tomcat {
ip_hash;
server 서버ip:10001;
server 서버ip:10002;
}
ip_hash - ip로 분배한다. 만약 A라는 ip가 server1에 접속했으면 이후에도
server1에 계속 접속하게 되며, 한번 접속한 ip는 계속 같은 서버를 사용한다.
########## least_conn
upstream tomcat {
least_conn;
server 서버ip:10001;
server 서버ip:10002;
}
least_conn - 가중치를 고려하면서 연결된 접속자가 가장 적은 서버로 분배
########## least_time
upstream tomcat {
least_time;
server 서버ip:10001;
server 서버ip:10002;
}
least_time - 연결된 접속자가 가장 적으면서 + 평균 응답시간이 가장 적은 쪽으로 분배
# 심플한 HTML 작성
## tomcat1/webapps/index.html
## tomcat2/webapps/index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
tomcat1 (tomcat2에서는 tomcat2)
</body>
</html>
# docker-compose up -d
# 웹실행
새로고침을 하면 tomcat1과 tomcat2가 번갈아 가면서 접속이 되는것을 확인할 수 있다.
# 참고
https://velog.io/@ruddms936/%EB%A1%9C%EB%93%9C%EB%B0%B8%EB%9F%B0%EC%8B%B1
'Server' 카테고리의 다른 글
[H2 DB] H2 Database & Spring Boot 무설치 연동 방법 (0) | 2022.07.17 |
---|---|
[H2 DB] H2 Database & Spring Boot 연동 방법 (0) | 2022.02.28 |
[Tomcat] Spring Boot 프로젝트 Tomcat 10에서 배포하기 (1) | 2021.12.01 |
아파치 톰캣(Apache Tomcat), 아파치(Apache), 톰캣(Tomcat), Nginx 차이 알아보기(Web Server, Was) (0) | 2021.11.09 |
Ubuntu 서버 시간, timezone 변경하기 (0) | 2018.07.12 |