ClickHouse服务端配置最佳实践

安装好ClickHouse,需要对服务和用户进行配置。本文介绍ClickHouse建议配置方式,配置项修改后是否需要重启,另外还提供一些实例配置加深理解。

独立自定义配置

Clickhouse 服务端配置包括两个部分:服务配置 (config.xml) 和用户配置 (users.xml),它们缺省存储在/etc/clickhouse-server/ 目录下。

建议不要改变默认配置文件,把我们的配置放在子目录下的独立文件中,这样更易于维护和升级。

  • /etc/clickhouse-server/users.d – 存放用户配置的子目录.
  • /etc/clickhouse-server/config.d – 存放服务配置的子目录.
  • /etc/clickhouse-server/conf.d – 存放任何配置的子目录.

xml文件名称可以为任意名称,但会按字母顺序优先应用。

举例:

$ cat /etc/clickhouse-server/config.d/listen_host.xml
<?xml version="1.0" ?>
<clickhouse>
  <listen_host>::- </listen_host>
</clickhouse>


$ cat /etc/clickhouse-server/config.d/macros.xml
- <?xml version="1.0" ?>
- <clickhouse>
  - <macros>
    - <cluster>test- </cluster>
    - <replica>host22- </replica>
    - <shard>0- </shard>
    - <server_id>41295- </server_id>
    - <server_name>host22.server.com- </server_name>
  - </macros>
- </clickhouse>

cat /etc/clickhouse-server/config.d/zoo.xml
- <?xml version="1.0" ?>
- <clickhouse>
  - <zookeeper>
    - <node>
      - <host>localhost- </host>
      - <port>2181- </port>
    - </node>
  - </zookeeper>
  - <distributed_ddl>
    - <path>/clickhouse/test/task_queue/ddl- </path>
  - </distributed_ddl>
- </clickhouse>

cat /etc/clickhouse-server/users.d/enable_access_management_for_user_default.xml
<?xml version="1.0" ?>
<clickhouse>
  <users>
    <default>
      <access_management>1</access_management>
    </default>
  </users>
</clickhouse>

cat /etc/clickhouse-server/users.d/memory_usage.xml
<?xml version="1.0" ?>
<clickhouse>
    <profiles>
        <default>
            <max_bytes_before_external_group_by>25290221568</max_bytes_before_external_group_by>
            <max_memory_usage>50580443136</max_memory_usage>
        </default>
    </profiles>
</clickhouse>

顺便说下,Zookeeper路径中可以使用配置中定义任何宏。

    ReplicatedMergeTree('/clickhouse/{cluster}/tables/my_table','{replica}')

或者在代码中使用宏:

CREATE OR REPLACE VIEW srv_server_info
SELECT (SELECT getMacro('shard')) AS shard_num,
       (SELECT getMacro('server_name')) AS server_name,
       (SELECT getMacro('server_id')) AS server_key

下面示例删除定义顶级配置config.xml中的 tcp_port & http_port。当配置SSL时需要禁用open tcp & http ports:

cat /etc/clickhouse-server/config.d/disable_open_network.xml
<?xml version="1.0"?>
<clickhouse>
  <http_port remove="1"/>
  <tcp_port remove="1"/>
</clickhouse>

替换顶级配置文件config.xml中的remote_servers, 可以删除default下面的test集群配置。

<?xml version="1.0" ?>
<clickhouse>
  <remote_servers replace="1">
    <mycluster>
      ....
    </mycluster>
  </remote_servers>
</clickhouse>

配置是否需要重启

一般原则是:

  • 服务配置 (config.xml and config.d) 改变需要重启;
  • 用户配置 (users.xml and users.d) 不需要重启.

但也有意外,下面详细介绍。

服务配置 (config.xml) 不需要重启

  • <max_server_memory_usage>
  • <max_server_memory_usage_to_ram_ratio>
  • <max_table_size_to_drop>
  • <max_partition_size_to_drop>
  • <max_concurrent_queries>
  • <remote_servers>
  • <dictionaries_config>
  • <user_defined_executable_functions_config>
  • <models_config>
  • <keeper_server>
  • (but reconnect don’t happen automatically)
  • <storage_configuration>
  • <user_directories>
  • <access_control_path>
  • <encryption_codecs>
  • (since 21.11)

在独立文件中的其他配置:

用户配置需要重启

大多数用户配置无需重启,在连接时自动启用,
因此已存在的连接会使用原有配置,新配置仅会在新的会话或重新连接时启用。
下面用户配置需要服务重启:

  • <background_buffer_flush_schedule_pool_size>
  • <background_pool_size>
  • <background_merges_mutations_concurrency_ratio>
  • <background_move_pool_size>
  • <background_fetches_pool_size>
  • <background_common_pool_size>
  • <background_schedule_pool_size>
  • <background_message_broker_schedule_pool_size>
  • <background_distributed_schedule_pool_size>
  • <max_replicated_fetches_network_bandwidth_for_server>
  • <max_replicated_sends_network_bandwidth_for_server>

详细配置是否需要重启可以通过下面SQL进行确认:

select * from system.settings where description ilike '%start%'

preprocessed_configs

ClickHouse服务端监听配置文件及子目录,当发生变化,有增加或删除xml文件时,会立刻装配xml为组合文件。这些组合文件存储在**/var/lib/clickhouse/preprocessed_configs/**目录中。

你能通过查看下面文件验证配置是否改变:

/var/lib/clickhouse/preprocessed_configs/config.xml,
/var/lib/clickhouse/preprocessed_configs/users.xml.

如果配置错误,如xml没有关闭或打字错误,可以在日志文件中进行看到警告:/var/log/clickhouse-server/clickhouse-server.log。
如看到preprocessed_configs中以及改变,并不意味着改变已经应用于服务中,还行需检查是否依赖重启。

查询级配置

可以通过settings子句再查询中设置配置项:

SELECT value
FROM system.settings
WHERE name = 'prefer_column_name_to_alias'
SETTINGS prefer_column_name_to_alias = 0

┌─value─┐
│ 0     │
└───────┘

SELECT value
FROM system.settings
WHERE name = 'prefer_column_name_to_alias'
SETTINGS prefer_column_name_to_alias = 1

┌─value─┐
│ 1     │
└───────┘

核心配置举例

additional_table_filters

用于给特定表增加额外的过滤条件,通过下面语句查看配置描述:

select * from system.settings where name = 'additional_table_filters'

返回描述信息如下:

Additional filter expression which would be applied after reading from specified table. Syntax: {‘table1’: ‘expression’, ‘database.table2’: ‘expression’}

可以看到配置值为json对象,支持增加多个配置项。示例如下:

users.xml 或 子目录中配置:

    <profiles>
        <default>
          <additional_table_filters>{'table_1':'id != 2'}</additional_table_filters>
        </default>
    </profiles>

下面几项配置缺省没有启用,建议启用。

additional_result_filter

配置类似,官方文档描述:An additional filter expression to apply to the result of SELECT query. This setting is not applied to any subquery. 可以应用值select查询,但不能用于子查询。

ttl_only_drop_parts

缺省为禁用,当MergeTree表所有行过期后,仅删除过期行,当所有行都过期时,启用该配置会删除parts,可以有效减少TTL_MERGE发生的频率,降低磁盘负载。

join_use_nulls

配置join行为,当遇到空值时,ClickHouse基于该配置进行填充。

  • 0 ,空值填充相应字段类型的缺失值
  • 1 ,与标准SQL一致,使用NULL填充

aggregate_functions_null_for_empty

缺省行为不兼容ANSI SQL,ClickHouse避免Nullable类型性能问题。

select sum(x), avg(x) from (select 1 x where 0);
┌─sum(x)─┬─avg(x)─┐
│      0 │   ᴺᵁᴸᴸ │
└────────┴────────┘

set aggregate_functions_null_for_empty=1;

select sum(x), avg(x) from (select 1 x where 0);
┌─sumOrNull(x)─┬─avgOrNull(x)─┐
│         ᴺᵁᴸᴸ │         ᴺᵁᴸᴸ │
└──────────────┴──────────────┘

总结

本文介绍了ClickHouse如何配置服务和用户参数。为了避免升级时配置被覆盖,建议使用独立文件进行配置,配置后需要确定是否需要重启。

参考:https://kb.altinity.com/altinity-kb-setup-and-maintenance/altinity-kb-server-config-files/

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值