ClickHouse集群新建库表

本文详细介绍了如何在ClickHouse中进行集群部署、新建数据库和物理表,并展示了如何创建分布式表。通过示例代码,展示了CREATE DATABASE和CREATE TABLE语句的使用,以及ReplicatedMergeTree和Distributed引擎的配置,包括分区键、主键和排序键的设定,为数据存储和查询提供了基础架构。

ClickHouse新建库表


集群部署传送门
https://blog.youkuaiyun.com/xushijie89/article/details/123039704

新建库

CREATE DATABASE db_name on cluster cluster_3shards_2replicas COMMENT '测试库'

新建物理表

create table table_name on cluster cluster_3shards_2replicas(
 id UInt32,
 sku_id String,
 total_amount Decimal(16,2),
 create_time Datetime
) engine = ReplicatedMergeTree('/clickhouse/tables/{shard}/{database}/table_name','{replica}')
 partition by toYYYYMMDD(create_time)
 primary key (id)
 order by (id,sku_id);

新建分布式表(逻辑表)

create table db_name.table_name_all on cluster cluster_3shards_2replicas(
 id UInt32,
 sku_id String,
 total_amount Decimal(16,2),
 create_time Datetime
) ENGINE = Distributed(cluster_3shards_2replicas, db_name, table_name, hiveHash(id));
<think> 根据用户的问题,用户想要了解使用Docker部署ClickHouse集群的详细步骤。结合之前的引用内容,特别是引用[3]和[4]中提到了使用Docker部署ClickHouse以及搭集群的方法,我将整理出一个详细的步骤。 注意:由于引用[4]提到了一台物理机搭两台CK的集群,我们将以此为基础进行说明。同时,引用[3]中的docker-compose配置可以作为单个节点的参考,我们将扩展为集群配置。 步骤概述: 1. 准备环境:确保所有节点安装了Docker,并且网络互通(如果是单机模拟集群,则只需要一台机器)。 2. 编写docker-compose.yml文件:定义多个ClickHouse服务,配置集群参数。 3. 配置ClickHouse集群:在每个节点中配置集群信息(包括分片和副本)。 4. 启动集群:使用docker-compose启动所有服务。 5. 验证集群:通过SQL查询验证集群状态。 详细步骤: 步骤1: 安装Docker和Docker Compose 在每台服务器上安装Docker和Docker Compose(如果使用多台机器,则每台都需要;单机则只需一次)。 以CentOS为例: ```bash # 安装Docker yum -y install docker service docker start # 安装Docker Compose # 首先安装pip yum -y install python-pip # 然后安装docker-compose pip install docker-compose ``` 步骤2: 创目录结构 为了方便管理,我们创一个项目目录,并在其中创每个ClickHouse节点的配置和数据目录。 假设我们在单机上模拟两个节点的集群(两个分片,每个分片一个副本),目录结构如下: ``` clickhouse-cluster/ ├── docker-compose.yml ├── shard1 │ ├── config.xml │ ├── users.xml │ └── data ├── shard2 │ ├── config.xml │ ├── users.xml │ └── data ``` 步骤3: 编写docker-compose.yml文件 这里我们定义两个服务(clickhouse-shard1和clickhouse-shard2),分别对应两个分片。 注意:需要配置容器间的网络,以便它们可以互相通信。 示例docker-compose.yml内容如下(参考引用[3]并修改): ```yaml version: '3' services: clickhouse-shard1: image: clickhouse/clickhouse-server:24.12 container_name: clickhouse-shard1 ports: - "9001:9000" # 客户端TCP端口 - "8124:8123" # HTTP接口端口 ulimits: nofile: soft: 262144 hard: 262144 environment: CLICKHOUSE_USER: root CLICKHOUSE_PASSWORD: clickhouse CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT: 1 TZ: Asia/Shanghai volumes: - ./shard1/data:/var/lib/clickhouse - ./shard1/config.xml:/etc/clickhouse-server/config.xml - ./shard1/users.xml:/etc/clickhouse-server/users.xml networks: clickhouse_net: ipv4_address: 172.18.0.2 clickhouse-shard2: image: clickhouse/clickhouse-server:24.12 container_name: clickhouse-shard2 ports: - "9002:9000" - "8125:8123" ulimits: nofile: soft: 262144 hard: 262144 environment: CLICKHOUSE_USER: root CLICKHOUSE_PASSWORD: clickhouse CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT: 1 TZ: Asia/Shanghai volumes: - ./shard2/data:/var/lib/clickhouse - ./shard2/config.xml:/etc/clickhouse-server/config.xml - ./shard2/users.xml:/etc/clickhouse-server/users.xml networks: clickhouse_net: ipv4_address: 172.18.0.3 networks: clickhouse_net: driver: bridge ipam: config: - subnet: 172.18.0.0/16 ``` 步骤4: 配置集群参数 在每个分片的配置文件中,我们需要配置集群信息。这里我们使用一个集群,包含两个分片,每个分片一个副本。 在shard1的config.xml中,我们需要添加如下集群配置(在<remote_servers>标签中): ```xml <yandex> <remote_servers> <clickhouse_cluster> <!-- 集群名称 --> <shard> <!-- 分片1 --> <replica> <host>172.18.0.2</host> <port>9000</port> </replica> </shard> <shard> <!-- 分片2 --> <replica> <host>172.18.0.3</host> <port>9000</port> </replica> </shard> </clickhouse_cluster> </remote_servers> </yandex> ``` 同样地,在shard2的config.xml中也要有相同的集群配置(因为每个节点都需要知道整个集群的拓扑)。 注意:我们使用容器内部的IP和端口(9000是ClickHouse默认的TCP端口)。 另外,还需要在每个节点的配置文件中添加以下配置,以便其他节点可以访问: ```xml <listen_host>0.0.0.0</listen_host> ``` 步骤5: 启动集群 在docker-compose.yml所在目录运行: ```bash docker-compose up -d ``` 步骤6: 验证集群 进入任意一个容器,连接到ClickHouse,执行查询查看集群状态。 ```bash docker exec -it clickhouse-shard1 bash clickhouse-client -u root --password clickhouse ``` 在ClickHouse客户端执行: ```sql SELECT * FROM system.clusters; ``` 应该能看到我们配置的集群clickhouse_cluster)以及两个分片。 为了测试分布式,可以创一个分布式: ```sql CREATE TABLE test_distributed ON CLUSTER clickhouse_cluster ( id Int32, name String ) ENGINE = Distributed(clickhouse_cluster, default, test_local, id); ``` 这里假设有一个本地test_local(需要先创),然后分布式test_distributed会将数据分布到集群的所有分片上。 注意事项: 1. 在真实的多机部署中,需要确保每台机器的防火墙允许互相访问所需的端口(如9000)。 2. 如果使用多台物理机,则每台机器上运行一个ClickHouse容器,并修改配置文件中对应的IP地址为实际容器的IP(或者使用主机网络模式,并配置主机IP)。 3. 上述示例中,我们使用了静态IP定义网络,这样可以确保容器重启后IP不变,便于配置。 总结:通过docker-compose可以方便地在单机模拟多节点集群,实际多机部署时需要在每台机器上启动一个容器,并正确配置网络和集群参数。 以上步骤基于引用[3][^3]和引用[4][^4]的内容,并进行了扩展和调整。 §§相关问题§§ 1. 如何配置ClickHouse集群的分片和副本? 2. Docker网络模式对ClickHouse集群部署有哪些影响? 3. 如何监控Docker容器中的ClickHouse集群性能? 4. 在ClickHouse集群中如何管理和维护分布式? </think> ### 使用 Docker 部署 ClickHouse 集群的详细步骤 以下步骤基于 Docker Compose 实现单机模拟多节点集群(两台 ClickHouse 节点),真实多机部署需调整网络配置和主机映射。 #### 1. **环境准备** ```bash # 安装 Docker 和 Docker Compose(已安装可跳过) yum -y install docker python-pip service docker start pip install docker-compose ``` #### 2. **创集群配置文件** 新建目录结构: ``` clickhouse-cluster/ ├── docker-compose.yml ├── shard1/ │ ├── config.xml │ └── users.xml └── shard2/ ├── config.xml └── users.xml ``` #### 3. **配置 Docker Compose (`docker-compose.yml`)** ```yaml version: '3' services: clickhouse-shard1: image: clickhouse/clickhouse-server:24.12 container_name: clickhouse-shard1 ports: - "9001:9000" # 客户端TCP端口 - "8124:8123" # HTTP接口 volumes: - ./shard1/config.xml:/etc/clickhouse-server/config.xml - ./shard1/users.xml:/etc/clickhouse-server/users.xml networks: clickhouse_net: ipv4_address: 172.18.0.2 clickhouse-shard2: image: clickhouse/clickhouse-server:24.12 container_name: clickhouse-shard2 ports: - "9002:9000" - "8125:8123" volumes: - ./shard2/config.xml:/etc/clickhouse-server/config.xml - ./shard2/users.xml:/etc/clickhouse-server/users.xml networks: clickhouse_net: ipv4_address: 172.18.0.3 networks: clickhouse_net: driver: bridge ipam: config: - subnet: 172.18.0.0/16 ``` > 说明:通过自定义网络固定容器IP,确保节点互通[^3][^4]。 #### 4. **配置集群拓扑 (`shard1/config.xml` 和 `shard2/config.xml`)** ```xml <!-- 在 <yandex> 标签内添加 --> <remote_servers> <cluster_2shards> <!-- 集群名称 --> <shard> <!-- 分片1 --> <replica> <host>172.18.0.2</host> <port>9000</port> </replica> </shard> <shard> <!-- 分片2 --> <replica> <host>172.18.0.3</host> <port>9000</port> </replica> </shard> </cluster_2shards> </remote_servers> <!-- 允许监听所有网络 --> <listen_host>0.0.0.0</listen_host> ``` > 注意:两个节点的 `config.xml` 需保持相同集群配置[^3]。 #### 5. **配置用户认证 (`users.xml`)** ```xml <users> <default> <!-- 默认用户 --> <password>clickhouse</password> <networks> <ip>::/0</ip> </networks> </default> </users> ``` #### 6. **启动集群** ```bash docker-compose up -d ``` #### 7. **验证集群状态** ```bash # 进入节点1容器 docker exec -it clickhouse-shard1 clickhouse-client --user default --password clickhouse # 查询集群拓扑 SELECT cluster, shard_num, host_name FROM system.clusters WHERE cluster='cluster_2shards'; ``` 预期输出: ``` ┌─cluster───────┬─shard_num─┬─host_name──┐ │ cluster_2shards│ 1 │ 172.18.0.2 │ │ cluster_2shards│ 2 │ 172.18.0.3 │ └───────────────┴───────────┴────────────┘ ``` #### 8. **创分布式测试** ```sql -- 在节点1执行 CREATE TABLE distributed_test ON CLUSTER cluster_2shards ( id Int32, data String ) ENGINE = Distributed(cluster_2shards, default, local_test, id); -- 插入数据 INSERT INTO distributed_test VALUES (1, 'shard1_data'), (2, 'shard2_data'); -- 查询分布 SELECT * FROM distributed_test ORDER BY id; ``` ### 关键要点说明 1. **网络配置**:使用自定义 Bridge 网络固定 IP,避免容器重启IP变化[^3]。 2. **端口映射**:每个节点暴露独立端口(如9001/9002)避免冲突。 3. **多机部署**:将节点部署到不同物理机时: - 修改 `config.xml` 中的主机名为真实IP - 确保防火墙开放 `9000/tcp` 端口 4. **数据持久化**:添加卷映射(如 `- ./shard1/data:/var/lib/clickhouse`)防止数据丢失[^3]。 > 通过 Docker Compose 可快速扩展集群规模,新增分片只需复制服务配置并修改端口/IP[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值