본문 바로가기

인프라,데이터

AWS Elasticache service update를 하면 일어나는 일

최근 elasticache-20230315-001, 002 서비스 업데이트가 특정 Elasticache를 대상으로 업데이트 일정이 잡혔다.

이 업데이트는 Critical 한 등급이라 2023년 4월 22일 00시 59분 59초까지 직접 서비스 업데이트를 적용하지 않으면 AWS에서 강제 업데이트를 시켜버린다 (...)

그러면 무슨 일이 일어날까?

 

Elasticache 콘솔을 보면 Endpoint가 있다. (노드의 개수와 클러스터 여부에 따라 여러 엔드포인트가 있다..)

예를 들어 Primary Endpoint나 Reader Endpoint로 요청을 보내면, 

이 Endpoint는 각각 Redis Master와 Reader로 요청을 라우팅한다.

그리고 각 Master, Reader 노드에도 Endpoint가 있다. (telnet을 해보면 실제로는 특정 ip로 연결된다.)

 

여기서, 레디스의 노드들은 순차적으로 업그레이드가 적용된다.

마스터 노드에 업데이트가 일어날 경우, 마스터 노드는 특정 리더 노드를 마스터로 만든다. (Failover)

기존 마스터 노드는 업데이트가 적용되면서, 서버가 Elasticache로 요청을 보내도 해당 노드는 응답할 수 없는 상태가 된다.

만약 서버에서 기존 Master 노드의 Endpoint를 하드코딩해서 요청을 보내고 있었다면 어떻게 될까?

일단 해당 Endpoint로 요청을 보내도 응답이 돌아오지 않는다. 즉 순단이 발생한다. 

  • 서버에서는 무슨 일이 일어날까?
    => 요청한 Endpoint가 응답하지 않으므로 503 에러가 날 수 있을 것 같다. 로그를 확인해 볼 것... 
  • 그럼 캐시가 응답하지 않으니 DB로 요청이 갈까?
    => 애플리케이션의 코드 처리 로직에 따라 다를까..? 만약 DB로 요청이 간다면 DB의 커넥션이 증가하고 부하가 증가할 것이다.

 

AWS 문서에 따르면

  • 노드 하나인 Redis의 경우 읽기/쓰기 연산에 Node의 endpoint를, 
  • 클러스터 모드가 아닌 Redis의 경우 쓰기 연산에는 Primary Endpoint + Reader Endpoint를 사용하여 모든 리더 노드에 균등하게 연결을 분산하는 방식을 사용
  • 클러스터 모드인 Redis의 경우 Configuration Endpoint를 사용하여 모든 연산을 할 때 그냥 그거를 사용하라고 한다.
    출처 : https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/Endpoints.html

Primary Endpoint, Reader Endpoint, Configuration Endpoint를 사용하면 마스터 노드가 업데이트 중이라 Failover가 발생해도, 새로운 마스터 노드로 요청이 전달될 것이고, 특정 리더 노드가 업데이트 중이라도 정상 상태의 노드로만 요청을 라우팅 할 것이다.
(마스터 노드와 리더 노드가 각각 1개 이상이어야 할 것 같지만..)

 

하지만 기존에서 Elasticache의 Primary Endpoint, Reader Endpoint 앞에 Route53 DNS Record까지 붙였다면...

ex) 기존에 서버에서 쓰기 연산은 redis-master.mycompany.com 으로, 리더 노드에는 redis-reader.mycompany.com으로 요청

 

위 그림에서 기존 master가 업데이트되고 새 master가 생기는 상황에서는 Primary Endpoint가 새 마스터 노드로 요청을 라우팅 하니, 일단 잘 라우팅이 될 것이다. 

하지만 DNS의 TTL seconds(Time To Live - 생존 시간) 도 순단에 영향을 미칠 수 있다. (기본은 300초이다.)

만약 DNS가 300초 동안 TTL 이 유지되어 기존 master로 라우팅을 300초동안 한다면... 300초동안 순단이다. 😇

 

 


+ 서비스 업데이트 대신에 새로운 레디스 클러스터를 생성하면, 위의 업데이트가 자동으로 적용된 새 레디스 클러스터가 생성이 된다.

그래서 기존 레디스 대신에 새 레디스로 요청을 보내도록 애플리케이션을 재배포하는 방식도 있다.

(하지만 이거나 업데이트하나... 라고... 한다...)