S3 테이블 함수
s3 테이블 함수를 사용하면 S3 호환 스토리지에서 파일을 읽고 쓸 수 있습니다. 구문은 다음과 같습니다:
- path — 파일 경로를 포함하는 버킷 URL입니다. 읽기 전용 모드에서는 다음 와일드카드를 지원합니다:
*,?,{abc,def},{N..M}. 여기서N,M은 숫자이고'abc','def'는 문자열입니다. 자세한 내용은 경로에서 와일드카드 사용 문서를 참조하십시오. - format — 파일의 포맷입니다.
- structure — 테이블의 구조입니다. 포맷은
'column1_name column1_type, column2_name column2_type, ...'입니다. - compression — 이 매개변수는 선택 사항입니다. 지원되는 값은
none,gzip/gz,brotli/br,xz/LZMA,zstd/zst입니다. 기본적으로 파일 확장자를 기준으로 압축을 자동 감지합니다.
준비
DESCRIBE 문을 사용하면 이를 직접 확인할 수 있습니다:
DESCRIBE TABLE 문의 출력에는 S3 버킷에 저장된 이 데이터를 ClickHouse가 어떻게 자동으로 추론하는지가 표시됩니다. 또한 gzip 압축 포맷도 자동으로 인식하고 압축을 해제합니다:
MergeTree 테이블을 준비합니다. 아래 구문은 기본 데이터베이스에 trips라는 이름의 테이블을 생성합니다. 특히 앞서 추론한 일부 데이터 타입을 조정했으며, 불필요한 추가 저장 공간 사용과 성능 오버헤드를 초래할 수 있는 Nullable() 데이터 타입 수정자는 사용하지 않도록 했습니다:
pickup_date 필드에서 파티셔닝을 사용한 점에 유의하세요. 일반적으로 파티션 키는 데이터 관리를 위해 사용하지만, 이후에는 이 키를 사용해 S3 쓰기를 병렬화합니다.
택시 데이터셋의 각 항목은 택시 운행 1건에 해당합니다. 이 익명화된 데이터는 S3 버킷 https://datasets-documentation.s3.eu-west-3.amazonaws.com/ 의 nyc-taxi 폴더 아래에 압축된 2천만 개의 레코드로 구성되어 있습니다. 데이터는 TSV 포맷이며, 파일당 약 100만 개의 행이 들어 있습니다.
S3에서 데이터 읽기
TabSeparatedWithNames 포맷은 첫 번째 행에 컬럼 이름을 포함하므로, 컬럼을 따로 나열할 필요가 없다는 점에 유의하십시오. CSV 또는 TSV 같은 다른 포맷에서는 이 쿼리에 대해 c1, c2, c3 등과 같이 자동 생성된 컬럼이 반환됩니다.
또한 쿼리는 버킷 경로와 파일 이름 정보를 각각 제공하는 _path, _file 같은 가상 컬럼도 지원합니다. 예시는 다음과 같습니다:
MergeTree 테이블로 가져오십시오.
clickhouse-local 사용
clickhouse-local 프로그램을 사용하면 ClickHouse 서버를 배포하거나 구성하지 않고도 로컬 파일을 빠르게 처리할 수 있습니다. s3 테이블 함수를 사용하는 모든 쿼리는 이 유틸리티로 실행할 수 있습니다. 예시:
S3에서 데이터 삽입
s3 함수와 간단한 INSERT 구문을 함께 사용합니다. 대상 테이블이 필요한 구조를 제공하므로 컬럼을 나열할 필요는 없습니다. 이 경우 컬럼은 테이블 DDL 구문에 지정된 순서대로 나타나야 합니다. 컬럼은 SELECT 절에서의 위치를 기준으로 매핑됩니다. 1,000만 개의 모든 행을 삽입하는 작업은 ClickHouse 인스턴스에 따라 몇 분 정도 걸릴 수 있습니다. 아래에서는 빠른 응답을 위해 100만 개의 행만 삽입합니다. 필요에 따라 LIMIT 절이나 컬럼 선택을 조정해 일부 데이터만 가져오십시오:
ClickHouse Local을 사용한 원격 삽입
clickhouse-local을 사용해 S3 데이터를 삽입할 수 있습니다. 아래 예시에서는 S3 버킷에서 데이터를 읽어 remote 함수를 사용해 ClickHouse에 삽입합니다:
이를 보안 SSL connection을 통해 실행하려면
remoteSecure 함수를 사용하십시오.데이터 내보내기
s3 테이블 함수를 사용하면 S3의 파일에 쓸 수 있습니다. 이를 위해서는 적절한 권한이 필요합니다. 필요한 자격 증명은 요청에 함께 전달하지만, 더 많은 옵션은 자격 증명 관리 페이지를 참조하십시오.
아래의 간단한 예시에서는 테이블 함수를 소스가 아니라 대상으로 사용합니다. 여기서는 trips 테이블의 10,000개 행을 버킷으로 스트리밍하면서 lz4 압축과 CSV 출력 유형을 지정합니다:
s3 함수에서 컬럼을 지정할 필요도 없습니다. 이 역시 SELECT에서 추론됩니다.
대용량 파일 분할
INSERT 명령을 여러 번 실행하여 데이터의 일부만 대상으로 지정할 수도 있습니다. ClickHouse는 PARTITION 키를 사용해 파일을 자동으로 분할하는 기능을 제공합니다.
아래 예시에서는 rand() 함수의 modulus를 사용해 10개의 파일을 생성합니다. 생성된 파티션 ID가 파일 이름에서 어떻게 참조되는지 확인하십시오. 그 결과 trips_0.csv.lz4, trips_1.csv.lz4처럼 숫자 접미사가 붙은 10개의 파일이 생성됩니다:
payment_type이 카디널리티가 5인 자연스러운 파티셔닝 키 역할을 합니다.
클러스터 활용
INSERT INTO SELECT 쿼리를 수행할 때 분산 테이블에 삽입하면 일부 리소스 부담을 줄일 수 있지만, 여전히 단일 노드가 데이터를 읽고, 파싱하고, 처리해야 합니다. 이 문제를 해결하고 읽기를 수평 확장할 수 있도록 s3Cluster 함수를 제공합니다.
쿼리를 수신하는 노드(initiator)는 클러스터의 모든 노드에 연결을 생성합니다. 읽어야 할 파일을 결정하는 glob pattern은 파일 집합으로 해석됩니다. initiator는 이 파일들을 worker 역할을 하는 클러스터의 노드들에 분배합니다. 그리고 각 worker는 읽기를 마칠 때마다 다음에 처리할 파일을 요청합니다. 이 과정을 통해 읽기를 수평 확장할 수 있습니다.
s3Cluster 함수는 단일 노드 variant와 동일한 포맷을 사용하지만, worker 노드를 지정하기 위해 대상 클러스터를 반드시 지정해야 합니다:
cluster_name— 원격 및 로컬 서버에 대한 주소 집합과 연결 매개변수를 구성하는 데 사용되는 클러스터의 이름입니다.source— 파일 하나 또는 여러 파일에 대한 URL입니다. 읽기 전용 모드에서 다음 와일드카드를 지원합니다:*,?,{'abc','def'}및{N..M}. 여기서 N, M은 숫자이고 abc, def는 문자열입니다. 자세한 내용은 Wildcards In Path를 참조하십시오.access_key_idandsecret_access_key— 지정된 엔드포인트와 함께 사용할 자격 증명을 지정하는 키입니다. 선택 사항입니다.format— 파일의 포맷입니다.structure— 테이블의 구조입니다. 포맷은 ‘column1_name column1_type, column2_name column2_type, …’입니다.
s3 함수와 마찬가지로, 버킷이 보안되지 않았거나 환경을 통해 보안을 구성한 경우(예: IAM roles) 자격 증명은 선택 사항입니다. 그러나 s3 함수와 달리, 22.3.1부터는 요청에서 구조를 지정해야 합니다. 즉, 스키마는 추론되지 않습니다.
이 함수는 대부분의 경우 INSERT INTO SELECT의 일부로 사용됩니다. 이 경우 대개 분산 테이블에 삽입하게 됩니다. 아래에서는 trips_all이 분산 테이블인 간단한 예시를 보여 줍니다. 이 테이블은 events 클러스터를 사용하지만, 읽기와 쓰기에 사용되는 노드의 일관성은 필수 요구 사항이 아닙니다:
s3cluster 함수에 대해 parallel_distributed_insert_select 매개변수를 설정하십시오.
S3 테이블 엔진
s3 함수는 S3에 저장된 데이터에 대해 ad-hoc 쿼리를 수행할 수 있게 해주지만, 구문이 다소 장황합니다. S3 테이블 엔진을 사용하면 버킷 URL과 자격 증명을 반복해서 지정할 필요가 없습니다. 이를 위해 ClickHouse는 S3 테이블 엔진을 제공합니다.
path— 파일 경로를 포함한 버킷 URL입니다. 읽기 전용 모드에서는 다음 와일드카드를 지원합니다:*,?,{abc,def}및{N..M}. 여기서 N, M은 숫자이고, ‘abc’, ‘def’는 문자열입니다. 자세한 내용은 여기를 참조하십시오.format— 파일의 포맷입니다.aws_access_key_id,aws_secret_access_key- AWS 계정 사용자의 장기 자격 증명입니다. 이를 사용해 요청을 인증할 수 있습니다. 이 매개변수는 선택 사항입니다. 자격 증명을 지정하지 않으면 설정 파일의 값을 사용합니다. 자세한 내용은 자격 증명 관리를 참조하십시오.compression— 압축 유형입니다. 지원되는 값: none, gzip/gz, brotli/br, xz/LZMA, zstd/zst. 이 매개변수는 선택 사항입니다. 기본적으로 파일 확장자를 기준으로 압축을 자동 감지합니다.
데이터 읽기
https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/ 버킷에 있는 처음 10개의 TSV 파일을 사용해 trips_raw라는 테이블을 생성합니다. 각 파일에는 100만 개의 행이 포함되어 있습니다:
{0..9} pattern을 사용한 점에 유의하십시오. 생성이 완료되면 이 table은 다른 table과 마찬가지로 쿼리할 수 있습니다:
데이터 삽입
S3 테이블 엔진은 병렬 읽기를 지원합니다. 쓰기는 테이블 정의에 글롭 패턴이 포함되지 않은 경우에만 지원됩니다. 따라서 위 테이블에는 쓸 수 없습니다.
쓰기 동작을 보여주기 위해, 쓰기 가능한 S3 버킷을 가리키는 테이블을 생성하십시오:
s3_create_new_file_on_insert=1설정을 지정합니다. 그러면 삽입할 때마다 새 파일이 생성됩니다. 각 파일 끝에는 삽입 작업이 수행될 때마다 단조롭게 증가하는 숫자 접미사가 추가됩니다. 위 예시에서는 다음 삽입 시 trips_1.bin 파일이 생성됩니다.s3_truncate_on_insert=1설정을 지정합니다. 그러면 파일이 잘리며, 완료 후에는 새로 삽입된 행만 포함하게 됩니다.
s3_truncate_on_insert가 우선 적용됩니다.
S3 테이블 엔진에 대한 몇 가지 참고 사항:
- 일반적인
MergeTree계열 테이블과 달리S3테이블을 삭제해도 기반 데이터는 삭제되지 않습니다. - 이 테이블 유형의 전체 설정은 여기에서 확인할 수 있습니다.
- 이 엔진을 사용할 때는 다음 사항에 유의하십시오:
ALTER쿼리는 지원되지 않습니다SAMPLE작업은 지원되지 않습니다- 인덱스, 즉 프라이머리 인덱스나 스킵 인덱스 개념이 없습니다.
자격 증명 관리
s3 함수 또는 S3 테이블 정의에 자격 증명을 전달했습니다. 가끔 사용하는 경우에는 이 방법도 괜찮을 수 있지만, 운영 환경에서는 자격 증명을 더 직접적으로 드러내지 않는 인증 메커니즘이 필요합니다. 이를 위해 ClickHouse는 여러 가지 옵션을 제공합니다.
-
config.xml 또는 conf.d 아래의 이에 해당하는 설정 파일에 연결 정보를 지정합니다. 아래에는 debian 패키지로 설치했다고 가정한 예시 파일의 내용이 나와 있습니다.
이 자격 증명은 위 엔드포인트가 요청 URL과 정확히 접두사 일치하는 모든 요청에 사용됩니다. 또한 이 예시에서는 액세스 키와 시크릿 키 대신 authorization header를 선언할 수 있다는 점도 확인할 수 있습니다. 지원되는 설정의 전체 목록은 여기에서 확인할 수 있습니다.
-
위 예시에서는 구성 매개변수
use_environment_credentials를 사용할 수 있음을 보여 줍니다. 이 구성 매개변수는s3수준에서 전역으로도 설정할 수 있습니다.이 설정을 사용하면 환경에서 S3 자격 증명을 가져오도록 시도하므로 IAM 역할을 통해 액세스할 수 있습니다. 구체적으로는 다음 순서로 자격 증명을 조회합니다.- 환경 변수
AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY,AWS_SESSION_TOKEN조회 - $HOME/.aws 확인
- AWS Security Token Service, 즉
AssumeRoleAPI를 통해 획득한 임시 자격 증명 - ECS 환경 변수
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI또는AWS_CONTAINER_CREDENTIALS_FULL_URI및AWS_ECS_CONTAINER_AUTHORIZATION_TOKEN에서 자격 증명 확인 - Amazon EC2 instance metadata를 통해 자격 증명을 가져옵니다. 단, AWS_EC2_METADATA_DISABLED가 true로 설정되어 있지 않아야 합니다.
- 동일한 설정을 같은 접두사 일치 규칙을 사용하여 특정 엔드포인트에 대해서도 설정할 수 있습니다.
- 환경 변수
성능 최적화
S3 저장소 튜닝
Wide and Compact를 사용합니다. 현재 구현은 ClickHouse의 기본 동작(min_bytes_for_wide_part 및 min_rows_for_wide_part 설정으로 제어됨)을 따르지만, 향후 릴리스에서는 S3의 경우 이 동작이 달라질 것으로 예상합니다. 예를 들어 min_bytes_for_wide_part의 기본값을 더 크게 설정해 Compact 포맷을 더 많이 사용하도록 유도하여 파일 수를 줄일 수 있습니다. 따라서 S3 저장소만 사용하는 경우 이러한 설정을 조정하는 것이 좋습니다.
S3 기반 MergeTree
s3 함수와 관련 테이블 엔진을 사용하면 익숙한 ClickHouse 구문으로 S3의 데이터를 쿼리할 수 있습니다. 하지만 데이터 관리 기능과 성능 면에서는 한계가 있습니다. 프라이머리 인덱스를 지원하지 않고, no-cache도 지원하지 않으며, 파일 삽입은 사용자가 직접 관리해야 합니다.
ClickHouse는 특히 상대적으로 “콜드한” 데이터에 대해서는 쿼리 성능이 덜 중요하고, 스토리지와 컴퓨트를 분리하려는 경우 S3가 매력적인 스토리지 솔루션이 될 수 있음을 인식하고 있습니다. 이를 위해 MergeTree 엔진의 스토리지로 S3를 사용할 수 있도록 지원합니다. 이를 통해 S3의 확장성과 비용상 이점을 활용하는 동시에 MergeTree 엔진의 삽입 및 쿼리 성능도 누릴 수 있습니다.
스토리지 계층
디스크 생성
config.xml을 확장하거나, 가능하면 conf.d 아래에 새 파일을 추가하십시오. S3 디스크 선언 예시는 아래와 같습니다.
스토리지 정책 만들기
테이블 생성
테이블 수정
<path>``를 통해 구성된 단일 디스크로만 이루어져 있습니다. 볼륨 이름과 디스크는 바뀌지 않는다는 점에 유의하십시오. 테이블(table)에 새로 삽입되는 데이터는 move_factor * disk_size에 도달할 때까지 기본 디스크에 저장되며, 그 시점에 S3로 이동됩니다.
복제 처리
ReplicatedMergeTree 테이블 엔진으로 복제를 구성할 수 있습니다. 자세한 내용은 S3 객체 스토리지를 사용해 두 AWS 리전에 걸쳐 단일 세그먼트를 복제하는 가이드를 참조하십시오.
읽기 및 쓰기
- 기본적으로 쿼리 처리 파이프라인의 각 단계에서 사용할 수 있는 최대 쿼리 처리 스레드 수는 코어 수와 같습니다. 일부 단계는 다른 단계보다 병렬화가 더 잘되므로, 이 값은 상한선 역할을 합니다. 데이터가 디스크에서 스트리밍되기 때문에 여러 쿼리 단계가 동시에 실행될 수 있습니다. 따라서 실제 쿼리에 사용되는 스레드 수는 이 값을 초과할 수 있습니다. 이 값은 max_threads 설정으로 변경할 수 있습니다.
- S3 읽기는 기본적으로 비동기 방식으로 수행됩니다. 이 동작은
remote_filesystem_read_method설정으로 결정되며, 기본값은threadpool입니다. 요청을 처리할 때 ClickHouse는 그래뉼을 스트라이프 단위로 읽습니다. 각 스트라이프에는 여러 컬럼이 포함될 수 있습니다. 스레드는 해당 그래뉼의 컬럼을 하나씩 읽습니다. 이를 동기식으로 처리하는 대신, 데이터를 기다리기 전에 모든 컬럼에 대해 프리페치를 수행합니다. 이 방식은 각 컬럼마다 동기적으로 기다리는 것보다 성능이 크게 향상됩니다. 대부분의 경우 이 설정을 변경할 필요는 없습니다. 자세한 내용은 성능 최적화를 참조하십시오. - 쓰기는 병렬로 수행되며, 동시에 사용할 수 있는 파일 쓰기 스레드는 최대 100개입니다. 기본값이 1000인
max_insert_delayed_streams_for_parallel_write는 병렬로 기록되는 S3 blob 수를 제어합니다. 기록 중인 각 파일마다 버퍼(~1MB)가 필요하므로, 이는 사실상 INSERT의 메모리 사용량을 제한합니다. 서버 메모리가 적은 환경에서는 이 값을 낮추는 것이 적절할 수 있습니다.
S3 객체 스토리지를 ClickHouse 디스크로 사용
ClickHouse에서 S3 버킷을 디스크로 사용하도록 구성
- 스토리지 구성을 저장할 새 파일을 ClickHouse
config.d디렉터리에 생성합니다.
- 스토리지 구성을 위해 다음을 추가합니다. 이때 버킷 경로, 액세스 키, 시크릿 키는 앞선 단계의 값으로 바꾸십시오.
<disks> 태그 안의 s3_disk 및 s3_cache 태그는 임의의 레이블입니다. 다른 이름으로 설정할 수 있지만, 디스크를 참조하려면 <policies> 태그 아래의 <disk> 태그에서도 동일한 레이블을 사용해야 합니다.
<S3_main> 태그 역시 임의이며, ClickHouse에서 리소스를 생성할 때 식별자 스토리지 대상으로 사용할 정책 이름입니다.위에 표시된 구성은 ClickHouse 버전 22.8 이상 기준입니다. 이전 버전을 사용 중이라면 데이터 저장 문서를 참조하십시오.S3 사용에 관한 자세한 내용:
통합 가이드: S3 기반 MergeTree- 파일 소유자를
clickhouse사용자와 그룹으로 변경합니다.
- 변경 사항이 적용되도록 ClickHouse 인스턴스를 다시 시작합니다.
테스트
- 다음과 같이 ClickHouse client로 로그인합니다
- 새 S3 스토리지 정책을 지정하여 테이블을 생성합니다
- 테이블이 올바른 정책으로 생성되었는지 확인하세요
- 테이블에 테스트 행을 삽입합니다
- 행 확인하기
- AWS 콘솔에서 버킷으로 이동한 다음, 새로 만든 버킷과 폴더를 선택합니다. 다음과 비슷한 화면이 표시됩니다:
S3 객체 스토리지를 사용해 단일 세그먼트를 2개의 AWS 리전에 걸쳐 복제하기
배포 계획 수립
소프트웨어 설치
ClickHouse 서버 노드
ClickHouse 배포
chnode1, chnode2로 지정합니다.
chnode1은 한 AWS 리전에, chnode2는 다른 AWS 리전에 배치하십시오.
ClickHouse Keeper 배포
keepernode1, keepernode2, keepernode3로 지정합니다. keepernode1은 chnode1과 동일한 리전에, keepernode2는 chnode2와 동일한 리전에 배포할 수 있습니다. keepernode3는 두 리전 중 어느 곳에든 배포할 수 있지만, 해당 리전의 ClickHouse 노드와는 서로 다른 가용 영역에 배포해야 합니다.
ClickHouse Keeper 노드에서 배포 단계를 수행할 때는 설치 지침을 참조하십시오.
S3 버킷 만들기
chnode1 및 chnode2를 배치한 각 리전에 하나씩, 총 2개의 S3 버킷을 만드십시오.
버킷과 IAM 역할을 만드는 단계별 지침이 필요하면 S3 버킷 및 IAM 역할 만들기를 펼쳐서 안내에 따라 진행하십시오.
S3 버킷과 IAM 사용자 생성
S3 버킷과 IAM 사용자 생성
이 문서에서는 AWS IAM 사용자를 구성하고, S3 버킷을 생성하며, ClickHouse가 해당 버킷을 S3 디스크로 사용하도록 설정하는 기본적인 방법을 설명합니다.
실제로 적용할 권한은 보안 팀과 협의하여 결정하시고, 이 문서의 내용은 시작점으로 참고하시기 바랍니다.
















AWS IAM 사용자 생성
다음 단계에서는 서비스 계정 사용자(로그인 사용자가 아닌)를 생성합니다.- AWS IAM Management Console에 로그인합니다.
-
Users메뉴에서Create user를 선택합니다.

- 사용자 이름을 입력하고 자격 증명 유형을
Access key - Programmatic access로 설정한 후Next: Permissions를 선택하세요

- 사용자를 어떤 그룹에도 추가하지 말고
다음: Tags를 선택하세요

- 태그를 추가할 필요가 없다면
Next: Review를 선택하세요

Create User를 클릭하세요
사용자에게 권한이 없다는 경고 메시지는 무시해도 됩니다. 다음 섹션에서 해당 사용자에게 버킷 권한이 부여됩니다.

- 이제 사용자가 생성되었으므로
show를 클릭한 다음 액세스 키와 시크릿 키를 복사하십시오.
키는 다른 곳에 저장해 두십시오. 비밀 액세스 키는 지금만 확인할 수 있습니다.

- 해지를 클릭한 다음 사용자 화면에서 해당 사용자를 찾습니다.

- ARN(Amazon Resource Name)을 복사한 다음, 버킷의 액세스 정책을 구성할 때 사용할 수 있도록 저장합니다.

S3 버킷 생성
- S3 버킷 섹션에서
Create bucket을 선택하십시오

- 버킷 이름을 입력하고, 나머지 옵션은 기본값으로 그대로 둡니다
버킷 이름은 조직 내에서만이 아니라 AWS 전체에서 고유해야 하며, 그렇지 않으면 오류가 발생합니다.
Block all Public Access는 활성화된 상태로 유지하십시오. 공개 액세스는 필요하지 않습니다.

- 페이지 하단의
Create Bucket을 선택하세요

- 링크를 선택하여 ARN을 복사한 다음, 버킷의 액세스 정책을 구성할 때 사용할 수 있도록 저장하십시오.
- 버킷이 생성되면 S3 버킷 목록에서 새 S3 버킷을 찾은 다음 해당 링크를 선택하십시오.

Create folder를 선택하세요

- ClickHouse S3 디스크의 대상 폴더 이름을 입력하고
Create folder를 선택합니다

- 이제 버킷 목록에 폴더가 표시됩니다

- 새 폴더의 체크박스를 선택하고
Copy URL을 클릭하세요. 다음 섹션의 ClickHouse 스토리지 구성에서 사용할 수 있도록 복사한 URL을 저장해 두세요.

Permissions탭을 선택한 다음Bucket Policy섹션에서Edit버튼을 클릭하세요

- 버킷 정책을 추가하세요. 아래는 예시입니다:
사용할 권한을 결정할 때는 보안 팀과 협의하고, 아래 내용은 출발점으로 삼으십시오.
정책 및 설정에 대한 자세한 내용은 AWS 문서를 참조하십시오:
https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-policy-language-overview.html
- 정책 구성을 저장하세요.
/etc/clickhouse-server/config.d/에 배치됩니다. 아래는 한 버킷에 대한 예시 설정 파일이며, 다른 하나도 거의 동일하고 강조 표시된 3개 줄만 다릅니다:
/etc/clickhouse-server/config.d/storage_config.xml
이 가이드의 여러 단계에서는 설정 파일을
/etc/clickhouse-server/config.d/에 배치해야 합니다. 이 경로는 Linux 시스템에서 설정 재정의 파일에 사용하는 기본 위치입니다. 이 디렉터리에 이러한 파일을 넣으면 ClickHouse가 해당 내용을 사용해 기본 구성을 재정의합니다. 이처럼 재정의 디렉터리에 파일을 배치하면 업그레이드 중 구성이 손실되는 것을 방지할 수 있습니다.ClickHouse Keeper 구성
/etc/clickhouse-keeper/keeper_config.xml입니다. 세 개의 Keeper 서버는 모두 동일한 구성을 사용하며, 단 하나의 설정인 <server_id>만 다릅니다.
server_id는 해당 설정 파일을 사용하는 호스트에 할당할 ID를 나타냅니다. 아래 예시에서 server_id는 3이며, 파일의 아래쪽 <raft_configuration> 섹션을 보면 서버 3의 호스트명이 keepernode3인 것을 확인할 수 있습니다. ClickHouse Keeper 프로세스는 이를 바탕으로 리더를 선출할 때와 그 밖의 모든 작업에서 어떤 다른 서버에 연결해야 하는지 판단합니다.
/etc/clickhouse-keeper/keeper_config.xml
<server_id>를 설정하는 것을 잊지 마십시오):
ClickHouse 서버 설정
클러스터 정의
<remote_servers> 섹션에 정의됩니다. 이 예시에서는 cluster_1S_2R 클러스터 1개를 정의하며, 이 클러스터는 2개의 레플리카가 있는 단일 세그먼트로 구성됩니다. 레플리카는 chnode1 및 chnode2 호스트에 있습니다.
/etc/clickhouse-server/config.d/remote-servers.xml
shard 및 replica 세부 정보를 직접 지정하지 않고도 복제된 테이블 엔진을 사용할 수 있습니다. 테이블을 생성한 후 system.tables를 쿼리하면 shard 및 replica 매크로가 어떻게 사용되는지 확인할 수 있습니다.
/etc/clickhouse-server/config.d/macros.xml
위 매크로는
chnode1에 대한 설정이며, chnode2에서는 replica를 replica_2로 설정하십시오.zero-copy 복제 비활성화
allow_remote_fs_zero_copy_replication 설정이 기본적으로 true입니다. 이 재해 복구 시나리오에서는 이 설정을 false로 지정해야 하며, 버전 22.8 이상에서는 기본값이 false입니다.
이 설정이 false여야 하는 이유는 두 가지입니다. 1) 이 기능은 아직 프로덕션 환경에서 사용할 준비가 되어 있지 않습니다. 2) 재해 복구 시나리오에서는 데이터와 메타데이터를 모두 여러 리전(Region)에 저장해야 합니다. allow_remote_fs_zero_copy_replication을 false로 설정하십시오.
/etc/clickhouse-server/config.d/remote-servers.xml
/etc/clickhouse-server/config.d/use_keeper.xml
네트워킹 구성
/etc/clickhouse-server/config.d/에서 구성합니다. 다음은 ClickHouse와 ClickHouse Keeper가 모든 IPv4 인터페이스에서 수신 대기하도록 구성하는 예시입니다. 자세한 내용은 문서 또는 기본 설정 파일 /etc/clickhouse/config.xml을 참조하십시오.
/etc/clickhouse-server/config.d/networking.xml
서버 시작하기
ClickHouse Keeper 실행
ClickHouse Keeper 상태 확인
netcat을 사용해 ClickHouse Keeper에 명령을 보냅니다. 예를 들어 mntr는 ClickHouse Keeper 클러스터의 상태를 반환합니다. 각 Keeper 노드에서 이 명령을 실행하면 한 노드는 리더이고, 나머지 두 노드는 팔로워임을 확인할 수 있습니다:
ClickHouse 서버 실행
ClickHouse 서버 확인
-
클러스터가 존재하는지 확인합니다:
-
ReplicatedMergeTree테이블 엔진을 사용하여 클러스터에 테이블을 생성합니다: -
앞에서 정의한 매크로의 사용 방식을 이해합니다
shard및replica매크로는 앞에서 정의되었으며, 아래 강조된 줄에서 각 ClickHouse 노드에 값이 어떻게 대입되는지 확인할 수 있습니다. 또한uuid값도 사용되는데,uuid는 시스템에서 생성되므로 매크로에는 정의되어 있지 않습니다.
위에 표시된
'clickhouse/tables/{uuid}/{shard} ZooKeeper 경로는 default_replica_path와 default_replica_name을 설정하여 사용자 지정할 수 있습니다. 관련 문서는 여기에서 확인할 수 있습니다.테스트
-
New York City 택시 데이터셋에서 데이터를 추가합니다:
-
데이터가 S3에 저장되는지 확인합니다.
이 쿼리는 디스크에 저장된 데이터 크기와, 어떤 디스크를 사용할지 결정하는 데 적용되는 정책을 보여줍니다.
로컬 디스크의 데이터 크기를 확인합니다. 위 결과에서 수백만 개의 행이 저장된 디스크 크기는 36.42 MiB입니다. 이 데이터는 로컬 디스크가 아니라 S3에 있어야 합니다. 위 쿼리는 로컬 디스크에서 데이터와 메타데이터가 저장되는 위치도 보여줍니다. 로컬 데이터를 확인합니다:각 S3 버킷의 데이터를 확인합니다(합계는 표시되지 않지만, 삽입 후 두 버킷 모두에 약 36 MiB가 저장되어 있습니다):
S3Express
S3Express는 단일 AZ 내에 데이터를 저장합니다. 즉, AZ에 장애가 발생하면 데이터를 사용할 수 없게 됩니다.
S3 디스크
Directory유형의 버킷을 생성합니다- 필요한 모든 권한을 S3 사용자에게 부여하도록 적절한 버킷 정책을 적용합니다(예: 제한 없이 액세스를 허용하려면
"Action": "s3express:*") - 스토리지 정책을 구성할 때
region매개변수를 지정하십시오
S3 저장소
Object URL 경로에서만 사용할 수 있습니다. 예시: