분류 전체보기 9

AWS RDS INSERT문 중복 실행으로 인한 DeadLock 파악

상황 서버 장애로 인해서 클라이언트로부터 요청받은 API의 응답 시간이 길어지는 상황이 발생했습니다. 응답 시간이 길어짐에 따라 여러가지 이슈가 발생했는데, 그중, 몇몇 유저로부터 참여형 서비스에서 신규로 참여할 수 없다는 cs가 인입되었습니다. 참여형 서비스에 신규로 참여를 하게되면 mysql에 INSERT 문을 실행해 유저가 참여했다는 데이터를 저장합니다. 참여가 안된다는 cs를 토대로 AWS RDS에 어떠한 장애가 발생했음을 짐작했습니다. AWS RDS 지표를 통해 문제 발생 시점에 교착 상태가 발생하고 있다는 것을 확인하였으며, 어떤 DeadLock 이 발생하고 있는지 확인해 보았습니다. ------------------------ LATEST DETECTED DEADLOCK -----------..

개발/AWS 2023.03.22

AWS ElastiCache 네티워크 대역폭 초과로 인한 서비스 장애

[상황] 서버 배포 시 아래의 에러 내용을 확인하였습니다. AbortError: Redis connection lost and command aborted. It might have been processed. at RedisClient.flush_and_error (/var/app/current/node_modules/redis/index.js:362:23) 그리고 ElastiCache의 현재 연결 갯수 지표에서, 배포 시점에 read replica의 연결이 끊어졌다가 다시 붙는걸 확인했습니다. [원인] 1. Elastic BeansTalk 구성 - 추가 배치를 이용한 롤링 배포로 인한 ElastiCache 부하 증가 API서버의 경우 평균적으로 23대의 인스턴스가 실행 중이고, 서버 배포 시, 추가 ..

개발/AWS 2023.03.14

AWS EC2Local port 고갈 인한 서비스 장애

[상황] AWS ALB 모니터링 지표에서 HTTP 5XXs 에러 갯수가 대량으로 발생하는 것을 확인하였습니다. 인스턴스 nginx 로그에서 아래의 에러가 대량으로 발생 중인 것을 확인하였고, 4001 포트에 연결이 실패하는 것으로 보였습니다. 127.0.0.1:4001 faild (99: Cannot assign requested address) while connection to upstream, .... [원인] 1. timawait 중인 소켓 갯수 확인 문제가 발생하고 있는 인스턴스에 접속 후, socket 상태 확인 명령어를 이용해 timewait 상태의 소켓이 약 26000개인 것을 확인했습니다. [ec2-user@ip-172-31-26-217 ~]$ ss -s Total: 1201TCP: 26..

개발/AWS 2023.03.13

AWS ElastiCache Evictions로 인한 데이터 삭제

[상황] 서버 배포 시점에 ElastiCache Evictions 지표가 급증하는걸 확인하였으며, Expire가 설정된 Key들이 원치 않게 삭제되는 현상이 발생하였습니다. [원인] 1. maxmemory를 초과하는 memory 사용이 발생. ElastiCache memory 정보를 확인해보니 아래 두 지표를 확인할 수 있었습니다. - maxmemory_human : 9.8G - 최대 사용 가능한 memory - used_memory_peak_human : 13.55G - 최대 memory 사용량 현재 설정되어 있는 maxmemory를 초과하는 memory 사용이 발생하였습니다. 현재 ElastiCache에 적용되어 있는 Eviction Policy는 volatile-lru 입니다. < Eviction ..

개발/AWS 2023.02.02

AWS ElastiCache 엔진 마이너 버전 업데이트로 인한 다운타임

[상황] 상용 Redis가 정상동작 하지 않아 모니터링 지표를 확인해보니, 아래와 같은 현상을 확인했습니다. 이미지를 보면 04시 34분 ~ 37분까지 3대의 인스턴스의 현재 연결 수가 떨어진걸 확인할 수 있습니다. 04시 34분에 3대의 인스턴스의 항목수가 전부 0개가 된 후, 37분부터 primary 부터 순차적으로 다시 캐싱되는걸 확인할 수 있습니다. 각 인스턴스가 살아나는 시점에 데이터 복제가 발생하는것을 확인할 수 있습니다. [원인] Redis 생성 시 유지관리 차원에서 엔진 마이너 버전 자동 업그레이드 옵션을 활성화 하였고, 업그레이드가 필요하다면, 월요일 새벽 4시 30분부터 진행되게 설정을 해두었습니다. 이 설정으로 인해, 9월 27일 04시 30분에 마이너 버전 업그레이드가 실행되었고, ..

개발/AWS 2023.01.31

AWS RDS Too many max_connections 장애

[상황] sequelize에서 Too many connections 에러가 다수 발생했습니다. 현재 상용 RDS의 인스턴스 클래스는 r4.large 입니다. r4.large 타입의 경우 DB 최대 연결 갯수(max_connections)는 1000개입니다. 에러 발생 시점의 DB 연결 갯수를 확인하니 1000개인 것을 확인 할 수 있습니다. [대응] 대응 방법은 크게 두가지가 있을 것 같습니다. 1. DB 연결 갯수를 줄이는 방법 2. DB 연결 최대 갯수를 늘리는 방법 1. DB 연결 갯수를 줄이는 방법. a. mysql 설정에서 connection pool의 max값을 줄이는 방법. b. Connection pool은 인스턴스 별로 별개로 생성되므로, 활성 인스턴스 수를 줄이는 방법. * 인스턴스 수..

개발/AWS 2023.01.31

AWS RDS 워크로드 불균형으로 인한 로드밸런싱 장애

[상황] 트래픽 증가를 대비해 RDS AutoScaling 설정을 해놨는데, AutoScaling 인해 읽기 인스턴스가 추가되면 로드밸런싱이 잘 되지 않아 서비스 장애가 발생하였습니다. [원인] AWS RDS에서 제공하는 autoScaling은 쓰기 인스턴스 클래스를 기준으로 읽기 인스턴스를 생성합니다. 만약 쓰기 인스턴스와 읽기 인스턴스의 클래스가 다른 상태에서 autoScaling이 발생하게 되면, autoScaling으로 인해 생성되는 읽기 인스턴스와, 생성되어 있던 읽기 인스턴스 간 클래스 불일치가 발생합니다. 이미지에 나오는 내용처럼, 하나의 DB 클러스터에 있는 DB 인스턴스 간 클래스 불일치가 발생하면, 로드밸런싱에 문제가 발생한다고 합니다. [대응] 쓰기 인스턴스와 읽기 인스턴스의 클래스를..

개발/AWS 2023.01.31

AWS RDS 장애 조치(fail-over)를 이용한 무중단 스케일업

장애 조치 (Fail-Over) 란? 주 사용 서버와 복제본 서버를 구축 해놓고, 주 사용 서버에 장애가 발생 시, 복제본 서버로 요청을 처리해 서버가 중단되지 않도록 하는 방법을 뜻합니다. 스케일업 (scale-up) 이란? 서버의 자체 성능을 증가시키는 것. 즉, 고성능 인스턴스 클래스로 변경하는 것을 뜻합니다. RDS 무중단 스케일업 방법 RDS의 경우 DB서버의 인스턴스 클래스를 변경하게 되면, DB가 일시적으로 중단됩니다. 하지만 상용 DB가 중단되면 서비스에 영향을 주기 때문에 무중단으로 스케일업을 진행해야합니다. 현재 사용하고 있는 RDS 쓰기 인스턴스(primary)의 클래스를 r4.large이라고 가정합니다. 쓰기 인스턴스를 스케일업 하려면 스케일업 하고자 하는 인스턴스 클래스로 읽기 인..

개발/AWS 2023.01.31

[Docker] - Dockerfile을 이용한 이미지 생성

1-1. 도커 이미지 검색 docker search [이미지명] 1-2. 도커 이미지 생성 - 테스트용 컨데이너 생성 docker run [옵션명] --name [컨테이너명] [이미지명] - commit을 이용해 이미지 생성 docker commit [옵션] [컨테이너명] [이미지명] first라는 컨테이너를 기반으로 first:1 이미지 생성 생성한 first:1이미지를 이용해 second컨테이너 생성 secont 컨테이너를 이용해 second:1 이미지 생성 1-3. 도커 이미지의 구조 이미지는 layer로 구성되어있다. 이미지가 생성될때, 컨테이너에서 변경된 사항만 새로운 layer를 만들고, 그 layer 를 포함하여 새 이미지를 생성 docker image inspect [이미지명] 초기 이미지..

개발/Docker 2021.05.19