0x1 环境说明
- 本人使用的环境debian9(ubuntu18类似),clickhouse的安装遵循官网的做法,本文不赘述。
- clickhouse的版本20.0.7.*以上
- zookeeper版本3.4.9及以上(clickhouse文档要求)
0x2 环境配置
搭建分布式集群需要zookeeper,zookeeper的安装请自行解决
1. clickhouse中zookeeper配置
- /etc/clickhouse-server/config.xml中确保存在这样的配置,默认情况下,装完clickhouse就已经有
<zookeeper incl="zookeeper-servers" optional="true" />
- 在/etc/clickhouse-server同级目录下创建一个文件metrika.xml,并在config.xml中引入如下配置
<include_from>/etc/clickhouse-server/metrika.xml</include_from>
通过include_from,引入扩展的文件
在metrika.xml中引入如下zookeeper-server的节点配置
<yandex>
<zookeeper-servers>
<node index="1">
<host>host-1.xx.com</host>
<port>2281</port>
</node>
<node index="2">
<host>host-2.xx.com</host>
<port>2281</port>
</node>
<node index="3">
<host>host-3.xx.com</host>
<port>2281</port>
</node>
</zookeeper-servers>
</yandex>
以上配置在集群中的节点需要保持一致。至此我们完成zookeeper的配置
2. clickhouse中macros的配置
macros参数,用于创建副本表必须的配置,可以用于区别不同的副本。
在metrika.xml我们新增macros节点
<macros>
<shard>1</shard>
<node>node-1</node>
</macros>
macros中的标签key可以自定义为其他,不要按照上面的shard和node节点来。确定好key后,集群不同的节点需要保证key对应的value需要不同。
至此完成macros参数的配置。
3. 配置集群的模式
本文搭建的是2分片2副本的4节点集群
- 在config.xml中的<remote_servers incl=“clickhouse_remote_servers” >节点引入如下配置
<cluster_2shard_5_6_2replicas_5_6>
<shard>
<weight>1</weight>
<internal_replication>true</internal_replication>
<replica>
<host>host-1.xx.com</host>
<port>9000</port>
<user>xx</user>
<password>xx</password>
</replica>
<replica>
<host>host-3.xx.com</host>
<port>9000</port>
<user>xx</user>
<password>xx</password>
</replica>
</shard>
<shard>
<weight>1</weight>
<internal_replication>true</internal_replication>
<replica>
<host>host-2.xx.com</host>
<port>9000</port>
<user>xx</user>
<password>xx</password>
</replica>
<replica>
<host>host-4.xx.com</host>
<port>9000</port>
<user>xx</user>
<password>xx</password>
</replica>
</shard>
</cluster_2shard_5_6_2replicas_5_6>
先定义了分片(shard),在每个分片下定义该分片的副本集。上面定义host-1/2俩个分片,1和2对应的副本集分别为3/4
上面也可以定义到metrika.xml中,或者通过include-from引入的文件中的clickhouse_remote_servers节点下。
至此我们完成副本级的配置
0x03 创建多分片多副本级的表
CREATE TABLE ods_data.single_point_log on cluster cluster_2shard_5_6_2replicas_5_6
(
`um_device_id` String,
`app_id` Int8,
`app_platform` String,
`app_version` String,
`app_channel` String,
`device_id` String,
`event_ts` Int64,
`session_id` Nullable(String),
`event_type` String,
`user_id` Int64,
`ip` Nullable(String),
`params` String,
`side` Nullable(String),
`event_time` Nullable(String),
`event_date` String,
`log_time` Nullable(String),
`sink_date` Nullable(String),
`first_login_time` Nullable(String),
`comprehensive_level` Nullable(String),
`vocabulary_level` Nullable(String),
`grammar_level` Nullable(String),
`listening_level` Nullable(String),
`oral_level` Nullable(String),
`reading_level` Nullable(String)
)
ENGINE = ReplicatedReplacingMergeTree('/clickhouse/ods_data/tables/single_point_log','single_point_log-{node}',event_ts)
PARTITION BY event_date
ORDER BY (event_type,
app_platform,
app_version,
app_channel,
user_id,
event_ts,
params)
SETTINGS index_granularity = 8192;
上面有俩个注意点
- 在create table table_name 后需要跟上 on cluster 集群的模式即0x02中定义模式名
- ReplicatedReplacingMergeTree需要跟上一些参数,从左右往右分别的解释
第一个参数:zoo_path — The path to the table in ZooKeeper.
第二个参数:replica_name — The replica name in ZooKeeper.里面的{node}就是macros中定义的参数
第三个参数:other_parameters — Parameters of an engine which is used for creating the replicated version, for example, version in ReplacingMergeTree.
至此我们完成2分片2副本级的创建
0x04 登陆clickhouse
clickhouse-client -u xxx --password xxx -m
-m 表示支持sql换行
0x05 clickhouse客户端工具
有3大类可以选择
- 使用自带的cli工具
- 使用tabixd,但是需要config.xml中打开http_server_default_response节点,默认应该是注释掉的
- 使用第三方工具,例如dbeave,superset-sqllab
日常查询可以使用第三方工具,方便查询和保存SQL,但是对于重查询和需要分析性能的建议还是使用cli。tabixd可以将查询的结果图表化,对于分析人员来说有一定帮助。