设置防火墙规则-启用对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数据库服务器的远程访问。