Amazon Web Services 한국 블로그
Amazon ElastiCache Global Datastore for Redis 출시 (서울 리전 포함)
Amazon ElastiCache(Memcached 및 Redis에 사용하는 메모리 내 관리형 데이터 스토어)는 클러스터 모드, 자동 장애 조치를 포함한 다중 AZ 등을 비롯한 고가용성 기능을 제공하고 있습니다.
Redis는 글로벌 사용자에게 지연이 낮은 트래픽을 제공하는 데 사용하는 경우가 많기 때문에 고객은 AWS 리전 전체에 Amazon ElastiCache 클러스터를 복제할 수 있으면 좋겠다는 의견을 제시했습니다. 저희는 고객의 의견에 따라 Redis 클러스터에 복제 기능을 제공할 수 있게 되었습니다.
Amazon ElastiCache Global Datastore For Redis 소개
Amazon ElastiCache Global Datastore for Redis를 사용하면 한 개 리전의 클러스터를 최대 2개의 다른 리전의 클러스터로 복제할 수 있습니다. 일반적으로 고객은 다음과 같은 이유로 클러스터를 복제합니다.
- 캐싱된 데이터를 사용자 가까이 가져가서 네트워크 지연을 낮추고 애플리케이션 반응성을 높이기 위해
- 리전을 부분 또는 전체적으로 사용하지 못하게 될 경우에 대비한 재해 복구 기능을 구축하기 위해
글로벌 데이터 스토어를 설정하는 것은 매우 쉽습니다. 먼저, 애플리케이션에서 쓰기를 수신할 기본 클러스터가 될 클러스터를 선택합니다. 새로운 클러스터 또는 기존 클러스터를 사용할 수 있지만 Redis 5.0.6 이상이 실행되어야 합니다. 그런 다음, 다른 리전에 최대 2개의 보조 클러스터를 추가합니다. 이 클러스터는 기본 클러스터에서 업데이트를 받게 됩니다.
이 설정은 단일 노드 클러스터를 제외한 모든 Redis 구성에 제공됩니다. 물론, 단일 노드 클러스터를 복제 그룹 클러스터로 변환한 다음, 기본 클러스터로 사용할 수도 있습니다.
마지막으로 중요한 점은 글로벌 데이터 스토어에 포함되는 클러스터는 평소와 같이 수정 및 크기 조정할 수 있다는 것입니다(노드 추가 또는 제거, 노드 유형 변경, 샤드 추가 또는 제거, 복제 노드 추가 또는 제거).
간단한 데모를 보여드리겠습니다.
리전 전체에 Redis 클러스터 복제
클러스터가 3개인 글로벌 데이터 스토어를 처음부터 구축하는 방법을 보여드리겠습니다. 기본 클러스터는 us-east-1 리전에 위치하고 두 개의 보조 클러스터는 us-west-1과 us-west-2 리전에 위치하게 됩니다. 단순화하기 위해 모든 클러스터에 cache.r5.large 노드 3개, 다중 AZ, 샤드 1개의 동일한 기본 구성을 사용할 것입니다.
AWS 콘솔로 가서 [글로벌 데이터 스토어]를 클릭한 다음, [만들기]를 클릭하여 글로벌 데이터 스토어를 만듭니다. 데이터 스토어를 지원하는 새 클러스터를 만들지, 아니면 기존 클러스터를 사용할지 묻는 메시지가 나타납니다. 저는 새 클러스터를 만들기로 하고 global-ds-1-useast1이라는 이름의 클러스터를 만듭니다.
[다음]을 클릭하고 us-west-1 리전에서 호스팅되는 보조 클러스터의 세부 사항을 입력합니다. 저는 상상력이 부족해서 global-ds-1-us-west1이라고 명명했습니다.
그런 다음, us-west-2 리전에 global-ds-1-uswest2라는 이름의 다른 보조 클러스터를 추가합니다. [글로벌 데이터 스토어]로 이동하여 [리전 추가]를 클릭하고 클러스터 세부 사항을 입력합니다.
잠시 후 3개의 클러스터가 모두 가동되기 시작하고 글로벌 데이터 스토어에 연결됩니다.
us-east-1 리전에서 호스팅되는 Amazon Elastic Compute Cloud(EC2) 인스턴스에서 실행되는 redis-cli 클라이언트를 사용하여 클러스터 엔드포인트에 신속히 연결하고 실제로 작동하는지 확인할 수 있습니다.
[us-east-1-instance] $ redis-cli -h $US_EAST_1_CLUSTER_READWRITE
> ping
PONG
> set paris france
OK
> set berlin germany
OK
> set london uk
OK
> keys *
1) "london"
2) "berlin"
3) "paris"
> get paris
"france"
잘 작동하는 것 같습니다. us-west-1 리전에서 호스팅되는 EC2 인스턴스를 사용하여 기본 클러스터에 저장한 데이터가 us-west-1 보조 클러스터에 복제되었는지 확인해보겠습니다.
[us-west-1-instance] $ redis-cli -h $US_WEST_1_CLUSTER_READONLY
> keys *
1) "london"
2) "berlin"
3) "paris"
> get paris
"france"
잘 복제되었네요. 이제 기본 클러스터에 데이터를 추가해보겠습니다…
> hset Parsifal composer "Richard Wagner" date 1882 acts 3 language "German"
> hset DonGiovanni composer "W.A. Mozart" date 1787 acts 2 language "Italian"
> hset Tosca composer "Giacomo Puccini" date 1900 acts 3 language "Italian"
…그리고 최대한 신속히 보조 클러스터를 검사해보겠습니다.
> keys *
1) "DonGiovanni"
2) "london"
3) "berlin"
4) "Parsifal"
5) "Tosca"
6) "paris"
> hget Parsifal composer
"Richard Wagner"
다른 터미널로 전환하고 명령을 실행하는 동안 새 데이터가 이미 도착해 있습니다. 리전에 따라 다르지만 리전 간 트래픽 범위의 일반적인 네트워크 지연이 60~200ms이기 때문에 그다지 놀라운 결과는 아닙니다.
그러면 us-east-1에 호스팅되는 기본 클러스터가 잘못되면 어떻게 될까요? 보조 클러스터 중 하나를 전체 읽기/쓰기 기능을 갖춘 클러스터로 손쉽게 승격할 수 있습니다.
거기에 더해, 저는 us-east-1 클러스터를 글로벌 데이터 스토어에서 제거하겠습니다. 이 작업이 완료되면 글로벌 데이터 스토어는 다음과 같습니다.
이제 us-west-1 리전의 EC2 인스턴스를 사용하고 클러스터의 읽기/쓰기 엔드포인트로 연결하여 데이터를 더 추가하겠습니다…
[us-west-1-instance] $ redis-cli -h $US_WEST_1_CLUSTER_READWRITE
> hset Lohengrin composer "Richard Wagner" date 1850 acts 3 language "German"
… 그리고 us-west-2 클러스터에 복제되었는지 확인해보겠습니다.
[us-west-2-instance] $ redis-cli -h $US_WEST_2_CLUSTER_READONLY
> hgetall Lohengrin
1) "composer"
2) "Richard Wagner"
3) "date"
4) "1850"
5) "acts"
6) "3"
7) "language"
8) "German"
모두 복제되었네요. 글로벌 데이터 스토어는 리전 사이에서 Amazon ElastiCache 데이터를 매우 간편하게 복제할 수 있습니다.
정식 출시
이 기능은 지금 미국 동부(버지니아 북부), 미국 동부(오하이오), 미국 서부(캘리포니아 북부), 미국 서부(오레곤), 아시아 태평양(서울), 아시아 태평양(시드니), 아시아 태평양(싱가포르), 아시아 태평양(도쿄), EU(프랑크푸르트), EU(아일랜드), EU(런던) 리전에서 사용할 수 있습니다. 이 기능을 사용하고 Amazon ElastiCache에 대한 AWS 포럼 또는 일반적인 AWS Support 연락처를 통해 피드백을 보내주시기 바랍니다.
— Julien