Clickhouse 单节点部署多个实例

本文详细介绍了如何在同一台机器上部署多个ClickHouse实例,包括配置文件的复制与修改、端口号与数据目录的调整,以及日志目录的设置。此外,还分享了在部署过程中可能遇到的故障,如启动失败、连接问题等,并提供了相应的解决办法,如修改文件权限、检查数据目录和端口监听等。
摘要由CSDN通过智能技术生成

背景

有时候是因为测试需要,亦或是设备限制,我们需要在单节点上部署多个 clickhouse 实例

单节点单实例

首先回顾一下单节点单实例的部署方式

  1. 首先,在默认位置 /etc/metrika.xml 亦或是其它任意位置创建 metrika.xml
  2. 然后编辑 /etc/clickhouse-server/config.xml,配置 metrika.xml 的路径
  3. 使用 systemctl start clickhouse.service 命令启动 clickhouse 服务

单节点多实例

systemctl 命令的默认路径为 /etc/systemd/system,可以看到这里有个 clickhouse-server.service
在这里插入图片描述
vim /etc/systemd/system/clickhouse-server.service ,可以看到,实际执行的命令是 /usr/bin/clickhouse-server --config=/etc/clickhouse-server/config.xml --pid-file=/run/clickhouse-server/clickhouse-server.pid(pid文件是运行时动态生成的,用来记录进程id)
在这里插入图片描述
如果要在同一台机部署多个实例,只需要将 clickhouse-server.service 文件复制一份,然后修改它的配置文件路径即可。

我这里复制了2份,用作不同场景

  1. 单机单实例 clickhouse-server.service
  2. 1分片1副本 clickhouse-server-1z1s1r.service
  3. 2分片0副本 clickhouse-server-1z2s0r.service
cp /etc/systemd/system/clickhouse-server.service /etc/systemd/system/clickhouse-server-1z1s1r.service
cp /etc/systemd/system/clickhouse-server.service /etc/systemd/system/clickhouse-server-1z2s0r.service

然后,编辑文件,将其中的 config.xmlpid 也改为对应名称

vim /etc/systemd/system/clickhouse-server-1z1s1r.service
# 修改这一行
ExecStart=/usr/bin/clickhouse-server --config=/etc/clickhouse-server/config_1z1s1r.xml --pid-file=/run/clickhouse-server/clickhouse-server-1z1s1r.pid

vim /etc/systemd/system/clickhouse-server-1z2s0r.service
# 修改这一行
ExecStart=/usr/bin/clickhouse-server --config=/etc/clickhouse-server/config_1z2s0r.xml --pid-file=/run/clickhouse-server/clickhouse-server-1z2s0r.pid

在这里插入图片描述

然后,复制并修改出相应的 metrika.xml
在这里插入图片描述
然后,在 /etc/clickhouse-server 目录下,复制出相应的 config 文件,并对里面的 include_from 标签的值,作相应的修改
在这里插入图片描述

vim /etc/clickhouse-server/config_1z1s1r.xml
# 修改这一行
<include_from>/etc/clickhouse-server/metrika/metrika_1z1s1r.xml</include_from>

vim /etc/clickhouse-server/config_1z2s0r.xml
# 修改这一行
<include_from>/etc/clickhouse-server/metrika/metrika_1z2s0r.xml</include_from>

如果不同时启动,这样修改后就可以了。但如果要同时启动,还需修改以下3个地方

  1. 端口号(DBeaver 等数据库查询工具,连接 clickhouse 用的就是 http_port 端口。HTTP接口用于Perl、Python和Go。HTTP接口比原生接口受到更多的限制,但它具有更好的兼容性)
<http_port>8123</http_port>
<tcp_port>9000</tcp_port>
<mysql_port>9004</mysql_port>
<postgresql_port>9005</postgresql_port>
<interserver_http_port>9009</interserver_http_port>

在这里插入图片描述
2. 数据目录

<path>/var/lib/clickhouse/</path>
<tmp_path>/var/lib/clickhouse/tmp</tmp_path>
<user_files_path>/var/lib/clickhouse/user_files</user_files_path>

<user_directories>
  <users_xml>
    <!-- Path to configuration file with predefined users. -->
    <path>users.xml</path>
  </users_xml>
    <path>/var/lib/clickhouse/access/</path>
  </local_directory>
</user_directories>

在这里插入图片描述
3. 日志目录

<log>/var/log/clickhouse-server/clickhouse-server.log</log>
<errorlog>/var/log/clickhouse-server/clickhouse-server.err.log</errorlog>

在这里插入图片描述

  1. 集群配置信息
<users_config>users.xml</users_config>
<include_from>/etc/metrika8201.xml</include_from>

在这里插入图片描述
在这里插入图片描述

故障排查

232

可能会遇到启动失败,232/ADDRESS_FAMILIES

● clickhouse-server.service - ClickHouse Server (analytic DBMS for big data)
   Loaded: loaded (/etc/systemd/system/clickhouse-server.service; enabled; vendor preset: disabled)
   Active: activating (auto-restart) (Result: exit-code) since Sat 2021-11-27 07:07:11 EST; 25s ago
  Process: 1895 ExecStart=/usr/bin/clickhouse-server --config=/etc/clickhouse-server/config.xml --pid-file=/run/clickhouse-server/clickhouse-server.pid (code=exited, status=232/ADDRESS_FAMILIES)
 Main PID: 1895 (code=exited, status=232/ADDRESS_FAMILIES)

在这里插入图片描述
journalctl 可以查看所有的系统日志文件,如果不带参数,将显示所有日志。-u 表示仅查看某个服务的日志。因此这里使用journalctl -u clickhouse-server查看日志。
在这里插入图片描述
注意:有人会说也可以查看 config.xml 里面配置的这个日志 /var/log/clickhouse-server/clickhouse-server.err.log。我把它删了,然后多次重启发现,启动失败时,该文件并不会被创建。我又试了手动创建该文件,依旧无数据被记录。然后还将 own 和 group 都设置成原本的 clickhouse,依旧没数据。因此,启动失败的原因不会被记录到该日志中

从上面的错误日志中,可以看出是访问被拒绝了。使用 ls -l /etc/clickhouse-server 查看文件,发现由于当前为 root 用户,因此复制后的文件,所有者和用户组都为当前root用户,而其它用户没有访问权限,因此上面提示 FileAccessDeniedException
在这里插入图片描述
使用如下命令,将创建用户和用户组都改为clickhouse。然后查看clickhouse-server状态,可以发现已经启动成功了

cd /etc/clickhouse-server
chown clickhouse *
chgrp clickhouse *
ls -l
systemctl status clickhouse-server.service

在这里插入图片描述
另外,如果有集群,禁用掉其它无用机器上,clickhouse 的开机启动 systemctl disable clickhouse,也可帮助避免干扰,帮助更好的排查问题

210

使用 systemctl start clickhouse-server.service 启动clickhouse,然后使用 status 查看启动状态,可以发现启动成功了。
在这里插入图片描述
但使用客户端怎么也连不上,使用本机的 /usr/bin/clickhouse-client --host localhost --port 9000 也连不上
在这里插入图片描述
在这里插入图片描述
使用 journalctl -u clickhouse-server 查看日志,可以提示错误日志记录在 /var/log/clickhouse-server/clickhouse-server.err.log
在这里插入图片描述
使用 vim /var/log/clickhouse-server/clickhouse-server.err.log 查看错误日志
在这里插入图片描述
发现是之前做过集群,然后数据目录没改,现在又换单机模式。在单机的情况下,去读集群表,就报错了
在这里插入图片描述
创建一个 /var/lib/clickhouse0 目录,并将所有者改为clickhouse,然后在 config.xml 中将数据目录指向该目录

mkdir /var/lib/clickhouse0
chown clickhouse /var/lib/clickhouse0
chgrp clickhouse /var/lib/clickhouse0
<path>/var/lib/clickhouse0/</path>
<tmp_path>/var/lib/clickhouse0/tmp</tmp_path>
<user_files_path>/var/lib/clickhouse0/user_files</user_files_path>

<user_directories>
  <users_xml>
    <!-- Path to configuration file with predefined users. -->
    <path>users.xml</path>
  </users_xml>
    <path>/var/lib/clickhouse0/access/</path>
  </local_directory>
</user_directories>

如果你不想换目录,想直接删除多余的表,也是可以的

  • data ,保存了各个数据库的数据
  • metadata ,保存了建表语句,同时链接到了它相关的存储路径,一并删掉即可
    在这里插入图片描述
    在这里插入图片描述

本机9000端口可以访问,外部8123不能访问

使用 lsof -i :8123 查看端口信息,可以发现只监听在本地
在这里插入图片描述
vim /etc/clickhouse-server/config.xml 使这句话 <listen_host>::</listen_host> 不被注释即可
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值