Clickhouse数据库的探索与安装

以下是一个简洁的教程,指导你在Ubuntu系统上通过Docker下载并运行ClickHouse(一个开源的列存储数据库,专为在线分析处理OLAP设计),并确保其支持远程访问。教程基于官方文档和相关资源,适用于初学者。


使用Docker部署ClickHouse教程

前提条件

  • Ubuntu系统(本教程以Ubuntu 22.04为例)。
  • 已安装Docker和Docker Compose(若未安装,见下方步骤)。
  • 具有云服务器公网IP(若需远程访问)。
  • 基本Linux命令行知识。

步骤

1. 安装Docker

如果尚未安装Docker,请执行以下命令:

sudo apt update
sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker

验证Docker安装:

docker --version
2. 拉取ClickHouse Docker镜像

从Docker Hub拉取官方ClickHouse镜像(推荐使用clickhouse/clickhouse-server):

docker pull clickhouse/clickhouse-server:latest
  • latest表示最新版本,也可指定版本(如clickhouse/clickhouse-server:24.3)。
3. 运行ClickHouse容器

使用以下命令启动ClickHouse容器,配置数据持久化和端口映射:

docker run -d --name clickhouse-server \
  --ulimit nofile=262144:262144 \
  -v $(pwd)/clickhouse-data:/var/lib/clickhouse \
  -v $(pwd)/clickhouse-logs:/var/log/clickhouse-server \
  -p 8123:8123 -p 9000:9000 \
  clickhouse/clickhouse-server:latest
  • 参数说明
    • -d:后台运行容器。
    • --name:容器名称为clickhouse-server
    • --ulimit nofile=262144:262144:设置文件描述符限制,提升性能。
    • -v $(pwd)/clickhouse-data:/var/lib/clickhouse:持久化数据目录。
    • -v $(pwd)/clickhouse-logs:/var/log/clickhouse-server:持久化日志目录。
    • -p 8123:8123:映射HTTP接口端口(用于HTTP客户端访问)。
    • -p 9000:9000:映射原生协议端口(用于ClickHouse客户端和进程通信)。
4. 验证容器运行

检查容器是否正常运行:

docker ps

输出应显示clickhouse-server容器,端口映射为0.0.0.0:8123->8123/tcp, 0.0.0.0:9000->9000/tcp

5. 配置远程访问

ClickHouse默认允许远程连接(listen_host::),但需配置用户权限:

  • 进入容器并启动ClickHouse客户端:

    docker exec -it clickhouse-server clickhouse-client
    
  • 创建支持远程访问的用户:

    CREATE USER remote_user IDENTIFIED WITH sha256_password BY 'your_password';
    GRANT ALL ON *.* TO remote_user WITH GRANT OPTION;
    
    • 替换your_password为强密码。
    • '%'允许从任何IP连接,也可指定IP(如'192.168.1.100')。
  • (可选)若需修改配置(如调整listen_host),创建并映射config.xml

    • 在主机创建配置文件目录:

      mkdir -p /path/to/clickhouse-config
      
    • 复制默认配置文件:

      docker cp clickhouse-server:/etc/clickhouse-server/config.xml /path/to/clickhouse-config/config.xml
      
    • 编辑config.xml,确保<listen_host>::</listen_host>未被注释(默认允许远程连接)。

    • 重新运行容器,映射配置文件:

      docker stop clickhouse-server
      docker rm clickhouse-server
      docker run -d --name clickhouse-server \
        --ulimit nofile=262144:262144 \
        -v $(pwd)/clickhouse-data:/var/lib/clickhouse \
        -v $(pwd)/clickhouse-logs:/var/log/clickhouse-server \
        -v /path/to/clickhouse-config/config.xml:/etc/clickhouse-server/config.xml \
        -p 8123:8123 -p 9000:9000 \
        clickhouse/clickhouse-server:latest
      
6. 配置防火墙和云服务器安全组
  • 允许8123和9000端口通过Ubuntu防火墙:

    sudo ufw allow 8123
    sudo ufw allow 9000
    
  • 在云服务器提供商的安全组中,开放8123(HTTP)和9000(原生协议)端口,限制来源IP以提高安全性。

7. 测试远程连接
  • 使用ClickHouse客户端
    在远程机器上安装ClickHouse客户端(或使用Docker):

    docker run -it --rm clickhouse/clickhouse-client --host <server_ip> -u remote_user --password
    
    • 替换<server_ip>为云服务器公网IP。
    • 输入your_password后进入客户端。
  • 使用HTTP接口
    测试HTTP连接:

    curl 'http://<server_ip>:8123/?query=SELECT%201'
    

    应返回1

  • 使用MySQL客户端(可选):
    ClickHouse支持MySQL协议,需启用mysql_port(默认9440,需在config.xml中配置并映射端口):

    docker stop clickhouse-server
    docker rm clickhouse-server
    docker run -d --name clickhouse-server \
      --ulimit nofile=262144:262144 \
      -v $(pwd)/clickhouse-data:/var/lib/clickhouse \
      -v $(pwd)/clickhouse-logs:/var/log/clickhouse-server \
      -v /path/to/clickhouse-config/config.xml:/etc/clickhouse-server/config.xml \
      -p 8123:8123 -p 9000:9000 -p 9440:9440 \
      clickhouse/clickhouse-server:latest
    

    然后使用MySQL客户端连接:

    mysql -h <server_ip> -P 9440 -u remote_user -p
    
8. 基本操作示例

在ClickHouse客户端中执行以下SQL:

  • 创建数据库:

    CREATE DATABASE mydb;
    
  • 创建表:

    USE mydb;
    CREATE TABLE test_table (
        id UInt32,
        name String,
        created_at DateTime
    ) ENGINE = MergeTree()
    PRIMARY KEY id
    ORDER BY id;
    
  • 插入数据:

    INSERT INTO test_table (id, name, created_at) VALUES (1, 'Test', now());
    
  • 查询数据:

    SELECT * FROM test_table;
    
9. 重启容器

若修改配置(如config.xml),重启容器以应用更改:

docker restart clickhouse-server

验证配置生效:

docker logs clickhouse-server

注意事项

  • 安全性

    • 使用强密码,避免默认用户(default)无密码访问。
    • 限制远程访问IP(在SQL用户设置或防火墙规则中)。
    • 考虑启用SSL/TLS(参考ClickHouse文档)。
  • 持久化

    • 数据和日志卷(clickhouse-dataclickhouse-logs)确保数据不丢失。
    • 配置文件映射(如config.xml)确保配置持久化。
  • 性能

    • ClickHouse适合OLAP场景,不适合高并发OLTP查询。
    • 确保服务器有足够内存(建议至少4GB)和存储空间。
  • 故障排查

    • 查看日志:docker logs clickhouse-server
    • 测试端口:telnet <server_ip> 8123telnet <server_ip> 9000
    • 验证用户:SELECT user, host FROM system.users;
  • Docker Compose(可选)
    为简化管理,可使用docker-compose.yml

    version: '3.7'
    services:
      clickhouse-server:
        image: clickhouse/clickhouse-server:latest
        container_name: clickhouse-server
        ports:
          - "8123:8123"
          - "9000:9000"
        volumes:
          - ./clickhouse-data:/var/lib/clickhouse
          - ./clickhouse-logs:/var/log/clickhouse-server
        ulimits:
          nofile:
            soft: 262144
            hard: 262144
    

    启动:

    docker-compose up -d
    

总结

通过以上步骤,你可以在Ubuntu云服务器上使用Docker部署ClickHouse,支持远程访问。使用官方镜像、正确映射端口和持久化目录、配置用户权限和防火墙,即可快速启动并运行ClickHouse。如果需要更复杂的集群配置或有特定问题,请提供细节,我可以进一步协助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值