# 部署
- 架构分为两个模块:
- clickhouse-server :服务器。
- clickhouse-client :客户端。
# 单实例
- 用 docker-compose 部署:
version: "3" services: clickhouse: container_name: clickhouse image: yandex/clickhouse-server:21.11 restart: unless-stopped ports: - 8123:8123 - 9000:9000 - 9004:9004 volumes: - /etc/localtime:/etc/localtime:ro - ./config:/etc/clickhouse-server - ./data:/var/lib/clickhouse
- 需要调整挂载目录的权限:
chown -R 101 .
- 需要调整挂载目录的权限:
# 客户端
ClickHouse 监听了多个端口,供不同类型的客户端访问:
- http_port :提供 HTTP API 。访问 /play 页面会显示一个 Web UI ,可以执行命令。
- tcp_port :供 clickhouse 原生客户端访问。
- mysql_port :供 MySQL 客户端访问的兼容端口。
例:使用 HTTP API
[[email protected]]# curl 10.0.0.1:8123 Ok. [[email protected]]# curl '10.0.0.1:8123/?user=default&password=xxx' -d 'show databases' INFORMATION_SCHEMA default information_schema system
例:使用原生客户端
docker run -it --rm yandex/clickhouse-client:21.11 # --host localhost # --port 9000 # --user default # --password '' # --query ''
例:使用 MySQL 客户端
mysql -h 10.0.0.1 -P 9004 -u root -p
# 配置
- 配置文件采用 XML 或 YAML 格式。
- 根节点都是
<clickhouse>
。
- 根节点都是
- config.xml 示例:
<?xml version="1.0"?> <clickhouse> <http_port>8123</http_port> <tcp_port>9000</tcp_port> <mysql_port>9004</mysql_port> <listen_host>127.0.0.1</listen_host> <!-- 默认只允许本机访问 --> </clickhouse>
- users.xml 示例:
<?xml version="1.0"?> <clickhouse> <!-- 定义用户 --> <users> <default> <!-- 用户名,默认为 default --> <password></password> <!-- 明文密码,默认为空字符串 --> <!-- 是否允许通过 SQL 配置 ClickHouse 的用户、权限,默认为 0 --> <access_management>0</access_management> <!-- 允许登录的客户端地址,默认为任何地址 --> <networks> <ip>::/0</ip> </networks> <profile>default</profile> <quota>default</quota> </default> </users> <!-- 定义一些配置,可被用户采用 --> <profiles> <default> <max_memory_usage>10000000000</max_memory_usage> <load_balancing>random</load_balancing> </default> <readonly> <readonly>1</readonly> </readonly> </profiles> <!-- 定义一些配额,可被用户采用 --> <quotas> <default> <interval> <!-- 限制用户在 duration 时间内,消耗的 queries 等资源数量,取值为 0 则不限制 --> <duration>3600</duration> <queries>0</queries> <errors>0</errors> <result_rows>0</result_rows> <read_rows>0</read_rows> <execution_time>0</execution_time> </interval> </default> </quotas> </clickhouse>
- 创建管理员用户的步骤:
- 在 users.xml 中修改 default 用户的配置,然后重启 ClickHouse 。
<access_management>1</access_management> <networks> <ip>127.0.0.1</ip> </networks>
- 用 default 用户登录 ClickHouse ,创建管理员用户:
CREATE USER root@'%' IDENTIFIED WITH PLAINTEXT_PASSWORD BY '******' GRANT ALL ON *.* TO root WITH GRANT OPTION
- 在 users.xml 中修改 default 用户的配置,然后重启 ClickHouse 。
# 集群
- ClickHouse 支持部署多个 server 实例,组成集群。
- 可以连接到 zookeeper ,保证分布式一致性。
- config.xml 中集群的配置示例:
<remote_servers> <cluster1> <!-- 集群名 --> <shard> <!-- 一个分片 --> <replica> <!-- 该分片中的一个副本 --> <host>10.0.0.1</host> <port>9000</port> </replica> <weight>1</weight> <!-- 该分片存储新数据的权重,默认为 1 --> </shard> <shard> <replica> <host>10.0.0.2</host> <port>9000</port> </replica> </shard> </cluster1> </remote_servers>
- 集群中可以划分多个分片,分别存储不同的数据。
- 每个分片可以包含多个副本实例,存储相同的数据。