发布日期:2022-12-01 VIP内容

设置防火墙规则-启用对ClickHouse数据库服务器的远程访问

如果您打算将ClickHouse本地用于运行在同一服务器上的应用程序,或者在服务器上不启用防火墙,则不需要完成本节。如果在服务器上启用了防火墙,并且想要远程连接到ClickHouse数据库服务器,则应该执行此步骤。

执行步骤

假设目前,您的服务器已启用防火墙,禁止您的公共IP地址访问所有端口。通过完成以下两个步骤以允许远程访问:

(1)添加一个防火墙规则,允许传入连接到端口8123,这是ClickHouse服务器运行的HTTP端口。

执行以下命令编辑配置文件:

$ sudo nano /etc/clickhouse-server/config.xml

然后取消包含<!——<listen_host>0.0.0.0</listen_host>——>的行的注释,像下面这个文件:

# /etc/clickhouse-server/config.xml

...
 <interserver_http_host>example.yandex.ru</interserver_http_host>
    -->

    <!-- Listen specified host. use :: (wildcard IPv6 address), if you want to accept connections both with IPv4 and IPv6 from everywhere. -->
    <!--::-->
    <!-- Same for hosts with disabled ipv6: -->
    <listen_host>0.0.0.0<!-- Default values - try listen localhost on ipv4 and ipv6: -->
    <!--
    <listen_host>::1</listen_host>
    <listen_host>127.0.0.1</listen_host>
    -->
...

保存以上文件修改,然后重启服务:

$ sudo service clickhouse-server restart

将看到该命令的以下输出:

Stop clickhouse-server service:
DONE
Start clickhouse-server service: Path to data directory in /etc/clickhouse-server/config.xml: /var/lib/clickhouse/
DONE

将远程服务器的IP添加到名为public的区域:

$ sudo firewall-cmd --permanent --zone=public --add-source=second_server_ip/32

ClickHouse的服务器在端口8123上监听HTTP连接,在端口9000上监听来自clickhouse-client的连接。允许第二个服务器的IP地址访问到这两个端口,使用以下命令:

$ sudo firewall-cmd --permanent --zone=public --add-port=8123/tcp
$ sudo firewall-cmd --permanent --zone=public --add-port=9000/tcp

将看到以下两个命令的输出,显示已经启用了对两个端口的访问:

success

现在已经添加了规则,重新加载防火墙以使更改生效:

$ sudo firewall-cmd --reload

此命令还将输出一条success消息。ClickHouse现在可以从您添加的IP访问。如果需要,可以随意添加其他ip,比如本地计算机的地址。

要验证可以从远程计算机连接到ClickHouse服务器,首先确保在第二个服务器上其上安装了ClickHouse客户端。在第二个服务器,通过执行以下命令启动一个客户端会话:

$ clickhouse-client --host your_server_ip --multiline

将看到以下输出,表明已成功从远程连接到服务器:

ClickHouse client version 19.4.3.
Connecting to your_server_ip:9000 as user default.
Connected to ClickHouse server version 19.4.3 revision 54416.

hostname :)

在此步骤中,通过调整防火墙规则,已经启用了对ClickHouse数据库服务器的远程访问。