更新时间:2024-07-19 GMT+08:00

ClickHouse新增磁盘

操作场景

随着业务量的增长,ClickHouse节点数据盘的磁盘容量已不能满足业务需求,需要增加数据盘磁盘数量。

前提条件

ClickHouse集群和实例状态正常。

操作步骤

  1. 登录MRS控制台,在左侧导航栏选择“集群列表 > 现有集群”,单击集群名称。
  2. 单击“节点管理”,在对应的ClickHouse节点组下,单击要增加磁盘的节点名称。

  3. 在“云硬盘”界面,单击“挂载磁盘”。

  4. 在“挂载磁盘”界面,选择“购买云硬盘”。

  5. 购买云硬盘,具体步骤请参见。

  6. 挂载云硬盘。

    1. 在“云硬盘”的“磁盘”页面,找到需要挂载的的云硬盘,单击操作列的“挂载”。
    2. 在弹出的“挂载磁盘”页面,勾选待挂载的云服务器。

    3. 单击“确定”,弹出提示窗口“挂载流程尚未完成,还需初始化才能正常使用”。
    4. 单击“确定”会自动返回云硬盘列表页面。当云硬盘状态为“正在使用”时,表示挂载至云服务器成功。

  7. root用户登录挂载磁盘的节点,初始化Linux数据盘,具体步骤根据实际情况参考或。

    以下操作,以新建分区挂载目录为“/srv/BigData/data2”为例。

  8. 连接ClickHouse服务端,具体操作请参考从零开始使用ClickHouse
  9. 执行以下SQL语句,查看当前ClickHouse感知到的磁盘目录。

    SELECT

    name,

    path,

    formatReadableSize(free_space) AS free,

    formatReadableSize(total_space) AS total,

    formatReadableSize(keep_free_space) AS reserved

    FROM system.disks;

    执行exit;退出ClickHouse服务端。

  10. 创建“/srv/BigData/data2/clickhouse”文件夹,修改挂载磁盘目录拥有者。

    mkdir /srv/BigData/data2/clickhouse

    chown -R omm:wheel /srv/BigData/data2/

  11. 参考访问FusionInsight Manager(MRS 3.x及之后版本),登录FusionInsight Manager。选择“集群 > ClickHouse > 配置 > 全部配置”。
  12. 搜索“_clickhouse.storage_configuration.disks”,在该配置项下,添加新增的ClickHouse数据目录。

    • 首次添加新增的ClickHouse数据目录时需要删除原来的默认变量“${CH_DATA_PATH}”,再添加新增的数据目录。
    • 添加多个目录之间需用“,”分隔,添加的目录以“/”结尾,格式为“/srv/BigData/data1/clickhouse/,...,/srv/BigData/dataN/clickhouse/”。

    例如:在“/srv/BigData/data1/clickhouse/”基础上,添加新增的“,/srv/BigData/data2/clickhouse/”目录,添加完成后为“/srv/BigData/data1/clickhouse/,/srv/BigData/data2/clickhouse/”。

  13. 添加完新增目录后,单击“保存”保存配置。单击“概览”,选择“更多 > 同步配置”。

    添加磁盘操作不需要重启ClickHouse服务,删除磁盘配置需要重启ClickHouse服务。

  14. 参考从零开始使用ClickHouse连接ClickHouse服务端,并执行以下命令查看新增磁盘以及存储策略是否生效。

    SELECT * FROM system.storage_policies;

  15. 验证新建磁盘是否成功。

    执行以下命令在ClickHouse服务端建表并插入数据,并查看数据落盘是否正确。

    create table test(`id` Int32,`name` String) engine=MergeTree() order by id;

    insert into test values(1,'aa'),(2,'bb'),(3,'cc');

    select name, data_paths, storage_policy from system.tables where name = 'test';