[Nginx] 로드밸런싱 개념 및 구축 - 2

parkjh9370·2022년 6월 4일
0

nginx.conf의 파일을 바꿔줬지만 동시 트래픽을 감당하기 위해서는 여러 상황을 고려해봐야한다.

Nginx 를 통한 로드밸런싱 설정은 차후에 시도 예정


동시 요청 트래픽 감당

성능 테스트 툴 중에 Apache Jmeter를 사용방법

JMeter사용법

이 문제점은 Nginx 자체 문제가 아니라 클라우드 컴퓨터 스펙 문제이기 때문에 자신의 클라우드 컴퓨터 스펙에 대한 이해와 개발 환경에 대한 이해가 필요하다.

ex)

CPU Core 2개, RAM 4G 컴퓨터를 서버로 사용
DB: mariaDB
API 개발 환경: Node.js

Node.js에서의 MariaDB 설정

여기서 connectionLimit이 중요하다!
해당 설정은 MariaDB에서 동시에 처리하고자 허용하는 요청의 개수를 뜻한다.
사진에는 300이지만 필자는 500으로 정해주었다.
그렇게 되면 동시에 500개까지 Connection을 할 수 있게 된다.

🤔 Connection??

API서버에서 DB에 SQL질의를 할 때마다 열리는 것이 Connection이다.
SQL질의를 할 때 1개씩 사용된다.

이를 이해하기 위해서 Pool이란 것을 이해해야한다.
Pool은 Node와 MariaDB가 연결되는 방식인데
이 Pool은 각 Connection을 담고 있는 공간으로 볼 수 있다.

👷‍♂️ 주의할 점

let conn;
try {
  conn = await mariadb.getConnection(); //pool connection
  const query = `SELECT * FROM persons`;
  
  const result = await conn.query(query);
  return result;
} catch (err) {
  throw err;
} finally {
  conn?.release(); // connection => pool
}

질의 SQL문을 만든다면 이렇게 만들게 될텐데 pool을 Connection했다면 끝날 때 release()를 해줘야한다.

반환 하지 않게 된다면 사용가능한 Connection이 -1개로 줄어들게 된다. 그래서 모든 SQL 질의에서 release()를 해줘야 한다.

Too many connections 에러!
그리고 Nginx의 설정이 mariadb보다 높게 되어 있다면 Too many connections 이슈를 보고 설정을 바꿔보자


Nginx 설정

  • 데이터의 흐름
    client => Nginx => WAS(node.js) => DB (MySQL)

Node와 MySQL이 500개의 요청을 처리할 수 있도록 했으니 앞단인 Nginx에서도 500개를 처리할 수 있도록 해야한다.

  • worker_connections 값 변경

1.설정 파일 들어가기

nano /etc/nginx/nginx.conf

2.worker_connections 값 변경

event{...} 지시자 안에 있다.

  • worker_processes: core 모듈 설정
    - 몇 개의 워커 프로세스를 생성할 것인지 지정하는 지시어
    - 1이면 하나의 코어만으로 요청을 처리한다는 뜻

  • auto로 설정
    - worker_connections: Worker가 실제로 처리할 Connection의 갯수이다.
    - 1024로 설정 => Worker당 1024개의 연결을 처리하겠다는 의미
    ✨ 최대 접속자 수 = worker_processes * worker_connections

이렇게 되면 동시 요청시 문제없이 처리할 수 있게 된다.


참조

https://velog.io/@kimjiwonpg98/Nginx-%EB%A1%9C%EB%93%9C%EB%B0%B8%EB%9F%B0%EC%8B%B1-%EA%B0%9C%EB%85%90-%EB%B0%8F-%EA%B5%AC%EC%B6%95-2

0개의 댓글