nginx tcp load balancing

tcp load balancing

db replication으로 구성한 n개의 db를 failover 를 사용하는법은 찾아보다가, 우연히 nginx에서 tcp load balancing을 사용할수있다는것을 알게되었다.
이전포스트 nginx load balancing 에서 http protocol의 load balancing을 살펴보았다면 이번 포스트에서는 tcp protocol 을 사용한 load balancing 을 소개하려한다.

nginx config

nginx http protocol load balancing을 구성해보았다면 무척이나 쉽게 느껴질것이다.
/etc/nginx/nginc.conf 를 다음과 같이 수정한다.
nginx를 설치하면 가장기본적으로 다음과 같이 설정되어있을것이다.
http protocol은 사용하지않을 것이므로 다음과같이 주석이나 삭제하고 stream 설정을 추가한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$ vi/etc/nginx/nginx.conf
...
# 삭제 또는 주석
# http {
# ...
# }
# 추가
stream {
upstream db {
server db1_host:db_port;
server db2_host:db_port;
}
server {
listen 3306;
proxy_pass db;
proxy_connect_timeout 1s; # detect failure quickly
}
}

다음과 같이 설정을 마친후 nginx를 reload한다.

1
$ nginx -s reload

해당 설정방법은 nginx document
https://www.nginx.com/blog/mysql-high-availability-with-nginx-plus-and-galera-cluster/
를 보고 참고하였으며, 생각보다 tcp load balancing을 사용하여 db 이중화를 구성하는 개발자분들이 많은것 같다.
nginx 를 통해 mysql workbench나 기타 dbms tool로 접속하면 정상적으로 접속되는것을 확인할수있다.

참고

docker를 통한 nginx구성은
https://hub.docker.com/r/setyourmindpark/debian-nginx/
를 참고하자.