RDS 운영 중 다음과 같은 메시지가 발생하면서 RDS가 먹통이 될 때가 있다.
"Too many connections"
프로젝트 배포시에 해당 오류가 발생하거나 RDS를 이용하지 못하게 되는 경우 해결 방법을 알아보자.
결론적으로 말하면 max_connections와 wait_timeout 값을 조정하면 된다. 해당 값들은 AWS Console에서 변경 가능하다.
max_connections: 클라이언트가 동시에 접속할 수 있는 커넥션 수
wait_timeout: 사용하지 않는 커넥션이 닫히는 데까지 서버가 대기하는 시간
AWS Console -> RDS -> 파라미터 그룹 으로 이동하자.
파라미터 그룹은 max_connections와 같은 DB 관리에 필요한 파라미터들을 모아놓은 그룹이다.
처음엔 default 파라미터 그룹만 존재한다. 특별히 파라미터 그룹을 생성하지 않았다면 현재 RDS는 default 파라미터 그룹을 따르고 있을 것이다.
default 파라미터 그룹의 파라미터 값을 변경할 수는 없기 때문에 우측 상단의 "파라미터 그룹 생성"을 클릭해 새로운 파라미터 그룹을 만든다.
새로운 파라미터 그룹의 이름을 지정한다. RDS가 여러 개라면 헷갈리지 않게 파라미터 그룹 이름은 현재 RDS의 이름을 함께 붙여주는 것이 좋다.
이제 새로 생성한 파라미터 그룹을 클릭해 파라미터를 편집해보자.
검색창에 max_connections를 입력해보면, LEAST({DBInstanceClassMemory/25165760},12000) 이런 요상한 값이 들어 있다.
해당 값은 RDS 메모리에 따라 달라지는데, db.t3.micro 기준 max_connections는 31이 나온다.
spring boot 프로젝트 당 default connection 값이 10이다. RDS에 프로젝트 3개만 붙여도 커넥션이 터지는 경우가 발생하는 것이기 때문에, max_connections를 조정할 필요가 있다.
나는 넉넉하게 300으로 잡았지만, 각자 상황에 따라 더 줄이거나 늘리거나 하면 된다.
다음은 wait_timeout을 조정한다. wait_timeout은 default로 기본값이 8시간이기 때문에, 클라이언트가 실제로 이용하지 않더라도 8시간 동안 DB는 계속 커넥션을 붙잡고 있다. 이는 굉장히 비효율적이기 때문에, 조정해줄 필요가 있다.
나는 180초가 적당한 것 같아 180으로 조정했다.
이제 새로운 파라미터 그룹을 기존 RDS에 적용해보자.
데이터베이스 -> 원하는 DB 선택 -> 수정
아래로 쭉 내리다 보면 추가 구성에서 파라미터 그룹을 변경할 수 있다.
변경 했으면 반드시 RDS를 재부팅해줘야 한다. 운영 중인 DB의 경우 새벽시간을 활용하거나, 따로 보조 데이터베이스를 두고 재부팅하는 것을 권장한다.
재부팅이 끝나면 파라미터 그룹에서 조정한 파라미터 값들이 잘 반영되어 있을 것이다.
RDS 커넥션 관리를 해봤다. 그냥 프로젝트를 개발하는 것을 넘어 실제 서비스를 운영하다보면 커넥션과 관련한 여러 이슈들이 생긴다. 틈틈히 공부해봐야겠다.
'aws' 카테고리의 다른 글
[AWS] RI & Savings Plan로 AWS 비용 절감 (8) | 2022.12.11 |
---|---|
[AWS] RDS Connection timed out 연결 오류 해결 방법 (24) | 2022.11.12 |
[AWS] S3 버킷 퍼블릭 엑세스 설정 (0) | 2022.07.25 |
[AWS] CloudWatch logs - 로그 파일 수집 (4) | 2022.01.21 |
[AWS] EC2, ufw enable 후 ssh 접속 불가 문제 (6) | 2022.01.13 |