사전 요구 사항
- 서비스에는 2개 이상의 레플리카가 필요합니다. 레플리카가 1개뿐인 서비스에서는 고정할 대상이 없습니다.
- 이 기능이 일반 제공되면 기본적으로 Enterprise에서 사용할 수 있습니다.
- 표준 ClickHouse Cloud 서비스에서 지원됩니다. BYOC는 아직 지원되지 않습니다.
Replica-aware 라우팅 구성하기
session_id를 계속 사용하십시오. 배포가 서비스에 적용되기 전까지 X-ClickHouse-Replica-Tag는 sticky 라우팅을 제공하지 않습니다. 재시작은 필요하지 않습니다.
HTTP 기반 라우팅
- X-ClickHouse-Replica-Tag (권장)
- session_id (legacy)
워크로드를 특정 레플리카에 고정하려면 HTTPS 인터페이스를 통해 clickhouse-go(v2)의 경우
X-ClickHouse-Replica-Tag 헤더를 전송하십시오. 프록시는 헤더 값에 일관된 해싱을 적용하므로 레플리카 수가 변하지 않는 한 동일한 값을 사용하는 요청은 같은 레플리카로 전송됩니다. 다른 값은 독립적으로 해싱되며 같은 레플리카 또는 다른 레플리카에 할당될 수 있지만, 값이 어느 레플리카에 매핑될지는 선택할 수 없습니다.기존 서비스 호스트명을 사용하십시오. 별도의 sticky 호스트명이나 DNS 변경은 필요하지 않습니다. 헤더 값에는 애플리케이션 이름, 사용자 ID 또는 워크로드 레이블 등 원하는 문자열을 사용할 수 있습니다. 헤더가 없는 요청에는 일반적인 부하 분산이 적용됩니다.각 요청에 X-ClickHouse-Replica-Tag 헤더를 설정하십시오:Protocol: clickhouse.HTTP를 설정하고 HttpHeaders 연결 옵션을 통해 헤더를 전달하십시오.X-ClickHouse-Replica-Tag를 사용하면 ClickHouse HTTP 세션을 생성하지 않고도 특정 레플리카에 요청을 고정할 수 있습니다. 동시에 실행되는 요청에서도 SESSION_IS_LOCKED 오류 없이 동일한 태그를 재사용할 수 있습니다.쓰기 후 읽기 일관성
다중 레플리카 서비스에서는 한 레플리카에 쓴 데이터가 복제가 완료될 때까지 다른 레플리카에서 보이지 않을 수 있습니다.X-ClickHouse-Replica-Tag 헤더와 함께 쓰기 요청을 전송한 후, 후속 읽기 요청에서도 동일한 헤더 값을 재사용하십시오. 프록시가 두 요청을 동일한 레플리카로 라우팅하므로 다른 레플리카의 복제가 아직 완료되지 않았더라도 방금 쓴 데이터를 읽을 수 있습니다. 이 패턴은 대화형 애플리케이션이나 다음 단계로 진행하기 전에 삽입을 검증하는 ETL 작업처럼 데이터를 쓴 직후 동일한 데이터를 다시 읽는 워크로드에 적합합니다.모든 레플리카에 걸쳐 더 강력한 일관성을 보장하려면 ClickHouse Cloud에서 select_sequential_consistency를 1로 설정할 수도 있습니다.연결된 레플리카 확인
동일한X-ClickHouse-Replica-Tag 값으로 SELECT hostName() 예시를 다시 실행하십시오. 레플리카 수가 변경되지 않았다면 동일한 호스트명이 반환됩니다. 다른 헤더 값은 다른 레플리카에 매핑될 수 있습니다.레거시 하위 도메인 기반 라우팅
레거시 하위 도메인 기반 라우팅의 작동 방식
레거시 하위 도메인 기반 라우팅의 작동 방식
이전에는 Replica-aware 라우팅을 활성화하면 서비스 호스트명에 와일드카드 하위 도메인을 추가로 사용할 수 있었습니다. 호스트명이
abcxyz123.us-west-2.aws.clickhouse.cloud인 서비스의 경우, *.sticky.abcxyz123.us-west-2.aws.clickhouse.cloud(예: aaa.sticky.abcxyz123.us-west-2.aws.clickhouse.cloud)와 일치하는 모든 호스트명은 Envoy가 해시를 사용해 일관되게 특정 레플리카로 라우팅했습니다. 원래 호스트명은 기본 라우팅 알고리즘인 LEAST_CONNECTION load balancing을 계속 사용했습니다.Replica-aware 라우팅의 한계
레플리카 수가 변경되면 고정 연결도 변경됩니다
Replica-aware 라우팅은 워크로드 격리가 아닙니다
Private Link 및 레거시 하위 도메인 방식
*.sticky.* 호스트명 패턴에 대한 DNS를 추가해야 하며, 설정이 올바르지 않으면 레플리카 간 부하가 불균형하게 분산될 수 있습니다.
Replica-aware 라우팅에는 HTTP 프로토콜이 필요합니다
문제 해결
- 서비스에서 지원하는 라우팅 메서드(
X-ClickHouse-Replica-Tag헤더 또는 레거시session_idURL 쿼리 매개변수)를 사용하고 있는지 확인하세요. - 모든 요청에서 정확히 동일한 라우팅 값을 사용하는지 확인하세요.
- 활성화 후 잠시 기다리세요. 적용되기까지 1분 이내가 걸릴 수 있습니다.
- 최근 레플리카 수가 변경되었는지 확인하세요. 스케일링 후에는 리매핑이 발생할 수 있습니다.
SELECT hostName()을 사용하여 새 매핑을 확인하세요.