安装好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/