如何使用 docker 部署和配置远程 clickhouse 数据库实例

Far*_*iri 2 database clickhouse

我最近不得不将 clickhouse 添加到我们的技术堆栈中,但不幸的是我没有找到任何适合我的需求的好的、简单的和快速的教程,经过一些尝试和错误后我可以自己完成。为了帮助其他人,我决定分享我的经验。

那么如何 使用docker部署和配置远程ClickHouse数据库实例呢?

Far*_*iri 9

ClickHouse 设置

这是使用 docker 在远程服务器上部署ClickHouse的设置指南。

安装

您必须在远程系统上预安装 docker。

服务器

运行以下命令:

$ docker run -d --name some-clickhouse-server -p 8123:8123 --ulimit nofile=262144:262144 --volume=$HOME/some_clickhouse_database:/var/lib/clickhouse yandex/clickhouse-server
Run Code Online (Sandbox Code Playgroud)

ClickHouse 服务器使用端口8123作为默认端口,但您可以使用任何其他开放端口,但请记住将该端口公开到外部网络。服务器附带一个没有密码的默认用户。

客户

在服务器中运行以下命令,以默认用户连接clickhouse服务器。

$ docker run -it --rm --link some-clickhouse-server:clickhouse-server yandex/clickhouse-client --host clickhouse-server
Run Code Online (Sandbox Code Playgroud)

配置

打开clickhouse服务器docker容器

$ docker exec -it some-clickhouse-server bash
Run Code Online (Sandbox Code Playgroud)

1. 为用户启用SQL驱动的访问控制和帐户管理 default

在clickhouse服务器docker容器中:

$ cd etc/clickhouse-server

在user.xml文件中注释掉以下行以启用访问控制:

<access_management>1</access_management>
Run Code Online (Sandbox Code Playgroud)

请注意,此操作是不安全的,完成工作后,您应该将访问控制更改为:

<access_management>0</access_management>
Run Code Online (Sandbox Code Playgroud)

2. 收听其他网络:

etc/clickhouse-server/config.xml注释掉<listen_host>::</listen_host>允许远程连接。您应该看到该端口在系统网络中已打开:

root@myvm:~# lsof -i :8123
COMMAND       PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
docker-pr 1141768 root    4u  IPv6 53989091      0t0  TCP *:8123 (LISTEN)
Run Code Online (Sandbox Code Playgroud)

使用用户创建数据库

在这一部分中,我们创建一个简单的数据库和用户。然后我们将数据库的权限授予该用户。

有两种类型的同步,它们可以相互补充:

1.创建用户

CREATE USER IF NOT EXISTS user1 IDENTIFIED WITH PLAINTEXT_PASSWORD BY 'pass1'
Run Code Online (Sandbox Code Playgroud)

您可以使用命令检查用户SHOW USERS

2.创建数据库

CREATE DATABASE IF NOT EXISTS db1
Run Code Online (Sandbox Code Playgroud)

您可以使用命令检查数据库SHOW DATABASES

3.授予用户数据库权限

您可以向用户授予有限权限或所有权限。

GRANT ALL PRIVILEGES ON db1.* TO user1
Run Code Online (Sandbox Code Playgroud)

4. 将新用户连接到数据库

现在我们可以使用创建的帐户连接到服务器。

$ docker run -it --rm --link some-clickhouse-server:clickhouse-server yandex/clickhouse-client --host clickhouse-server -u user1 --password pass1 
Run Code Online (Sandbox Code Playgroud)

确保用户拥有所有权限并有权访问数据库:

:) SHOW GRANTS
:) SHOW DATABASES
Run Code Online (Sandbox Code Playgroud)

创建示例表

Clickhouse 支持SQL

创建表:

:) USE db1
Run Code Online (Sandbox Code Playgroud)
:) CREATE TABLE names (
 id UInt64,
 name String,
 created DateTime
 ) ENGINE = MergeTree()
 PRIMARY KEY id
 ORDER BY id;
Run Code Online (Sandbox Code Playgroud)
:) SHOW TABLES
Run Code Online (Sandbox Code Playgroud)

你有它。您可以使用 clickhouse-client 和您的用户/密码从其他网络连接到数据库。