连接设置
Options 结构体来控制客户端行为。可用设置如下:
TLS
DSN/OpenDB/Open) 都会使用 Go tls package 建立安全连接。如果 Options 结构体中包含一个非空的 tls.Config 指针,客户端就会识别并使用 TLS。
TLS.Config 通常足以连接到 ClickHouse server 的安全 native 端口 (通常为 9440) 。如果 ClickHouse server 没有有效的证书 (例如证书已过期、hostname 不匹配,或不是由公开认可的根证书颁发机构签发) ,则可以将 InsecureSkipVerify 设为 true,但强烈不建议这样做。
tls.Config 结构体中设置相应字段。其中可以包括指定特定的密码套件、强制使用某个 TLS 版本 (如 1.2 或 1.3) 、添加内部 CA 证书链,以及在 ClickHouse server 要求时添加客户端证书 (及其私钥) ,还包括更专门的安全配置中的大多数其他选项。
身份验证
连接到多个节点
Addr 结构体指定多个地址。
ConnOpenInOrder(默认) - 按顺序使用地址。只有当无法使用列表中靠前的地址建立连接时,才会使用后面的地址。本质上,这是一种故障转移策略。ConnOpenRoundRobin- 通过轮询策略在各个地址之间均衡负载。ConnOpenRandom- 从地址列表中随机选择一个节点。
ConnOpenStrategy 选项进行控制
连接池
MaxOpenConns 个连接,而连接池的最大空闲连接数由 MaxIdleConns 控制。客户端每次执行查询时都会从连接池获取一个连接,并在使用后将其归还以供复用。连接会在整个批次的生命周期内持续占用,并在调用 Send() 时释放。
除非用户设置 MaxOpenConns=1,否则无法保证后续查询会继续使用连接池中的同一个连接。这种需求并不常见,但在使用临时表时可能是必需的。
另外请注意,ConnMaxLifetime 默认值为 1 小时。如果有节点离开集群,这可能导致发往 ClickHouse 的负载分布不均。例如,当某个节点不可用时,连接会被分配到其他节点。即使该节点随后恢复并重新加入集群,这些连接默认也会继续保持,并且在 1 小时内不会重新建立。在高负载场景下,建议适当调低该值。
Native (TCP) 和 HTTP 协议均启用了连接池。
日志
Options 中的 Logger 字段,使用 Go 标准 log/slog 包进行结构化日志记录。旧版的 Debug 和 Debugf 字段已弃用,但为保持向后兼容性仍然可用 (优先级:Debugf > Logger > 空操作) 。
压缩
LZ4 和 ZSTD 压缩。这仅在块级别进行。可通过在连接配置中加入 Compression 配置来启用压缩。
gzip、deflate 和 br。详情请参见 Database/SQL API - 压缩。
TCP 与 HTTP
要将任一 API 切换到 HTTP: