짤막팁

AWS ElasticCache Redis 엔진 버전 업데이트 하기

beng9re 2023. 8. 13. 18:17

사내 ElasticCache Redis 엔진 버전을 업데이트를 위해 체크했던 포인트와 과정을 설명하고자 합니다.

다른 분들도 도움이 되었으면 좋겠습니다.

 

결론 부터 말하자면 ElasticCache 엔진 업데이트 시 서비스의 다운타임 및 데이터 유실은 발생하지 않으며 

ElasticCache 파라미터 그룹을 체크하면 되겠습니다.

 

 

1. 라이브러리 의존도 체크

기본 적으로 사용하는 프로젝트내의 Redis 7 버전에 대한 지원과 의존도를 체크해봅니다.

저희 프로젝트는 아래 4가지의 라이브러리의 Redis의존도가 있었으며 이는 Document나 관련 로직을 수정하면 되겠습니다.

  • Spring data redis
  • Jedis
  • Redis-session-manager
  • Spring data Redis Session

2. 파라미터 그룹 체크 

버전 별 파라미터 그룹을 체크해봅니다. 

여기서 databases 파라미터는 값이 달라지면 바로 마이그레이션이 안됨으로 서비스 이관이 필요..

참고 AWS 도큐먼트 : https://docs.aws.amazon.com/ko_kr/AmazonElastiCache/latest/red-ug/ParameterGroups.Redis.html#ParameterGroups.Redis.7

 

Redis 특정 파라미터 - Amazon ElastiCache for Redis

Redis 2.6.13 클러스터의 파라미터 그룹을 지정하지 않으면 기본 파라미터 그룹(default.redis2.6)이 사용됩니다. 기본 파라미터 그룹의 파라미터 값은 변경할 수 없지만 언제든지 사용자 지정 파라미터

docs.aws.amazon.com

사내의 변경점은 ziplist 자료구조가 Listpack으로 대체가 되었단 점 (사내에는 해당자료구조를 쓴 로직이 없었기에 바로 가능)

사내 시스템시 체크 사항

 

3 > 7버전의 파라미터 맵핑하여 비교

 

3.  서비스의 다운타임 및 데이터 유실을 검증해보자 

다운타임이나 데이터 유실은 발생되지 않음을 알고는 있었으나 확실한 검증이 필요했었습니다.

이에 따라  JAVA 레투스를 이용하여 검증을 진행하였습니다. 

       while (true) {
            RedisClient client = null;
            try {
                //커넥션 1초 연결
                Thread.sleep(1000);
                client = RedisClient.create(REDIS_URL);
                try (StatefulRedisConnection<String, String> connect = client.connect()) {
                    //타임아웃 설정 2초
                    client.setDefaultTimeout(Duration.ofMinutes(2));
                    RedisCommands<String, String> syncCommands = connect.sync();
                    String value = syncCommands.get("key");
                    
                    //이미 데이터를 Hello, Redis!를 가진상태 체크
                    if ("Hello, Redis!".equals(value)) {
                        System.err.println(LocalDateTime.now() + "value is not correct!");
                    } else {
                        System.out.println(LocalDateTime.now() + "OK");
                    }
                } catch (Exception e) {
                    System.err.println(LocalDateTime.now() + "Error");
                    e.printStackTrace();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                if (client != null) {
                    client.shutdown();
                }
            }
        }

검증 콘솔 예시

정상 



유실 발생

 

검증 결과 다운타임, 데이터 유실이 발생하지 않았습니다.

 

4.  버전 업그레이드 

파라미터 그룹을 해당 버전에 맞추어 작성 후  AWS 콘솔에서 해당 클러스터를 수정 누르고 엔진 버전만 바꾸면 끝

 

 

 

마무리 

제가 진행했던 버전 업그레이드 시 체크사항들을 공유해 드렸습니다. 

상황에 맞게 적용하고 도움이 되었으면 좋겠네요 😄