Application Load Balancer에 대한 고정 세션 - Elastic Load Balancing

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Application Load Balancer에 대한 고정 세션

기본적으로, Application Load Balancer는 선택한 로드 밸런싱 알고리즘에 따라 각 요청을 등록된 대상으로 독립적으로 라우팅합니다. 한편, 고정 세션 기능(세션 어피니티라고도 함)을 사용해 로드 밸런서가 사용자의 세션을 특정 대상에 바인딩하도록 할 수 있습니다. 이렇게 하면 세션 중에 사용자로부터 들어오는 모든 요청이 동일한 대상으로 전송됩니다. 이 기능은 클라이언트에게 지속적인 경험을 제공하기 위해 상태 정보를 유지하는 서버에 유용합니다. 고정 세션을 사용하려면 클라이언트가 쿠키를 지원해야 합니다.

Application Load Balancer는 기간 기반 쿠키와 애플리케이션 기반 쿠키를 둘 다 지원합니다. 고정 세션은 대상 그룹 레벨에서 활성화됩니다. 전체 대상 그룹에 대해 기간 기반 고정, 애플리케이션 기반 고정, 고정 없음을 조합하여 사용할 수 있습니다.

고정 세션 관리에서 핵심은 로드 밸런서가 얼마나 오래 사용자 요청을 동일한 대상으로 일관되게 라우팅하는지를 결정하는 것입니다. 애플리케이션이 자체 세션 쿠키를 가지고 있는 경우에는 애플리케이션 기반 고정을 사용할 수 있으며 로드 밸런서 세션 쿠키는 애플리케이션의 세션 쿠키에 지정된 기간을 따릅니다. 애플리케이션이 자체 세션 쿠키를 가지고 있지 않은 경우에는 기간 기반 고정을을 사용하여 원하는 기간이 지정된 로드 밸런서 세션 쿠키를 생성할 수 있습니다.

로드 밸런서 생성 쿠키의 내용은 회전 키를 사용하여 암호화됩니다. 로드 밸런서가 생성한 쿠키는 해독하거나 변경할 수 없습니다.

두 고정 유형 모두에서, Application Load Balancer는 모든 요청 후에 생성하는 쿠키의 만료 기간을 재설정합니다. 쿠키가 만료되면 세션은 더 이상 고정되지 않으며 클라이언트는 쿠키 저장소에서 쿠키를 제거해야 합니다.

요구 사항
  • HTTP/HTTPS 로드 밸런서입니다.

  • 각 가용 영역에 있는 하나 이상의 정상 상태 인스턴스입니다.

고려 사항
  • 교차 영역 로드 밸런싱이 비활성화된 경우 스티키 세션이 지원되지 않습니다. 교차 영역 로드 밸런싱이 비활성화된 상태에서 고정 세션을 활성화하려고 시도하면 실패합니다.

  • 애플리케이션 기반 쿠키의 경우, 각 대상 그룹에 대해 쿠키 이름을 개별적으로 지정해야 합니다. 그러나 기간 기반 쿠키의 경우, AWSALB은(는) 모든 대상 그룹에서 사용되는 유일한 이름입니다.

  • Application Load Balancer의 여러 계층을 사용하는 경우, 애플리케이션 기반 쿠키를 사용하여 모든 계층에서 고정 세션을 활성화할 수 있습니다. 그러나 기간 기반 쿠키를 사용하면 하나의 레이어에서만 고정 세션을 활성화할 수 있습니다. AWSALB이(가) 사용할 수 있는 유일한 이름이기 때문입니다.

  • 애플리케이션 기반 고정은 가중 대상 그룹에서 작동하지 않습니다.

  • 대상 그룹이 여러 개인 전달 작업이 있고 하나 이상의 대상 그룹에 고정 세션이 활성화되어 있으면 대상 그룹 레벨에서 고정을 활성화해야 합니다.

  • WebSocket 연결은 본질적으로 고정적입니다. 클라이언트가 연결 업그레이드를 요청하는 경우 연결 업그레이드를 수락하기 위해 WebSockets HTTP 101 상태 코드를 반환하는 대상이 연결에 사용되는 대상입니다. WebSockets WebSockets 업그레이드가 완료된 후에는 쿠키 기반 고정성이 사용되지 않습니다.

  • Application Load Balancer는 쿠키 헤더에서 Max-Age 속성 대신 Expires 속성을 사용합니다.

  • Application Load Balancer는 URL로 인코딩된 쿠키 값을 지원하지 않습니다.

기간 기반 고정

기간 기반 고정은 로드 밸런서 생성 쿠키(AWSALB)를 사용하여 대상 그룹의 동일한 대상으로 요청을 라우팅합니다. 쿠키는 세션을 대상에 매핑하는 데 사용됩니다. 애플리케이션에 자체 세션 쿠키가 없는 경우, 고유한 고정 기간을 지정하고 로드 밸런서가 사용자 요청을 동일한 대상으로 일관되게 라우팅하는 기간을 관리할 수 있습니다.

처음 클라이언트의 요청을 받으면 로드 밸런서는 (선택한 알고리즘을 기반으로) 요청을 대상으로 라우팅하고 AWSALB(이)라는 쿠키를 생성합니다. 선택한 대상에 대한 정보를 인코딩하고, 쿠키를 암호화하고, 클라이언트에 대한 응답에 쿠키를 포함합니다. 로드 밸런서에서 생성된 쿠키는 만료 기간이 7일이며 이는 구성할 수 없습니다.

후속 요청에서 클라이언트는 AWSALB 쿠키를 포함해야 합니다. 로드 밸런서는 쿠키를 포함하는 클라이언트로부터 요청을 수신하면 이를 감지하고 해당 요청을 동일한 대상으로 라우팅합니다. 쿠키가 있지만 디코딩할 수 없거나 등록이 해제되었거나 비정상 상태인 대상을 참조하는 경우 로드 밸런서는 새 대상을 선택하고 새 대상에 대한 정보로 쿠키를 업데이트합니다.

CORS (출처 간 리소스 공유) 요청의 경우 일부 브라우저에서는 고정성을 활성화해야 합니다. SameSite=None; Secure 이러한 브라우저를 지원하기 위해 로드 밸런서는 항상 두 번째 고정성 쿠키를 생성합니다. 이 쿠키에는 속성뿐 아니라 원래 고정 쿠키와 동일한 정보가 포함됩니다. AWSALBCORS SameSite 클라이언트는 CORS가 아닌 요청을 포함하여 두 쿠키를 모두 수신합니다.

콘솔을 사용하여 기간 기반 고정을 활성화하는 방법
  1. https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 엽니다.

  2. 탐색 창의 Load Balancing 아래에서 대상 그룹을 선택합니다.

  3. 대상 그룹의 이름을 선택하여 세부 정보 페이지를 엽니다.

  4. 그룹 세부 정보 탭의 속성 섹션에서 편집을 선택합니다.

  5. [Edit attributes] 페이지에서 다음을 수행합니다.

    1. 고정성을 선택합니다.

    2. 고정 유형에서 로드 밸런서 생성 쿠키를 선택합니다.

    3. [Stickiness duration]에서 1초에서 7일 사이의 값을 지정합니다.

    4. 변경 사항 저장을 선택합니다.

AWS CLI를 사용하여 기간 기반 고정 활성화

modify-target-group-attributes명령을 stickiness.enabledstickiness.lb_cookie.duration_seconds 속성과 함께 사용하십시오.

다음 명령을 사용하여 기간 기반 고정을 활성화합니다.

aws elbv2 modify-target-group-attributes --target-group-arn ARN --attributes Key=stickiness.enabled,Value=true Key=stickiness.lb_cookie.duration_seconds,Value=time-in-seconds

다음 예와 유사하게 출력되어야 합니다:

{ "Attributes": [ ... { "Key": "stickiness.enabled", "Value": "true" }, { "Key": "stickiness.lb_cookie.duration_seconds", "Value": "86500" }, ... ] }

애플리케이션 기반 고정

애플리케이션 기반 고정은 클라이언트 대상 고정에 대한 사용자 고유의 기준을 설정할 수 있는 유연성을 제공합니다. 애플리케이션 기반 고정을 활성화하면 로드 밸런서는 선택한 알고리즘을 기반으로 첫 번째 요청을 대상 그룹 내의 대상으로 라우팅합니다. 대상은 고정을 활성화하기 위해 로드 밸런서에 구성된 쿠키와 일치하는 사용자 지정 애플리케이션 쿠키를 설정해야 합니다. 이 사용자 지정 쿠키에는 애플리케이션에 필요한 모든 쿠키 속성이 포함될 수 있습니다.

Application Load Balancer가 대상으로부터 사용자 지정 애플리케이션 쿠키를 수신하면, 애플리케이션 쿠키라는 암호화된 새 쿠키가 자동으로 생성되어 고정 정보를 캡처합니다. 이 로드 밸런서에서 생성한 애플리케이션 쿠키는 애플리케이션 기반 고정성이 활성화된 각 대상 그룹에 대한 고정 정보를 캡처합니다.

로드 밸런서에서 생성한 애플리케이션 쿠키는 대상에 의해 설정된 사용자 지정 쿠키의 속성을 복사하지 않습니다. 여기에는 구성할 수 없는 7일의 자체 만료 기간이 있습니다. 클라이언트에 대한 응답에서 Application Load Balancer는 사용자 지정 쿠키의 값 또는 만료 속성이 아니라, 대상 그룹 수준에서 사용자 지정 쿠키가 구성된 이름만 검증합니다. 이름이 일치하는 한, 로드 밸런서는 클라이언트에 대한 응답에서 로드 밸런서가 생성한 애플리케이션 쿠키 및 대상에서 설정한 사용자 지정 쿠키와 같이 두 쿠키를 모두 전송합니다.

후속 요청에서, 클라이언트는 고정을 유지하기 위해 쿠키를 둘 다 다시 보내야합니다. 로드 밸런서는 애플리케이션 쿠키를 해독하고 구성된 고정 기간이 여전히 유효한지 여부를 확인합니다. 그런 다음 쿠키에 있는 정보를 사용하여 대상 그룹 내의 동일한 대상으로 요청을 전송하여 고정을 유지합니다. 또한, 로드 밸런서는 사용자 지정 애플리케이션 쿠키를 검사하거나 수정하지 않고 대상으로 프록시합니다. 후속 응답에서 로드 밸런서가 생성한 애플리케이션 쿠키의 만료 및 로드 밸런서에 구성된 고정 기간이 재설정됩니다. 클라이언트와 대상 사이의 고정성을 유지하려면 쿠키의 만료 및 고정 기간이 경과하지 않아야 합니다.

대상이 실패하거나 비정상 상태가 되면 로드 밸런서는 해당 대상으로의 요청 라우팅을 중지하고 선택한 로드 밸런싱 알고리즘을 기반으로 정상 상태의 대상을 새로 선정합니다. 로드 밸런서는 세션을 정상 상태의 새 대상에 “고정”된 것으로 간주하고, 실패한 대상이 다시 오더라도 요청을 정상 상태의 새 대상으로 계속 라우팅합니다.

Cross-Origin Resource Sharing(CORS) 요청을 사용하는 경우 고정성을 활성화하려면 사용자 에이전트 버전이 Chromium80 이상인 경우에만 로드 밸런서가 SameSite=None; Secure 속성을 로드 밸런서가 생성한 애플리케이션 쿠키에 추가합니다.

대부분의 브라우저는 쿠키를 4K로 제한하기 때문에 로드 밸런서는 애플리케이션 쿠키를 4K보다 큰 여러 쿠키로 분할합니다. Application Load Balancer는 최대 16K 크기의 쿠키를 지원하므로 클라이언트로 전송하는 샤드를 최대 4개까지 생성할 수 있습니다. 클라이언트에 표시되는 애플리케이션 쿠키 이름은 “AWSALBAPP-”로 시작하며 프래그먼트 번호를 포함합니다. 예를 들어 쿠키 크기가 0-4K인 경우 클라이언트에는 -0이 표시됩니다. AWSALBAPP 쿠키 크기가 4-8k인 경우 클라이언트는 AWSALBAPP -0과 AWSALBAPP -1을 보는 식입니다.

콘솔을 사용하여 애플리케이션 기반 고정을 활성화하는 방법
  1. https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 엽니다.

  2. 탐색 창의 Load Balancing 아래에서 대상 그룹을 선택합니다.

  3. 대상 그룹의 이름을 선택하여 세부 정보 페이지를 엽니다.

  4. 그룹 세부 정보 탭의 속성 섹션에서 편집을 선택합니다.

  5. [Edit attributes] 페이지에서 다음을 수행합니다.

    1. 고정성을 선택합니다.

    2. 고정 유형에서 애플리케이션 기반 쿠키를 선택합니다.

    3. [Stickiness duration]에서 1초에서 7일 사이의 값을 지정합니다.

    4. 앱 쿠키 이름에서 애플리케이션 기반 쿠키의 이름을 입력합니다.

      쿠키 이름에는 AWSALB, AWSALBAPP 또는 AWSALBTG을(를) 사용하지 마세요. 이 단어는 로드 밸런서에서 사용하도록 예약되어 있습니다.

    5. 변경 사항 저장을 선택합니다.

AWS CLI를 사용하여 애플리케이션 기반 고정 활성화

modify-target-group-attributes명령을 다음 속성과 함께 사용하십시오.

  • stickiness.enabled

  • stickiness.type

  • stickiness.app_cookie.cookie_name

  • stickiness.app_cookie.duration_seconds

애플리케이션 기반 고정을 활성화하려면 다음 명령을 사용합니다.

aws elbv2 modify-target-group-attributes --target-group-arn ARN --attributes Key=stickiness.enabled,Value=true Key=stickiness.type,Value=app_cookie Key=stickiness.app_cookie.cookie_name,Value=my-cookie-name Key=stickiness.app_cookie.duration_seconds,Value=time-in-seconds

다음 예와 유사하게 출력되어야 합니다:

{ "Attributes": [ ... { "Key": "stickiness.enabled", "Value": "true" }, { "Key": "stickiness.app_cookie.cookie_name", "Value": "MyCookie" }, { "Key": "stickiness.type", "Value": "app_cookie" }, { "Key": "stickiness.app_cookie.duration_seconds", "Value": "86500" }, ... ] }
수동 재조정

확장 시 대상 수가 크게 증가하면 고정으로 인해 하중이 불균등하게 분산될 가능성이 있습니다. 이 시나리오에서는 다음 두 옵션을 사용하여 대상에 대한 부하를 재조정할 수 있습니다.

  • 애플리케이션에 의해 생성된 쿠키에 대한 만료일을 현재 날짜 및 시간 이전으로 설정합니다. 이렇게 하면 클라이언트가 쿠키를 Application Load Balancer에 보내지 못하게되어, 고정을 설정하는 프로세스가 다시 시작됩니다.

  • 로드 밸런서의 애플리케이션 기반 고정 구성에서 매우 짧은 기간을 설정합니다(예: 1초). 이렇게 하면 대상에 의해 설정된 쿠키가 만료되지 않은 경우에도 Application Load Balancer가 고정을 다시 설정합니다.