johnpoint

johnpoint

(。・∀・)ノ゙嗨
github

使用 docker-compose 搭建 ClickHouse 集群

Docker Compose 配置#

version: '3'
services:
  clickhouse-server-ck1:
    restart: on-failure:10 # 退出非0重启,尝试10次
    image: yandex/clickhouse-server
    container_name: ck1
    networks:
      - ck-network
    ports:
      - "8124:8123"
      - "9001:9000"
      - "9010:9004"
    volumes:
      - `pwd`/clickhouse/:/var/lib/clickhouse/
      - `pwd`/clickhouse-server/:/etc/clickhouse-server/
      - `pwd`/log/clickhouse-server/:/var/log/clickhouse-server/
    ulimits:
      nofile:
        soft: "262144"
        hard: "262144"
    depends_on:
      - zookeeper-1

  clickhouse-server-ck2:
    restart: on-failure:10 # 退出非0重启,尝试10次
    image: yandex/clickhouse-server
    container_name: ck2
    networks:
      - ck-network
    ports:
      - "8125:8123"
      - "9002:9000"
      - "9011:9004"
    volumes:
      - `pwd`/clickhouse2/:/var/lib/clickhouse/
      - `pwd`/clickhouse-server2/:/etc/clickhouse-server/
      - `pwd`/log/clickhouse-server2/:/var/log/clickhouse-server/
    ulimits:
      nofile:
        soft: "262144"
        hard: "262144"
    depends_on:
      - zookeeper-1

  clickhouse-server-ck3:
    restart: on-failure:10 # 退出非0重启,尝试10次
    image: yandex/clickhouse-server
    container_name: ck3
    networks:
      - ck-network
    ports:
      - "8126:8123"
      - "9003:9000"
      - "9012:9004"
    volumes:
      - `pwd`/clickhouse3/:/var/lib/clickhouse/
      - `pwd`/clickhouse-server3/:/etc/clickhouse-server/
      - `pwd`/log/clickhouse-server3/:/var/log/clickhouse-server/
    ulimits:
      nofile:
        soft: "262144"
        hard: "262144"
    depends_on:
      - zookeeper-1

  zookeeper-1:
    restart: on-failure:10 # 退出非0重启,尝试10次
    image: zookeeper:3.8.0
    container_name: zookeeper1
    networks:
      - ck-network
    ports:
      - "2181:2181"
    volumes:
      - `pwd`/zookeeper/conf/:/apache-zookeeper-3.8.0-bin/conf/
      - `pwd`/zookeeper/data/:/data
      - `pwd`/zookeeper/datalog/:/datalog
      - `pwd`/zookeeper/logs/:/logs
    ulimits:
      nofile:
        soft: "262144"
        hard: "262144"

networks:
  ck-network:

Clickhouse 配置文件#

<?xml version="1.0"?>
<!--
  注意: 用户和查询级别设置在 "users.xml" 文件中设置。
  如果您不小心在这里指定了用户级别设置,服务器将无法启动。
  您可以将设置移动到 "users.xml" 文件中的正确位置
   或在这里添加 <skip_check_for_incorrect_settings>1</skip_check_for_incorrect_settings>。
-->
<clickhouse>
    <logger>
        <!-- 可能的级别 [1]:

          - none (关闭日志)
          - fatal
          - critical
          - error
          - warning
          - notice
          - information
          - debug
          - trace
          - test (不用于生产)

            [1]: https://github.com/pocoproject/poco/blob/poco-1.9.4-release/Foundation/include/Poco/Logger.h#L105-L114
        -->
        <level>trace</level>
        <log>/var/log/clickhouse-server/clickhouse-server.log</log>
        <errorlog>/var/log/clickhouse-server/clickhouse-server.err.log</errorlog>
        <!-- 轮换策略
             参见 https://github.com/pocoproject/poco/blob/poco-1.9.4-release/Foundation/include/Poco/FileChannel.h#L54-L85
          -->
        <size>1000M</size>
        <count>10</count>
        <!-- <console>1</console> --> <!-- 默认行为是自动检测(如果不是守护进程模式且是 tty,则记录到控制台) -->

        <!-- 每级别覆盖(遗留):

        例如,要抑制 ConfigReloader 的日志记录,可以使用:
        注意: levels.logger 是保留的,见下文。
        -->
        <!--
        <levels>
          <ConfigReloader>none</ConfigReloader>
        </levels>
        -->

        <!-- 每级别覆盖:

        例如,要抑制默认用户的 RBAC 日志记录,可以使用:
        (但请注意,记录器名称可能会因版本而异,即使在小版本升级后)
        -->
        <!--
        <levels>
          <logger>
            <name>ContextAccess (default)</name>
            <level>none</level>
          </logger>
          <logger>
            <name>DatabaseOrdinary (test)</name>
            <level>none</level>
          </logger>
        </levels>
        -->
    </logger>

    <!-- 在选项请求中向响应添加头部。 OPTIONS 方法用于 CORS 预检请求。 -->
    <!-- 默认情况下关闭。以下头部是 CORS 的强制要求。-->
    <!-- http_options_response>
        <header>
            <name>Access-Control-Allow-Origin</name>
            <value>*</value>
        </header>
        <header>
            <name>Access-Control-Allow-Headers</name>
            <value>origin, x-requested-with</value>
        </header>
        <header>
            <name>Access-Control-Allow-Methods</name>
            <value>POST, GET, OPTIONS</value>
        </header>
        <header>
            <name>Access-Control-Max-Age</name>
            <value>86400</value>
        </header>
    </http_options_response -->

    <!-- 在 clickhouse-client 中显示的名称。
         默认情况下,任何带有 "production" 的内容将在查询提示中以红色突出显示。
    -->
    <!--display_name>production</display_name-->

    <!-- HTTP API 的端口。还请参见 'https_port' 以进行安全连接。
         此接口也被 ODBC 和 JDBC 驱动程序(DataGrip、Dbeaver 等)使用
         以及大多数 Web 接口(嵌入式 UI、Grafana、Redash 等)。
      -->
    <http_port>8123</http_port>

    <!-- 通过原生协议与以下内容进行交互的端口:
         - clickhouse-client 和其他原生 ClickHouse 工具(clickhouse-benchmark、clickhouse-copier);
         - clickhouse-server 与其他 clickhouse-servers 进行分布式查询处理;
         - 支持原生协议的 ClickHouse 驱动程序和应用程序
         (该协议也非正式称为 "TCP 协议");
         另请参见 'tcp_port_secure' 以进行安全连接。
    -->
    <tcp_port>9000</tcp_port>

    <!-- 与 MySQL 协议的兼容性。
         ClickHouse 将假装是 MySQL,以便连接到此端口的应用程序。
    -->
    <mysql_port>9004</mysql_port>

    <!-- 与 PostgreSQL 协议的兼容性。
         ClickHouse 将假装是 PostgreSQL,以便连接到此端口的应用程序。
    -->
    <postgresql_port>9005</postgresql_port>

    <!-- 带有 TLS 的 HTTP API(HTTPS)。
         您必须配置证书以启用此接口。
         请参见下面的 openSSL 部分。
    -->
    <!-- <https_port>8443</https_port> -->

    <!-- 带有 TLS 的原生接口。
         您必须配置证书以启用此接口。
         请参见下面的 openSSL 部分。
    -->
    <!-- <tcp_port_secure>9440</tcp_port_secure> -->

    <!-- 使用 PROXYv1 协议包装的原生接口
         每个连接发送 PROXYv1 头。
         ClickHouse 将从头中提取有关代理转发的客户端地址的信息。
    -->
    <!-- <tcp_with_proxy_port>9011</tcp_with_proxy_port> -->

    <!-- 用于副本之间通信的端口。用于数据交换。
         它提供服务器之间的低级数据访问。
         此端口不应从不受信任的网络访问。
         另请参见 'interserver_http_credentials'。
         通过此端口的连接传输的数据不应通过不受信任的网络。
         另请参见 'interserver_https_port'。
      -->
    <interserver_http_port>9009</interserver_http_port>

    <!-- 带有 TLS 的副本之间通信的端口。
         您必须配置证书以启用此接口。
         请参见下面的 openSSL 部分。
         另请参见 'interserver_http_credentials'。
      -->
    <!-- <interserver_https_port>9010</interserver_https_port> -->

    <!-- 其他副本用于请求此服务器的主机名。
         如果未指定,则根据 'hostname -f' 命令确定。
         此设置可用于将复制切换到另一个网络接口
         (服务器可能通过多个地址连接到多个网络)
      -->

    <interserver_http_host>0.0.0.0</interserver_http_host>

    <!-- 您可以为副本之间的身份验证指定凭据。
         当 interserver_https_port 从不受信任的网络可访问时,这是必需的,
         还建议避免来自您网络中可能被攻陷的服务的 SSRF 攻击。
      -->
    <!--<interserver_http_credentials>
        <user>interserver</user>
        <password></password>
    </interserver_http_credentials>-->

    <!-- 监听指定地址。
         如果您希望从各处接受 IPv4 和 IPv6 的连接,请使用 ::(通配符 IPv6 地址)。
         注意:
         如果您从通配符地址打开连接,请确保至少采取以下措施之一:
         - 服务器受到防火墙保护,且不受信任的网络无法访问;
         - 所有用户被限制在网络地址的子集(请参见 users.xml);
         - 所有用户都有强密码,仅可访问安全(TLS)接口,或仅通过 TLS 接口进行连接。
         - 没有密码的用户具有只读访问权限。
         另请参见:https://www.shodan.io/search?query=clickhouse
      -->
    <!-- <listen_host>::</listen_host> -->


    <!-- 对于不支持 IPv6 的主机也是如此: -->
    <listen_host>0.0.0.0</listen_host>

    <!-- 默认值 - 尝试在 IPv4 和 IPv6 上监听 localhost。 -->
    <!--
    <listen_host>::1</listen_host>
    <listen_host>127.0.0.1</listen_host>
    -->

    <!-- 如果在尝试监听时 IPv6 或 IPv4 网络不可用,则不退出。 -->
    <!-- <listen_try>0</listen_try> -->

    <!-- 允许多个服务器在同一地址:端口上监听。这不推荐。
      -->
    <!-- <listen_reuse_port>0</listen_reuse_port> -->

    <!-- <listen_backlog>4096</listen_backlog> -->

    <max_connections>4096</max_connections>

    <!-- 对于 HTTP 1.1 中的 'Connection: keep-alive' -->
    <keep_alive_timeout>3</keep_alive_timeout>

    <!-- gRPC 协议(请参见 src/Server/grpc_protos/clickhouse_grpc.proto 以获取 API) -->
    <!-- <grpc_port>9100</grpc_port> -->
    <grpc>
        <enable_ssl>false</enable_ssl>

        <!-- 仅在 enable_ssl=1 时使用以下两个文件 -->
        <ssl_cert_file>/path/to/ssl_cert_file</ssl_cert_file>
        <ssl_key_file>/path/to/ssl_key_file</ssl_key_file>

        <!-- 服务器是否会请求客户端提供证书 -->
        <ssl_require_client_auth>false</ssl_require_client_auth>

        <!-- 仅在 ssl_require_client_auth=1 时使用以下文件 -->
        <ssl_ca_cert_file>/path/to/ssl_ca_cert_file</ssl_ca_cert_file>

        <!-- 默认压缩算法(如果客户端未指定其他算法,则应用,见 QueryInfo 中的 result_compression)。
             支持的算法:none、deflate、gzip、stream_gzip -->
        <compression>deflate</compression>

        <!-- 默认压缩级别(如果客户端未指定其他级别,则应用,见 QueryInfo 中的 result_compression)。
             支持的级别:none、low、medium、high -->
        <compression_level>medium</compression_level>

        <!-- 发送/接收消息大小限制(以字节为单位)。 -1 表示无限制 -->
        <max_send_message_size>-1</max_send_message_size>
        <max_receive_message_size>-1</max_receive_message_size>

        <!-- 如果您希望非常详细的日志,请启用 -->
        <verbose_logs>false</verbose_logs>
    </grpc>

    <!-- 与 https_port 和 tcp_port_secure 一起使用。完整的 ssl 选项列表:https://github.com/ClickHouse-Extras/poco/blob/master/NetSSL_OpenSSL/include/Poco/Net/SSLManager.h#L71 -->
    <openSSL>
        <server> <!-- 用于 https 服务器和安全 tcp 端口 -->
            <!-- openssl req -subj "/CN=localhost" -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout /etc/clickhouse-server/server.key -out /etc/clickhouse-server/server.crt -->
            <certificateFile>/etc/clickhouse-server/server.crt</certificateFile>
            <privateKeyFile>/etc/clickhouse-server/server.key</privateKeyFile>
            <!-- dhparams 是可选的。您可以删除 <dhParamsFile> 元素。
                 要生成 dhparams,请使用以下命令:
                  openssl dhparam -out /etc/clickhouse-server/dhparam.pem 4096
                 仅支持带有 BEGIN DH PARAMETERS 的文件格式。
              -->
            <dhParamsFile>/etc/clickhouse-server/dhparam.pem</dhParamsFile>
            <verificationMode>none</verificationMode>
            <loadDefaultCAFile>true</loadDefaultCAFile>
            <cacheSessions>true</cacheSessions>
            <disableProtocols>sslv2,sslv3</disableProtocols>
            <preferServerCiphers>true</preferServerCiphers>
        </server>

        <client> <!-- 用于连接到 https 字典源和安全的 Zookeeper 通信 -->
            <loadDefaultCAFile>true</loadDefaultCAFile>
            <cacheSessions>true</cacheSessions>
            <disableProtocols>sslv2,sslv3</disableProtocols>
            <preferServerCiphers>true</preferServerCiphers>
            <!-- 用于自签名: <verificationMode>none</verificationMode> -->
            <invalidCertificateHandler>
                <!-- 用于自签名: <name>AcceptCertificateHandler</name> -->
                <name>RejectCertificateHandler</name>
            </invalidCertificateHandler>
        </client>
    </openSSL>

    <!-- http[s] 服务器上的默认根页面。例如,在打开 http://localhost:8123 时从 https://tabix.io/ 加载 UI -->
    <!--
    <http_server_default_response><![CDATA[<html ng-app="SMI2"><head><base href="http://ui.tabix.io/"></head><body><div ui-view="" class="content-ui"></div><script src="http://loader.tabix.io/master.js"></script></body></html>]]></http_server_default_response>
    -->

    <!-- 最大并发查询数。 -->
    <max_concurrent_queries>100</max_concurrent_queries>

    <!-- 服务器进程的最大内存使用量(常驻集大小)。
         零值或未设置表示默认值。默认值是可用物理 RAM 的 "max_server_memory_usage_to_ram_ratio"。
         如果该值大于可用物理 RAM 的 "max_server_memory_usage_to_ram_ratio",则会被削减。

         该约束在查询执行时检查。
         如果查询尝试分配内存,并且当前内存使用量加上分配量大于指定阈值,则会抛出异常。

         将此约束设置为像几 GB 这样的较小值并不实际,因为内存分配器将保持这部分内存在缓存中,服务器将拒绝服务查询。
      -->
    <max_server_memory_usage>0</max_server_memory_usage>

    <!-- 全局线程池中的最大线程数。
    如果未指定,默认最大线程数为 10000。
    此设置在并发运行大量分布式查询但大部分时间处于空闲状态的场景中非常有用,在这种情况下,可能需要更多线程。
    -->

    <max_thread_pool_size>10000</max_thread_pool_size>

    <!-- 在后台回收连接的工作线程数(另请参见 drain_timeout)。
         如果池已满,连接将同步排出。 -->
    <!-- <max_threads_for_connection_collector>10</max_threads_for_connection_collector> -->

    <!-- 在内存受限的环境中,您可能需要将此值设置为大于 1 的值。
      -->
    <max_server_memory_usage_to_ram_ratio>0.9</max_server_memory_usage_to_ram_ratio>

    <!-- 简单的服务器范围内内存分析器。在每个峰值分配步骤(以字节为单位)收集堆栈跟踪。
         数据将存储在 system.trace_log 表中,query_id = 空字符串。
         零表示禁用。
      -->
    <total_memory_profiler_step>4194304</total_memory_profiler_step>

    <!-- 收集随机分配和释放,并将其写入 system.trace_log,trace_type 为 'MemorySample'。
         概率是针对每个分配/释放,不考虑分配的大小。
         请注意,只有在未跟踪内存的数量超过未跟踪内存限制时,才会发生采样,
          默认情况下为 4 MiB,但如果 'total_memory_profiler_step' 降低,则可以降低。
         您可能希望将 'total_memory_profiler_step' 设置为 1,以进行额外的细粒度采样。
      -->
    <total_memory_tracker_sample_probability>0</total_memory_tracker_sample_probability>

    <!-- 设置打开文件的限制(默认值:最大)。此设置在 Mac OS X 上是有意义的,因为 getrlimit() 无法检索
         正确的最大值。 -->
    <!-- <max_open_files>262144</max_open_files> -->

    <!-- 未压缩数据块的缓存大小,用于 MergeTree 系列的表。
         以字节为单位。缓存是服务器的单一缓存。内存仅在需要时分配。
         当 'use_uncompressed_cache' 用户设置打开时(默认关闭)使用缓存。
         未压缩缓存仅对非常短的查询有利,并且在少数情况下。

         注意:对于 lz4,未压缩缓存可能是无意义的,因为内存带宽
         在某些服务器配置上比多核解压缩慢。
         启用它有时可能会使查询变慢。
      -->
    <uncompressed_cache_size>8589934592</uncompressed_cache_size>

    <!-- 标记缓存的近似大小,用于 MergeTree 系列的表。
         以字节为单位。缓存是服务器的单一缓存。内存仅在需要时分配。
         您不应降低此值。
      -->
    <mark_cache_size>5368709120</mark_cache_size>


    <!-- 如果启用 `min_bytes_to_use_mmap_io` 设置,
         MergeTree 表中的数据可以使用 mmap 读取,以避免从内核复制到用户空间。
         仅对大文件有意义,并且仅在数据驻留在页面缓存中时有帮助。
         为了避免频繁的 open/mmap/munmap/close 调用(由于随后的页面错误而非常昂贵)
         并重用来自多个线程和查询的映射,
         维护映射文件的缓存。其大小是映射区域的数量(通常等于映射文件的数量)。
         可以通过系统指标、系统指标日志中的 MMappedFiles、MMappedFileBytes 指标监控映射文件中的数据量
         以及在系统事件、系统进程、系统查询日志、系统查询线程日志、系统查询视图日志中通过 CreatedReadBufferMMap、CreatedReadBufferMMapFailed、MMappedFileCacheHits、MMappedFileCacheMisses 事件监控。
         请注意,映射文件中的数据量不会直接消耗内存,并且不计入查询或服务器内存使用量 - 因为此内存可以像操作系统页面缓存一样被丢弃。
         在 MergeTree 中删除旧部分时,缓存会被自动丢弃(文件会关闭),
         也可以通过 SYSTEM DROP MMAP CACHE 查询手动丢弃。
      -->
    <mmap_cache_size>1000</mmap_cache_size>

    <!-- 编译表达式的缓存大小(以字节为单位)。-->
    <compiled_expression_cache_size>134217728</compiled_expression_cache_size>

    <!-- 编译表达式的缓存大小(以元素为单位)。-->
    <compiled_expression_cache_elements_size>10000</compiled_expression_cache_elements_size>

    <!-- 数据目录的路径,带有尾部斜杠。 -->
    <path>/var/lib/clickhouse/</path>

    <!-- 处理复杂查询的临时数据路径。 -->
    <tmp_path>/var/lib/clickhouse/tmp/</tmp_path>

    <!-- 临时文件的 <storage_configuration> 策略。
         如果未设置,则使用 <tmp_path>,否则忽略 <tmp_path>。

         注意:
         - move_factor              被忽略
         - keep_free_space_bytes    被忽略
         - max_data_part_size_bytes 被忽略
         - 您必须在该策略中恰好有一个卷
    -->
    <!-- <tmp_policy>tmp</tmp_policy> -->

    <!-- 目录,用户提供的文件可通过 'file' 表函数访问。 -->
    <user_files_path>/var/lib/clickhouse/user_files/</user_files_path>

    <!-- LDAP 服务器定义。 -->
    <ldap_servers>
        <!-- 在此列出 LDAP 服务器及其连接参数,以便稍后 1) 将它们用作专用本地用户的身份验证器,
              这些用户指定了 'ldap' 身份验证机制,而不是 'password',或 2) 将它们用作远程用户目录。
             参数:
                host - LDAP 服务器主机名或 IP,此参数是强制性的,不能为空。
                port - LDAP 服务器端口,如果 enable_tls 设置为 true,则默认是 636,否则为 389。
                bind_dn - 用于构造要绑定的 DN 的模板。
                        结果 DN 将通过在每次身份验证尝试期间用实际用户名替换模板中的所有 '{user_name}' 子字符串来构造。
                user_dn_detection - 用于检测绑定用户的实际用户 DN 的 LDAP 搜索参数部分。
                        这主要用于在服务器为 Active Directory 时进行角色映射的搜索过滤器。结果用户 DN 将在替换 '{user_dn}' 子字符串时使用,无论它们在哪里被允许。默认情况下,
                         用户 DN 设置为等于绑定 DN,但一旦执行搜索,它将更新为实际检测到的用户 DN 值。
                    base_dn - 用于构造 LDAP 搜索的基本 DN 的模板。
                            结果 DN 将通过在每次 LDAP 搜索期间用实际用户名、绑定 DN 和基本 DN 替换模板中的所有 '{user_name}'、'{bind_dn}' 和 '{base_dn}' 子字符串来构造。
                    scope - LDAP 搜索的范围。
                            接受的值为:'base'、'one_level'、'children'、'subtree'(默认)。
                    search_filter - 用于构造 LDAP 搜索的搜索过滤器的模板。
                            结果过滤器将通过在每次 LDAP 搜索期间用实际用户名、绑定 DN、用户 DN 和基本 DN 替换模板中的所有 '{user_name}'、'{bind_dn}'、'{user_dn}' 和 '{base_dn}' 子字符串来构造。
                            请注意,特殊字符必须在 XML 中正确转义。
                verification_cooldown - 在成功绑定尝试后的一段时间(以秒为单位),在此期间假定用户已成功通过身份验证,所有后续请求无需联系 LDAP 服务器。
                        指定 0(默认)以禁用缓存,并强制在每个身份验证请求中联系 LDAP 服务器。
                enable_tls - 触发使用安全连接到 LDAP 服务器的标志。
                        指定 'no' 以使用明文(ldap://)协议(不推荐)。
                        指定 'yes' 以使用 LDAP over SSL/TLS(ldaps://)协议(推荐,默认)。
                        指定 'starttls' 以使用传统的 StartTLS 协议(明文(ldap://)协议,升级为 TLS)。
                tls_minimum_protocol_version - SSL/TLS 的最低协议版本。
                        接受的值为:'ssl2'、'ssl3'、'tls1.0'、'tls1.1'、'tls1.2'(默认)。
                tls_require_cert - SSL/TLS 对等证书验证行为。
                        接受的值为:'never'、'allow'、'try'、'demand'(默认)。
                tls_cert_file - 证书文件的路径。
                tls_key_file - 证书密钥文件的路径。
                tls_ca_cert_file - CA 证书文件的路径。
                tls_ca_cert_dir - 包含 CA 证书的目录的路径。
                tls_cipher_suite - 允许的密码套件(以 OpenSSL 表示法)。
             示例:
                <my_ldap_server>
                    <host>localhost</host>
                    <port>636</port>
                    <bind_dn>uid={user_name},ou=users,dc=example,dc=com</bind_dn>
                    <verification_cooldown>300</verification_cooldown>
                    <enable_tls>yes</enable_tls>
                    <tls_minimum_protocol_version>tls1.2</tls_minimum_protocol_version>
                    <tls_require_cert>demand</tls_require_cert>
                    <tls_cert_file>/path/to/tls_cert_file</tls_cert_file>
                    <tls_key_file>/path/to/tls_key_file</tls_key_file>
                    <tls_ca_cert_file>/path/to/tls_ca_cert_file</tls_ca_cert_file>
                    <tls_ca_cert_dir>/path/to/tls_ca_cert_dir</tls_ca_cert_dir>
                    <tls_cipher_suite>ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:AES256-GCM-SHA384</tls_cipher_suite>
                </my_ldap_server>
             示例(典型的 Active Directory,配置了用户 DN 检测以进行进一步的角色映射):
                <my_ad_server>
                    <host>localhost</host>
                    <port>389</port>
                    <bind_dn>EXAMPLE\{user_name}</bind_dn>
                    <user_dn_detection>
                        <base_dn>CN=Users,DC=example,DC=com</base_dn>
                        <search_filter>(&amp;(objectClass=user)(sAMAccountName={user_name}))</search_filter>
                    </user_dn_detection>
                    <enable_tls>no</enable_tls>
                </my_ad_server>
        -->
    </ldap_servers>

    <!-- 要为通过 HTTP 请求(GSS-SPNEGO)启用 Kerberos 身份验证支持,针对那些明确配置为通过 Kerberos 进行身份验证的用户,在此定义一个单独的 'kerberos' 部分。
         参数:
            principal - 规范服务主体名称,在接受安全上下文时将获取并使用。
                    此参数是可选的,如果省略,则将使用默认主体。
                    此参数不能与 'realm' 参数一起指定。
            realm - 将用于限制身份验证的领域,仅限于发起者的领域与其匹配的请求。
                    此参数是可选的,如果省略,则不会应用基于领域的额外过滤。
                    此参数不能与 'principal' 参数一起指定。
         示例:
            <kerberos />
         示例:
            <kerberos>
                <principal>HTTP/[email protected]</principal>
            </kerberos>
         示例:
            <kerberos>
                <realm>EXAMPLE.COM</realm>
            </kerberos>
    -->

    <!-- 读取用户、角色、访问权限、设置配置文件、配额的源。 -->
    <user_directories>
        <users_xml>
            <!-- 预定义用户的配置文件路径。 -->
            <path>users.xml</path>
        </users_xml>
        <local_directory>
            <!-- 存储通过 SQL 命令创建的用户的文件夹路径。 -->
            <path>/var/lib/clickhouse/access/</path>
        </local_directory>

        <!-- 要将 LDAP 服务器添加为未在本地定义的用户的远程用户目录,请定义一个单独的 'ldap' 部分
              具有以下参数:
                server - 在上面的 'ldap_servers' 配置部分中定义的 LDAP 服务器名称之一。
                        此参数是强制性的,不能为空。
                roles - 包含将分配给从 LDAP 服务器检索的每个用户的本地定义角色的列表的部分。
                        如果此处未指定角色或在角色映射(如下)期间未分配角色,则用户在身份验证后将无法执行任何操作。
                role_mapping - 包含 LDAP 搜索参数和映射规则的部分。
                        当用户在仍绑定到 LDAP 时进行身份验证时,将使用 search_filter 和登录用户的名称执行 LDAP 搜索。对于在该搜索期间找到的每个条目,将提取指定属性的值。对于每个具有指定前缀的属性值,将删除前缀,其余值将成为 ClickHouse 中定义的本地角色的名称,预计在 CREATE ROLE 命令之前创建。
                        可以在同一 'ldap' 部分中定义多个 'role_mapping' 部分。所有这些都将被应用。
                    base_dn - 用于构造 LDAP 搜索的基本 DN 的模板。
                            结果 DN 将通过在每次 LDAP 搜索期间用实际用户名、绑定 DN 和用户 DN 替换模板中的所有 '{user_name}'、'{bind_dn}' 和 '{user_dn}' 子字符串来构造。
                    scope - LDAP 搜索的范围。
                            接受的值为:'base'、'one_level'、'children'、'subtree'(默认)。
                    search_filter - 用于构造 LDAP 搜索的搜索过滤器的模板。
                            结果过滤器将通过在每次 LDAP 搜索期间用实际用户名、绑定 DN、用户 DN 和基本 DN 替换模板中的所有 '{user_name}'、'{bind_dn}'、'{user_dn}' 和 '{base_dn}' 子字符串来构造。
                            请注意,特殊字符必须在 XML 中正确转义。
                    attribute - LDAP 搜索返回的值的属性名称。默认是 'cn'。
                    prefix - 预期在 LDAP 搜索返回的原始字符串列表中的每个字符串前面的前缀。前缀将从原始字符串中删除,结果字符串将被视为本地角色名称。默认是空。
             示例:
                <ldap>
                    <server>my_ldap_server</server>
                    <roles>
                        <my_local_role1 />
                        <my_local_role2 />
                    </roles>
                    <role_mapping>
                        <base_dn>ou=groups,dc=example,dc=com</base_dn>
                        <scope>subtree</scope>
                        <search_filter>(&amp;(objectClass=groupOfNames)(member={bind_dn}))</search_filter>
                        <attribute>cn</attribute>
                        <prefix>clickhouse_</prefix>
                    </role_mapping>
                </ldap>
             示例(典型的 Active Directory,角色映射依赖于检测到的用户 DN):
                <ldap>
                    <server>my_ad_server</server>
                    <role_mapping>
                        <base_dn>CN=Users,DC=example,DC=com</base_dn>
                        <attribute>CN</attribute>
                        <scope>subtree</scope>
                        <search_filter>(&amp;(objectClass=group)(member={user_dn}))</search_filter>
                        <prefix>clickhouse_</prefix>
                    </role_mapping>
                </ldap>
        -->
    </user_directories>

    <!-- 默认设置配置文件。 -->
    <default_profile>default</default_profile>

    <!-- 用户定义设置的前缀的逗号分隔列表。 -->
    <custom_settings_prefixes></custom_settings_prefixes>

    <!-- 系统设置配置文件。此设置由内部进程使用(分布式 DDL 工作程序等)。 -->
    <!-- <system_profile>default</system_profile> -->

    <!-- 缓冲区设置配置文件。
         此设置由缓冲存储用于将数据刷新到基础表。
         默认:使用 system_profile 指令中的设置。
    -->
    <!-- <buffer_profile>default</buffer_profile> -->

    <!-- 默认数据库。 -->
    <default_database>default</default_database>

    <!-- 服务器时区可以在此处设置。

         时区在 String 和 DateTime 类型之间转换时使用,
          在以文本格式打印 DateTime 和从文本解析 DateTime 时使用,
          它在日期和时间相关函数中使用,如果未作为参数传递特定时区。

         时区指定为 IANA 时区数据库中的标识符,如 UTC 或 Africa/Abidjan。
         如果未指定,则使用服务器启动时的系统时区。

         请注意,服务器可能会显示时区别名,而不是指定的名称。
         示例:W-SU 是 Europe/Moscow 的别名,Zulu 是 UTC 的别名。
    -->
    <!-- <timezone>Europe/Moscow</timezone> -->

    <!-- 您可以在此处指定 umask(请参见 "man umask")。服务器将在启动时应用它。
         数字始终解析为八进制。默认 umask 为 027(其他用户无法读取日志、数据文件等;组只能读取)。
    -->
    <!-- <umask>022</umask> -->

    <!-- 启动后执行 mlockall,以降低首次查询延迟
          并防止在高 IO 负载下将 clickhouse 可执行文件分页。
         建议启用此选项,但会导致启动时间增加几秒钟。
    -->
    <mlock_executable>true</mlock_executable>

    <!-- 使用大页面重新分配机器代码("text")。高度实验性。 -->
    <remap_executable>false</remap_executable>

    <![CDATA[
         取消注释以下内容以使用 JDBC 表引擎和函数。

         要安装并在后台运行 JDBC 桥接:
         * [Debian/Ubuntu]
           export MVN_URL=https://repo1.maven.org/maven2/ru/yandex/clickhouse/clickhouse-jdbc-bridge
           export PKG_VER=$(curl -sL $MVN_URL/maven-metadata.xml | grep '<release>' | sed -e 's|.*>\(.*\)<.*|\1|')
           wget https://github.com/ClickHouse/clickhouse-jdbc-bridge/releases/download/v$PKG_VER/clickhouse-jdbc-bridge_$PKG_VER-1_all.deb
           apt install --no-install-recommends -f ./clickhouse-jdbc-bridge_$PKG_VER-1_all.deb
           clickhouse-jdbc-bridge &

         * [CentOS/RHEL]
           export MVN_URL=https://repo1.maven.org/maven2/ru/yandex/clickhouse/clickhouse-jdbc-bridge
           export PKG_VER=$(curl -sL $MVN_URL/maven-metadata.xml | grep '<release>' | sed -e 's|.*>\(.*\)<.*|\1|')
           wget https://github.com/ClickHouse/clickhouse-jdbc-bridge/releases/download/v$PKG_VER/clickhouse-jdbc-bridge-$PKG_VER-1.noarch.rpm
           yum localinstall -y clickhouse-jdbc-bridge-$PKG_VER-1.noarch.rpm
           clickhouse-jdbc-bridge &

         请参阅 https://github.com/ClickHouse/clickhouse-jdbc-bridge#usage 以获取更多信息。
    ]]>
    <!--
    <jdbc_bridge>
        <host>127.0.0.1</host>
        <port>9019</port>
    </jdbc_bridge>
    -->

    <!-- 可以在分布式表中使用的集群配置。
         https://clickhouse.com/docs/en/operations/table_engines/distributed/
      -->
    <remote_servers>
        <default_cluster>
            <shard>
                <weight>1</weight>
                <internal_replication>false</internal_replication>
                <replica>
                    <host>ck1</host>
                    <port>9000</port>
                </replica>
            </shard>
            <shard>
                <weight>1</weight>
                <internal_replication>false</internal_replication>
                <replica>
                    <host>ck2</host>
                    <port>9000</port>
                </replica>
            </shard>
            <shard>
                <weight>1</weight>
                <internal_replication>false</internal_replication>
                <replica>
                    <host>ck3</host>
                    <port>9000</port>
                </replica>
            </shard>
        </default_cluster>
    </remote_servers>

    <macros>
        <replica>ck1</replica>
        <shard>01</shard>
        <layer>01</layer>
    </macros>


    <!-- 允许在与 URL 相关的存储引擎和表函数中使用的主机列表。
        如果此部分未出现在配置中,则允许所有主机。
    -->
    <!--<remote_url_allow_hosts>-->
    <!-- 主机应与 URL 中的指定完全相同。名称在 DNS 解析之前进行检查。
        示例:"yandex.ru"、"yandex.ru." 和 "www.yandex.ru" 是不同的主机。
                如果在 URL 中明确指定了端口,则主机:端口作为整体进行检查。
                如果此处指定的主机没有端口,则允许与该主机的任何端口。
                "yandex.ru" -> "yandex.ru:443"、"yandex.ru:80" 等被允许,但 "yandex.ru:80" -> 仅允许 "yandex.ru:80"。
        如果主机指定为 IP 地址,则按 URL 中指定的方式进行检查。示例:"[2a02:6b8:a::a]"。
        如果存在重定向且启用了对重定向的支持,则检查每个重定向(Location 字段)。
        主机应使用 host xml 标签指定:
                <host>yandex.ru</host>
    -->

    <!-- 可以指定正则表达式。使用 RE2 引擎进行正则表达式。
        正则表达式未对齐:不要忘记添加 ^ 和 $。也不要忘记转义点(.)元字符
        (忘记这样做是常见错误的来源)。
    -->
    <!--</remote_url_allow_hosts>-->

    <!-- 如果元素具有 'incl' 属性,则将使用来自另一个文件的相应替换。
         默认情况下,替换文件的路径为 /etc/metrika.xml。可以在配置的 'include_from' 元素中更改。
         替换的值在该文件的 /clickhouse/name_of_substitution 元素中指定。
      -->

    <!-- ZooKeeper 用于存储有关副本的元数据,当使用复制表时。
         可选。如果您不使用复制表,则可以省略它。

         请参见 https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/replication/
      -->

    <zookeeper>
        <node>
            <host>zookeeper1</host>
            <port>2181</port>
        </node>
    </zookeeper>

    <!-- 复制表参数的替换。
          可选。如果您不使用复制表,则可以省略它。

         请参见 https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/replication/#creating-replicated-tables
      -->
    <!--
    <macros>
        <shard>01</shard>
        <replica>example01-01-1</replica>
    </macros>
    -->


    <!-- 嵌入式字典的重新加载间隔,以秒为单位。默认:3600。 -->
    <builtin_dictionaries_reload_interval>3600</builtin_dictionaries_reload_interval>


    <!-- 最大会话超时,以秒为单位。默认:3600。 -->
    <max_session_timeout>3600</max_session_timeout>

    <!-- 默认会话超时,以秒为单位。默认:60。 -->
    <default_session_timeout>60</default_session_timeout>

    <!-- 发送数据到 Graphite 进行监控。可以定义多个部分。 -->
    <!--
        interval - 每 X 秒发送
        root_path - 键的前缀
        hostname_in_path - 将主机名附加到 root_path(默认 = true)
        metrics - 从表 system.metrics 发送数据
        events - 从表 system.events 发送数据
        asynchronous_metrics - 从表 system.asynchronous_metrics 发送数据
    -->
    <!--
    <graphite>
        <host>localhost</host>
        <port>42000</port>
        <timeout>0.1</timeout>
        <interval>60</interval>
        <root_path>one_min</root_path>
        <hostname_in_path>true</hostname_in_path>

        <metrics>true</metrics>
        <events>true</events>
        <events_cumulative>false</events_cumulative>
        <asynchronous_metrics>true</asynchronous_metrics>
    </graphite>
    <graphite>
        <host>localhost</host>
        <port>42000</port>
        <timeout>0.1</timeout>
        <interval>1</interval>
        <root_path>one_sec</root_path>

        <metrics>true</metrics>
        <events>true</events>
        <events_cumulative>false</events_cumulative>
        <asynchronous_metrics>false</asynchronous_metrics>
    </graphite>
    -->

    <!-- 为 Prometheus 监控提供服务的端点。 -->
    <!--
        endpoint - mertics 路径(相对于根,以 "/" 开头)
        port - 设置服务器的端口。如果未定义或为 0,则使用 http_port
        metrics - 从表 system.metrics 发送数据
        events - 从表 system.events 发送数据
        asynchronous_metrics - 从表 system.asynchronous_metrics 发送数据
        status_info - 从 CH 的不同组件发送数据,例如:字典状态
    -->
    <!--
    <prometheus>
        <endpoint>/metrics</endpoint>
        <port>9363</port>

        <metrics>true</metrics>
        <events>true</events>
        <asynchronous_metrics>true</asynchronous_metrics>
        <status_info>true</status_info>
    </prometheus>
    -->

    <!-- 查询日志。仅用于设置 log_queries = 1 的查询。 -->
    <query_log>
        <!-- 要插入数据的表。如果表不存在,将创建它。
             当查询日志结构在系统更新后发生变化时,
              将自动重命名旧表并创建新表。
        -->
        <database>system</database>
        <table>query_log</table>
        <!--
            PARTITION BY expr: https://clickhouse.com/docs/en/table_engines/mergetree-family/custom_partitioning_key/
            示例:
                event_date
                toMonday(event_date)
                toYYYYMM(event_date)
                toStartOfHour(event_time)
        -->
        <partition_by>toYYYYMM(event_date)</partition_by>
        <!--
            表 TTL 规范:https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/mergetree/#mergetree-table-ttl
            示例:
                event_date + INTERVAL 1 WEEK
                event_date + INTERVAL 7 DAY DELETE
                event_date + INTERVAL 2 WEEK TO DISK 'bbb'

        <ttl>event_date + INTERVAL 30 DAY DELETE</ttl>
        -->

        <!-- 您可以提供完整的引擎表达式(以 ENGINE = 开头)作为 partition_by 的替代,带参数,
             示例: <engine>ENGINE = MergeTree PARTITION BY toYYYYMM(event_date) ORDER BY (event_date, event_time) SETTINGS index_granularity = 1024</engine>
          -->

        <!-- 刷新数据的间隔。 -->
        <flush_interval_milliseconds>7500</flush_interval_milliseconds>
    </query_log>

    <!-- 跟踪日志。存储由查询分析器收集的堆栈跟踪。
         请参见 query_profiler_real_time_period_ns 和 query_profiler_cpu_time_period_ns 设置。 -->
    <trace_log>
        <database>system</database>
        <table>trace_log</table>

        <partition_by>toYYYYMM(event_date)</partition_by>
        <flush_interval_milliseconds>7500</flush_interval_milliseconds>
    </trace_log>

    <!-- 查询线程日志。包含有关参与查询执行的所有线程的信息。
         仅用于设置 log_query_threads = 1 的查询。 -->
    <query_thread_log>
        <database>system</database>
        <table>query_thread_log</table>
        <partition_by>toYYYYMM(event_date)</partition_by>
        <flush_interval_milliseconds>7500</flush_interval_milliseconds>
    </query_thread_log>

    <!-- 查询视图日志。包含与查询关联的所有依赖视图的信息。
         仅用于设置 log_query_views = 1 的查询。 -->
    <query_views_log>
        <database>system</database>
        <table>query_views_log</table>
        <partition_by>toYYYYMM(event_date)</partition_by>
        <flush_interval_milliseconds>7500</flush_interval_milliseconds>
    </query_views_log>

    <!-- 取消注释以使用部分日志。
         部分日志包含有关 MergeTree 表中部分的所有操作的信息(创建、删除、合并、下载)。-->
    <part_log>
        <database>system</database>
        <table>part_log</table>
        <partition_by>toYYYYMM(event_date)</partition_by>
        <flush_interval_milliseconds>7500</flush_interval_milliseconds>
    </part_log>

    <!-- 取消注释以将文本日志写入表中。
         文本日志包含来自常规服务器日志的所有信息,但以结构化和高效的方式存储。
         发送到表的消息级别可以限制(<level>),如果未指定,则所有消息将发送到表。
    <text_log>
        <database>system</database>
        <table>text_log</table>
        <flush_interval_milliseconds>7500</flush_interval_milliseconds>
        <level></level>
    </text_log>
    -->

    <!-- 指标日志包含带有当前 ProfileEvents、CurrentMetrics 值的行,使用 "collect_interval_milliseconds" 间隔收集。 -->
    <metric_log>
        <database>system</database>
        <table>metric_log</table>
        <flush_interval_milliseconds>7500</flush_interval_milliseconds>
        <collect_interval_milliseconds>1000</collect_interval_milliseconds>
    </metric_log>

    <!--
        异步指标日志包含来自
        system.asynchronous_metrics 的指标值。
    -->
    <asynchronous_metric_log>
        <database>system</database>
        <table>asynchronous_metric_log</table>
        <!--
            异步指标每分钟更新一次,因此没有必要更频繁地刷新。
        -->
        <flush_interval_milliseconds>7000</flush_interval_milliseconds>
    </asynchronous_metric_log>

    <!--
        OpenTelemetry 日志包含 OpenTelemetry 跟踪跨度。
    -->
    <opentelemetry_span_log>
        <!--
            默认的表创建代码不足,此 <engine> 规范
            是一种解决方法。此日志没有 'event_time',但有两个时间,
            开始和结束。按结束时间排序,以避免将
            数据插入到过去太远的地方(可能我们有时可以插入一个跨度
            比表中最后一个跨度早几秒,因为多个跨度并行插入之间的竞争)。这为跨度提供了一个
            全局顺序,我们可以用来例如重试插入到某个外部
            系统。
        -->
        <engine>
            engine MergeTree
            partition by toYYYYMM(finish_date)
            order by (finish_date, finish_time_us, trace_id)
        </engine>
        <database>system</database>
        <table>opentelemetry_span_log</table>
        <flush_interval_milliseconds>7500</flush_interval_milliseconds>
    </opentelemetry_span_log>


    <!-- 崩溃日志。存储致命错误的堆栈跟踪。
         此表通常为空。 -->
    <crash_log>
        <database>system</database>
        <table>crash_log</table>

        <partition_by/>
        <flush_interval_milliseconds>1000</flush_interval_milliseconds>
    </crash_log>

    <!-- 会话日志。存储用户登录(成功或失败)和注销事件。 -->
    <session_log>
        <database>system</database>
        <table>session_log</table>

        <partition_by>toYYYYMM(event_date)</partition_by>
        <flush_interval_milliseconds>7500</flush_interval_milliseconds>
    </session_log>

    <!-- 嵌入式字典的参数,用于 Yandex.Metrica。
         请参见 https://clickhouse.com/docs/en/dicts/internal_dicts/
    -->

    <!-- 区域层次结构文件的路径。 -->
    <!-- <path_to_regions_hierarchy_file>/opt/geo/regions_hierarchy.txt</path_to_regions_hierarchy_file> -->

    <!-- 包含区域名称的文件的目录路径 -->
    <!-- <path_to_regions_names_files>/opt/geo/</path_to_regions_names_files> -->


    <!-- <top_level_domains_path>/var/lib/clickhouse/top_level_domains/</top_level_domains_path> -->
    <!-- 自定义 TLD 列表。
         格式: <name>/path/to/file</name>

         更改将在服务器重启时应用。
         列表的路径位于 top_level_domains_path(见上文)。
    -->
    <top_level_domains_lists>
        <!--
        <public_suffix_list>/path/to/public_suffix_list.dat</public_suffix_list>
        -->
    </top_level_domains_lists>

    <!-- 外部字典的配置。请参见:
         https://clickhouse.com/docs/en/sql-reference/dictionaries/external-dictionaries/external-dicts
    -->
    <dictionaries_config>*_dictionary.xml</dictionaries_config>

    <!-- 用户定义的可执行函数的配置 -->
    <user_defined_executable_functions_config>*_function.xml</user_defined_executable_functions_config>

    <!-- 取消注释以使数据压缩效果提高 30-100%。
         如果您刚开始使用 ClickHouse,请不要这样做。
      -->
    <!--
    <compression>
        <!- - 一组变体。按顺序检查。最后匹配的情况胜出。如果没有匹配,则使用 lz4。 - ->
        <case>

            <!- - 条件。所有条件都必须满足。一些条件可以省略。 - ->
            <min_part_size>10000000000</min_part_size>        <!- - 最小部分大小(以字节为单位)。 - ->
            <min_part_size_ratio>0.01</min_part_size_ratio>   <!- - 部分的最小大小相对于整个表的大小。 - ->

            <!- - 使用什么压缩方法。 - ->
            <method>zstd</method>
        </case>
    </compression>
    -->

    <!-- 加密的配置。服务器在启动时执行命令以
         获取加密密钥,如果定义了这样的命令,
         否则将禁用加密编解码器。该
         命令通过 /bin/sh 执行,预计将 Base64 编码的密钥写入 stdout。 -->
    <encryption_codecs>
        <!-- aes_128_gcm_siv -->
        <!-- 从环境获取十六进制密钥的示例 -->
        <!-- 代码应使用此密钥,如果其长度不是 16 字节,则抛出异常 -->
        <!--key_hex from_env="..."></key_hex -->

        <!-- 多个十六进制密钥的示例。它们可以从环境导入或在配置中写入 -->
        <!-- 代码应使用这些密钥,如果其长度不是 16 字节,则抛出异常 -->
        <!-- key_hex id="0">...</key_hex -->
        <!-- key_hex id="1" from_env=".."></key_hex -->
        <!-- key_hex id="2">...</key_hex -->
        <!-- current_key_id>2</current_key_id -->

        <!-- 从配置获取十六进制密钥的示例 -->
        <!-- 代码应使用此密钥,如果其长度不是 16 字节,则抛出异常 -->
        <!-- key>...</key -->

        <!-- 添加 nonce 的示例 -->
        <!-- nonce>...</nonce -->

        <!-- /aes_128_gcm_siv -->
    </encryption_codecs>

    <!-- 允许在集群上执行分布式 DDL 查询(CREATE、DROP、ALTER、RENAME)。
         仅在启用 ZooKeeper 时有效。如果不需要此功能,请注释掉。 -->
    <distributed_ddl>
        <!-- ZooKeeper 中 DDL 查询队列的路径 -->
        <path>/clickhouse/task_queue/ddl</path>

        <!-- 将使用此配置文件中的设置来执行 DDL 查询 -->
        <!-- <profile>default</profile> -->

        <!-- 控制可以同时运行多少 ON CLUSTER 查询。 -->
        <!-- <pool_size>1</pool_size> -->

        <!--
             清理设置(活动任务将不会被删除)
        -->

        <!-- 控制任务 TTL(默认 1 周) -->
        <!-- <task_max_lifetime>604800</task_max_lifetime> -->

        <!-- 控制应执行清理的频率(以秒为单位) -->
        <!-- <cleanup_delay_period>60</cleanup_delay_period> -->

        <!-- 控制队列中可以有多少任务 -->
        <!-- <max_tasks_in_queue>1000</max_tasks_in_queue> -->
    </distributed_ddl>

    <!-- 设置以微调 MergeTree 表。请参阅源代码中的文档,位于 MergeTreeSettings.h -->
    <!--
    <merge_tree>
        <max_suspicious_broken_parts>5</max_suspicious_broken_parts>
    </merge_tree>
    -->

    <!-- 防止意外 DROP。
         如果 MergeTree 表的大小大于 max_table_size_to_drop(以字节为单位),则无法使用任何 DROP 查询删除该表。
         如果您想删除一个表而不想更改 clickhouse-server 配置,可以创建特殊文件 <clickhouse-path>/flags/force_drop_table 并执行一次 DROP。
         默认情况下,max_table_size_to_drop 为 50GB;max_table_size_to_drop=0 允许删除任何表。
         max_partition_size_to_drop 也是如此。
         取消注释以禁用保护。
    -->
    <!-- <max_table_size_to_drop>0</max_table_size_to_drop> -->
    <!-- <max_partition_size_to_drop>0</max_partition_size_to_drop> -->

    <!-- GraphiteMergeTree 表引擎的参数示例 -->
    <graphite_rollup_example>
        <pattern>
            <regexp>click_cost</regexp>
            <function>any</function>
            <retention>
                <age>0</age>
                <precision>3600</precision>
            </retention>
            <retention>
                <age>86400</age>
                <precision>60</precision>
            </retention>
        </pattern>
        <default>
            <function>max</function>
            <retention>
                <age>0</age>
                <precision>60</precision>
            </retention>
            <retention>
                <age>3600</age>
                <precision>300</precision>
            </retention>
            <retention>
                <age>86400</age>
                <precision>3600</precision>
            </retention>
        </default>
    </graphite_rollup_example>

    <!-- <clickhouse-path> 中包含各种输入格式的模式文件的目录。
         如果目录不存在,将创建该目录。
      -->
    <format_schema_path>/var/lib/clickhouse/format_schemas/</format_schema_path>

    <!-- 默认查询掩码规则,匹配的行将在日志中替换为其他内容
        (文本日志和 system.query_log)。
        name - 规则的名称(可选)
        regexp - 兼容 RE2 的正则表达式(强制)
        replace - 敏感数据的替换字符串(可选,默认 - 六个星号)
    -->
    <query_masking_rules>
        <rule>
            <name>hide encrypt/decrypt arguments</name>
            <regexp>((?:aes_)?(?:encrypt|decrypt)(?:_mysql)?)\s*\(\s*(?:'(?:\\'|.)+'|.*?)\s*\)</regexp>
            <!-- 或更安全,但也更具侵入性:
                (aes_\w+)\s*\(.*\)
            -->
            <replace>\1(???)</replace>
        </rule>
    </query_masking_rules>

    <!-- 取消注释以使用自定义 http 处理程序。
        规则从上到下检查,第一个匹配运行处理程序
            url - 匹配请求 URL,您可以使用 'regex:' 前缀使用正则表达式匹配(可选)
            methods - 匹配请求方法,您可以使用逗号分隔多个方法匹配(可选)
            headers - 匹配请求头,匹配每个子元素(子元素名称为头名称),您可以使用 'regex:' 前缀使用正则表达式匹配(可选)
        handler 是请求处理程序
            type - 支持的类型:static、dynamic_query_handler、predefined_query_handler
            query - 与 predefined_query_handler 类型一起使用,处理程序调用时执行查询
            query_param_name - 与 dynamic_query_handler 类型一起使用,从 HTTP 请求参数中提取并执行与 <query_param_name> 值相对应的值
            status - 与 static 类型一起使用,响应状态代码
            content_type - 与 static 类型一起使用,响应内容类型
            response_content - 与 static 类型一起使用,发送到客户端的响应内容,当使用前缀 'file://' 或 'config://' 时,从文件或配置中查找内容并发送给客户端。

    <http_handlers>
        <rule>
            <url>/</url>
            <methods>POST,GET</methods>
            <headers><pragma>no-cache</pragma></headers>
            <handler>
                <type>dynamic_query_handler</type>
                <query_param_name>query</query_param_name>
            </handler>
        </rule>

        <rule>
            <url>/predefined_query</url>
            <methods>POST,GET</methods>
            <handler>
                <type>predefined_query_handler</type>
                <query>SELECT * FROM system.settings</query>
            </handler>
        </rule>

        <rule>
            <handler>
                <type>static</type>
                <status>200</status>
                <content_type>text/plain; charset=UTF-8</content_type>
                <response_content>config://http_server_default_response</response_content>
            </handler>
        </rule>
    </http_handlers>
    -->

    <send_crash_reports>
        <!-- 将 <enabled> 更改为 true 允许将崩溃报告发送到 -->
        <!-- ClickHouse 核心开发团队通过 Sentry https://sentry.io -->
        <!-- 在预生产环境中这样做是非常受欢迎的 -->
        <enabled>false</enabled>
        <!-- 如果您不想将服务器主机名附加到崩溃报告中,请将 <anonymize> 更改为 true -->
        <anonymize>false</anonymize>
        <!-- 仅在您有一些内部工程师或雇佣顾问将为您调试 ClickHouse 问题时,才应更改默认端点 -->
        <endpoint></endpoint>
    </send_crash_reports>

    <!-- 取消注释以禁用 ClickHouse 内部 DNS 缓存。 -->
    <!-- <disable_internal_dns_cache>1</disable_internal_dns_cache> -->

    <!-- 您还可以像这样配置 rocksdb: -->
    <!--
    <rocksdb>
        <options>
            <max_background_jobs>8</max_background_jobs>
        </options>
        <column_family_options>
            <num_levels>2</num_levels>
        </column_family_options>
        <tables>
            <table>
                <name>TABLE</name>
                <options>
                    <max_background_jobs>8</max_background_jobs>
                </options>
                <column_family_options>
                    <num_levels>2</num_levels>
                </column_family_options>
            </table>
        </tables>
    </rocksdb>
    -->
    <timezone>Asia/Shanghai</timezone>
</clickhouse>

启动命令#

docker-compose up -d

TODO#

现在配置的 zookeeper 还是单机部署的,有空看看部署个 zookeeper 集群怎么配置

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。