로드밸런서 Session persistence
AWS, OCI 로드밸런서에서는 모두 Session Persistence(세션 지속성)을 위해 Sticky Session 기능을 제공하고 있습니다.
Application cookie persistence, Loadbalancer cookie persistence을 비교해보고 Hands-on을 진행해보겠습니다.
1. Application cookie persistence(애플리케이션 쿠키 지속성)
애플리케이션 쿠키 지속성은 백엔드 서버가 특정 쿠키를 클라이언트에게 설정합니다, 이 쿠키는 로드 밸런서에서 세션 지속성을 유지하는데 사용됩니다.
로드 밸런서는 이 백엔드에서 설정한 쿠키의 값과 다른 요청 매개변수의 해시를 계산하여 해당 값을 다른 쿠키 즉 스티키 세션 쿠키를 클라이언트에 전송합니다
클라이언트가 다시 요청을 보낼 때, 이 스티키 세션 쿠키를 사용해 클라이언트를 처음으로 연결된 백엔드 서버로 계속 연결하게 됩니다.
백엔드 서버의 쿠키 값을 변경하면, 로드 밸런서는 새로운 해시 값을 계산하여 스티키 세션 쿠키를 다시 계산하여 클라이언트에 다시 전송합니다.
애플리케이션 쿠키 지속성의 경우 여러 계층으로 이루어져 있는 아키텍처의 경우 각 로드 밸런서가 동일한 스티키 쿠키 이름을 사용할 경우, 쿠키 값이 서로 덮어써지는 문제가 발생하여 세션 지속성 유지가 어려워질 수 있습니다.
2. Loadbalancer cookie persistence(로드밸런서 쿠키 지속성)
로드밸런서 쿠키 지속성은 백엔드 서버와 상관없이 독립적으로 로드밸런서가 직접 쿠키를 생성하여 클라이언트에게 전달합니다, 세션 지속성은 로드밸런서 스티키 세션 쿠키에만 의존합니다.
백엔드 서버에서 설정된 쿠키를 사용하지 않으므로 로드 밸런서가 여러 계층으로 걸쳐 사용되더라도 쿠키 덮어쓰기 문제가 발생하지 않고 더 간단하고 안정적으로 사용할 수 있습니다.
사용자는 스티키 세션의 쿠키의 이름, 속성(HTTPOnly, Secure), 만료 시간등을 제어할 수 있습니다.
Application cookie persistence 실습

위의 아키텍처처럼 기본적으로 라운드 로빈으로 되어 있기 때문에 아래의 로그 이미지처럼 번갈아가면서 접속이 되는 것을 확인할 수 있습니다.

Backend1의 nginx의 설정을 수정하여 백엔드 서버의 쿠키의 네임을 지정한 후 Syntax가 올바르게 되었는지 확인한 후 nginx를 reload 합니다.
vi /etc/nginx/nginx.conf
location / {
add_header Set-Cookie "test-cookie=value; Path=/; HttpOnly";
}
nginx -t
nginx -s reload
로드밸런서에서 이제 Application Cookie Persistence에서 Cookie name에 위에서 구성한 test-cookie를 넣은 후 변경 합니다.

첫 번째 Set-Cookie에서는 백엔드 서버에서 설정한 애플리케이션 쿠키를 확인할 수 있습니다, 두 번째 Set-Cookie에서는 로드밸런서가 스티키 세션을 유지하기 위한 쿠키를 확인할 수 있습니다. 이 쿠키로 인해 클라이언트가 동일한 백엔드 서버로 지속적으로 연결되기를 보장합니다.

이제 로그에서도 동일하게 아까 설정한 Backend1 백엔드 서버로 지속적으로 연결되는 것을 확인할 수 있습니다.

Loadbalancer cookie persistence 실습
로드밸런서에서 이제 Loadbalancer cookie persistence를 선택합니다.

Session Persistence Parameters
Cookie name: 값은 선택이기 때문에 꼭 넣지 않아도 됩니다, 값을 비워두워도 Default로 X-Oracle-BMC-LBS-Route로 지정됩니다.
Disable Fallback: 로드 밸런서가 특정 클라이언트의 요청을 처리하던 서버가 다운되었을 때 다른 서버로 요청을 전달할지 여부를 결정하는 옵션입니다, 기본적으로 Fallback을 지원합니다.
Expiration Period in Seconds: 클라이언트의 쿠키 만료시간을 지정할 수 있습니다.
Loadbalancer cookie persistence에서도 정상적으로 쿠키 값을 확인 및 Backend2로 접속이 되는 것을 확인할 수 있습니다.
