以下是一个简洁的教程,指导你在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-data
和clickhouse-logs
)确保数据不丢失。 - 配置文件映射(如
config.xml
)确保配置持久化。
- 数据和日志卷(
-
性能:
- ClickHouse适合OLAP场景,不适合高并发OLTP查询。
- 确保服务器有足够内存(建议至少4GB)和存储空间。
-
故障排查:
- 查看日志:
docker logs clickhouse-server
。 - 测试端口:
telnet <server_ip> 8123
或telnet <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。如果需要更复杂的集群配置或有特定问题,请提供细节,我可以进一步协助!