如何将 S3 存储与 ClickHouse 结合使用

本指南介绍如何配置带有 ClickHouse 后端的 Alauda Container Platform Log Storage Management,以便将冷日志数据保存在兼容 S3 的对象存储中。

与 S3 相关的配置项位于 PlatformLogForward(PLF)CR 中,而不在插件安装表单中。通过编辑存储集群上的 PLF 字段启用这些配置项;更改将在 log-storage-operator 完成调谐后生效。

INFO

本指南介绍 ACP 管理的 ClickHouse 热 / 冷分层存储。记录处于活动状态时保留在本地磁盘上,热 TTL 到期后移至 S3,并且仍可通过平台进行查询。

这与日志归档工作流无关;后者会将日志导出到平台之外,以满足长期合规保留要求。

准备工作

确认目标存储集群:

  1. 已安装 Alauda Container Platform Log Storage Management 和 PlatformLogForward.spec.externalStorage.type: clickhouse(请参阅安装)。
  2. PlatformLogForward/platform-default 处于 Ready 状态。
  3. cpaas-system 中的每个 pod 都可以访问兼容 S3 的端点。

此外,您还需要 S3 凭证;如果端点使用带有私有 CA 的 HTTPS,则还需要 CA 证书。

1. 创建 S3 凭证 Secret

在存储集群的 cpaas-system 中,将 S3 凭证存储在 Secret 中。Secret 名称将在下一步中由 PlatformLogForward.spec.clickhouse.s3ColdSecretRef 使用,并且可以是任何符合 DNS 要求的名称。

apiVersion: v1
kind: Secret
metadata:
  name: clickhouse-s3-cold
  namespace: cpaas-system
  labels:
    cpaas.io/credentials: S3     # required so the console filters this Secret in S3 selectors
type: Opaque
stringData:
  ACCESS_KEY_ID: "<access-key-id>"
  SECRET_ACCESS_KEY: "<secret-access-key>"
  ENDPOINT: "https://<s3-endpoint>"
  REGION: "<region>"             # leave empty only if the backend does not require it
  BUCKET: "<bucket-name>"
字段描述
ACCESS_KEY_IDS3 服务的访问密钥。
SECRET_ACCESS_KEYS3 服务的私密密钥。
ENDPOINTS3 服务端点,包括协议。使用 https:// 启用 TLS。
REGIONS3 服务的地域。仅当后端不需要地域时才留空。
BUCKETClickHouse 写入冷数据的存储桶。

在存储集群上应用 Secret:

kubectl apply -f clickhouse-s3-cold.yaml

2. 可选 — 信任 S3 CA

如果 S3 端点使用普通的 http://,或其 HTTPS 证书由系统信任的 CA 签名,请跳过此部分。

在 cpaas-system 中创建名称固定为 clickhouse-ca-certificates 的 CA Secret。请勿更改 Secret 名称、命名空间或键名称;只需替换证书内容。

apiVersion: v1
kind: Secret
metadata:
  name: clickhouse-ca-certificates
  namespace: cpaas-system
type: Opaque
stringData:
  ca-certificates.crt: |
    -----BEGIN CERTIFICATE-----
    <ca-certificate-content>
    -----END CERTIFICATE-----

应用:

kubectl apply -f clickhouse-ca-certificates.yaml

3. 在 PlatformLogForward 上启用分层存储

编辑 PLF 并设置分层存储字段。每个字段都位于 spec.clickhouse 中:

kubectl edit platformlogforward platform-default

添加或替换:

spec:
  clickhouse:
    tieredPolicy:
      enabled: true                              # enable hot / cold tiering
      coldStoragePolicy: "log_s3_cold"           # storage policy name; leave the default unless
                                                 # you configured a custom name in the CHI
    s3ColdSecretRef:
      name: clickhouse-s3-cold                   # Secret created in Step 1
      namespace: cpaas-system
    coldTTL:
      workload: 30                               # days each log type stays on cold storage
      platform: 30                               # after leaving hot storage
      system: 30
      kubernetes: 30
      event: 30
      audit: 90
    ttl:
      workload: 7                                # days each log type stays on hot (local) storage
      platform: 7                                # before it moves to cold
      system: 7
      kubernetes: 7
      event: 30
      audit: 90
字段含义
spec.clickhouse.tieredPolicy.enabled热层/冷层分层的主开关。false(默认值)会将所有数据保留在本地存储中,直到数据被热 TTL 删除。
spec.clickhouse.tieredPolicy.coldStoragePolicy指向 S3 的 ClickHouse 存储策略名称。除非在 ClickHouseInstallation 中自定义了存储策略名称,否则保留默认值。
spec.clickhouse.s3ColdSecretRef携带 S3 凭证和端点的 Secret。引用在第 1 步中创建的 Secret。
spec.clickhouse.ttl.<log-type>按日志类型设置的热数据保留时间,单位为天。超过此时间的记录会从本地存储移至冷存储(启用分层时),或被删除(未启用分层时)。
spec.clickhouse.coldTTL.<log-type>按日志类型设置的冷数据保留时间,单位为天。超过此时间的记录会从 S3 中删除。设置为 0 可使该日志类型永久保留在冷存储中。

保存并退出。log-storage-operator 会运行 schema-migrations Job,以应用新的存储策略和 TTL 设置;请监控 PLF 状态,直到其恢复为 Ready:

kubectl get platformlogforward platform-default -w

4. 可选 — 将 S3 作为 ClickHouse 的唯一数据位置

通过在 ClickHouseInstallation 中将 ClickHouse 存储策略设置为仅使用 S3 的策略,然后通过 spec.clickhouse.s3DataSecretRef 让 PlatformLogForward 指向同一个 Secret,启用 S3 作为 ClickHouse 的唯一数据位置(不使用本地热层)。

此模式适用于评估,或适用于本地磁盘成本占主导的备份场景。由于每次查询都需要往返 S3,因此会牺牲查询延迟。

spec:
  clickhouse:
    s3DataSecretRef:
      name: clickhouse-s3-cold
      namespace: cpaas-system
WARNING
  • 即使在仅使用 S3 的模式下,ClickHouse 元数据仍存储在本地存储中(或 ClickHouseInstallation 的 StorageClass 中)。元数据性能仍然很重要:请为元数据卷规划持续的 ≥ 200 MiB/s 读写吞吐量,以确保合并和插入正常运行。
  • 尽可能优先使用 LocalVolume 存储元数据;如果必须使用 StorageClass,请选择高性能后端。

项目级冷数据保留

项目级覆盖设置允许你将某些项目的日志保留更长(或更短)的时间,而不是使用 PLF 的默认设置。请参阅如何设置项目冷数据的保留时间。

注意事项和限制

  • 每个 PLF 仅支持一个冷数据 Secret 和一个数据平面 Secret。请将两者指向同一个 S3 存储桶,或指向同一 S3 端点中的两个存储桶。
  • 不要以明文形式暴露 S3 访问密钥;请将其保存在 Secret 资源中,并从该资源加载。
  • 禁用分层存储必须重新部署 ClickHouse 表布局。请在拥有生产数据之前规划好这一选择。
  • 安装后可以调整冷数据 TTL;更改将在下一次 reconcile 时生效。
  • 冷数据保留行为不同于日志归档。有关归档路径,请参阅如何将日志归档到第三方存储。
  • 在灾难恢复场景中,不要让主 ClickHouse 集群和备用 ClickHouse 集群指向同一个 S3 存储桶。

相关主题