当前位置: 首页 > article >正文

Clickhouse笔记(二) 集群搭建

0.集群规划

操作系统使用ubuntu2204server,8C8G100G。

节点分片部署
192.168.50.5分片1副本1clickhouse-server/clickhouse-client/keeper
192.168.50.6分片1副本2clickhouse-server/clickhouse-client/keeper
192.168.60.7分片2副本1clickhouse-server/clickhouse-client/keeper
192.168.50.25分片2副本2clickhouse-server/clickhouse-client

四台主机都作为数据分片,每个数据分片有两个副本。keeper 部署到三个节点上,奇数节点用于实现 ClickHouse Keeper 中要求的票选数。

1.准备节点

  • 准备操作系统 ubuntu 或centos,尽量和你生产环境的操作系统版本一致
  • 统一时区,配置NTP(测试环境可以简略,只要节点的时区统一即可)
  • 配置ssh免密登录(可选)
1.1 使用指定的版本

根据实际情况安装指定版本的clickhouse.使用命令curl https://clickhouse.com/ | sh安装的clickhouse默认是最新版本的,但是有时我们需要安装指定的稳定版本,登录 https://packages.clickhouse.com/ 可以找到clickhouse为不同linux发行版本准备的各个版本的.

1.2 使用第三方版本

也可以使用Altinity的稳定版本 https://builds.altinity.cloud/

sudo apt update
sudo apt install -y curl gnupg2 apt-transport-https ca-certificates dialog
sudo sh -c 'mkdir -p /usr/share/keyrings && curl -s https://builds.altinity.cloud/apt-repo/pubkey.gpg | gpg --dearmor > /usr/share/keyrings/altinity-archive-keyring.gpg'
sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/altinity-archive-keyring.gpg] https://builds.altinity.cloud/apt-repo stable main" > /etc/apt/sources.list.d/altinity.list'
sudo apt update
sudo apt install -y clickhouse-server clickhouse-client

v24.4.1.2088-stable

🖊 上面两种安装方式任选一种,在每台服务器上安装clickhouse。

安装完成后使用下面的命令启动clickhouse.

sudo -u alfiy clickhouse server

也可以以服务的方式启动

sudo service clickhouse-server start

2.配置集群

注意,ClickHouse 要求每个分片的每个副本必须配置在单独的实例上,也就是说在整个集群范围内,一共有多少个副本,就需要创建多少个 ClickHouse 实例。最佳实践是3分片2副本6实例。

2.0 修改hosts

如果在clickhouse的配置中,使用了域名配置而不是IP地址,除非你的域名真实存在,否则需要修改本机的hosts文件。由于我同时测试了使用域名和IP两种配置方式,所以在本例中需要同时修改四个节点的hosts文件。

打开/etc/hosts文件,添加以下内容。

192.168.50.5 node1
192.168.50.6 node2
192.168.50.7 node3
192.168.50.25 node4

修改完成后,可以使用ping node1命令查看hosts是否生效,如果生效就能够ping的通。

2.1修改node1的配置

在node2的/etc/clickhouse-server/config.xml文件的标签中添加以下内容。

    <!-- 添加以下条目以允许通过网络接口进行外部通信。 -->
    <listen_host>0.0.0.0</listen_host>

    <!-- 指定实例启用 ClickHouse Keeper。更新每台服务器的<server_id>设置,node1为1、node2为2、node3为3。-->
    <keeper_server>
        <tcp_port>9181</tcp_port>
        <server_id>1</server_id>
        <log_storage_path>/var/lib/clickhouse/coordination/log</log_storage_path>
        <snapshot_storage_path>/var/lib/clickhouse/coordination/snapshots</snapshot_storage_path>

        <coordination_settings>
            <operation_timeout_ms>10000</operation_timeout_ms>
            <session_timeout_ms>30000</session_timeout_ms>
            <raft_logs_level>warning</raft_logs_level>
        </coordination_settings>

        <raft_configuration>
            <server>
                <id>1</id>
                <hostname>192.168.50.5</hostname>
                <port>9234</port>
            </server>
            <server>
                <id>2</id>
                <hostname>192.168.50.6</hostname>
                <port>9234</port>
            </server>
            <server>
                <id>3</id>
                <hostname>192.168.50.7</hostname>
                <port>9234</port>
            </server>
        </raft_configuration>
    </keeper_server>

    <!-- 指定实例所使用的 ClickHouse Keeper,可以使用域名也可以使用IP地址 -->
    <zookeeper>
        <node>
            <host>192.168.50.5</host>
            <port>9181</port>
        </node>
        <node>
            <host>192.168.50.6</host>
            <port>9181</port>
        </node>
        <node>
            <host>192.168.60.7</host>
            <port>9181</port>
        </node>
    </zookeeper>

    <remote_servers>
        <!-- cluster_2S_2R 标签为集群名称,可以自定义但集群中的节点保持一致 -->
        <cluster_2S_2R>
            <shard>
                <replica>
                    <host>192.168.50.5</host>
                    <port>9000</port>
                    <user>default</user>
                    <password>your_password</password>
                </replica>
                <replica>
                    <host>192.168.50.6</host>
                    <port>9000</port>
                    <user>default</user>
                    <password>your_password</password>
                </replica>
            </shard>
            <shard>
                <replica>
                    <host>192.168.50.7</host>
                    <port>9000</port>
                    <user>default</user>
                    <password>your_password</password>
                </replica>
                <replica>
                    <host>192.168.50.25</host>
                    <port>9000</port>
                    <user>default</user>
                    <password>your_password</password>
                </replica>
            </shard>
        </cluster_2S_2R>
    </remote_servers>
    <macros>
        <!-- shard标签为分片数,replica为副本数 -->
        <shard>01</shard>
        <replica>01</replica>
    </macros>

🖊 <server_id>1</server_id> 对应node1 <server_id>2</server_id>对应node2<server_id>3</server_id>对应node3

2.2 修改node2的配置

在node2的/etc/clickhouse-server/config.xml文件的标签中添加以下内容。

    <!-- 添加以下条目以允许通过网络接口进行外部通信。 -->
    <listen_host>0.0.0.0</listen_host>

    
    <keeper_server>
        <tcp_port>9181</tcp_port>
        <server_id>2</server_id>
        <log_storage_path>/var/lib/clickhouse/coordination/log</log_storage_path>
        <snapshot_storage_path>/var/lib/clickhouse/coordination/snapshots</snapshot_storage_path>

        <coordination_settings>
            <operation_timeout_ms>10000</operation_timeout_ms>
            <session_timeout_ms>30000</session_timeout_ms>
            <raft_logs_level>warning</raft_logs_level>
        </coordination_settings>

        <!-- 指定实例启用 ClickHouse Keeper。更新每台服务器的<server_id>设置,node1为1、node2为2、node3为3。-->
        <raft_configuration>
            <server>
                <id>1</id>
                <hostname>node1</hostname>
                <port>9234</port>
            </server>
            <server>
                <id>2</id>
                <hostname>node2</hostname>
                <port>9234</port>
            </server>
            <server>
                <id>3</id>
                <hostname>node3</hostname>
                <port>9234</port>
            </server>
        </raft_configuration>
    </keeper_server>

    <!-- 指定实例所使用的 ClickHouse Keeper 可以使用IP也可以使用域名,或者在hosts文件中配置域名 -->
    <zookeeper>
        <node>
            <host>node1</host>
            <port>9181</port>
        </node>
        <node>
            <host>node2</host>
            <port>9181</port>
        </node>
        <node>
            <host>node3</host>
            <port>9181</port>
        </node>
    </zookeeper>

    <remote_servers>
        <cluster_2S_2R>
            <shard>
                <replica>
                    <host>node1</host>
                    <port>9000</port>
                    <user>default</user>
                    <password>your_password</password>
                </replica>
                <replica>
                    <host>node2</host>
                    <port>9000</port>
                    <user>default</user>
                    <password>your_password</password>
                </replica>
            </shard>
            <shard>
                <replica>
                    <host>node3</host>
                    <port>9000</port>
                    <user>default</user>
                    <password>your_password</password>
                </replica>
                <replica>
                    <host>node4</host>
                    <port>9000</port>
                    <user>default</user>
                    <password>your_password</password>
                </replica>
            </shard>
        </cluster_2S_2R>
    </remote_servers>
    <macros>
        <shard>01</shard>
        <replica>02</replica>
    </macros>

2.3 修改node3的配置

在node3的/etc/clickhouse-server/config.xml文件的标签中添加以下内容。

    <!-- 添加以下条目以允许通过网络接口进行外部通信。 -->
    <listen_host>0.0.0.0</listen_host>
    
    <keeper_server>
        <tcp_port>9181</tcp_port>
        <server_id>2</server_id>
        <log_storage_path>/var/lib/clickhouse/coordination/log</log_storage_path>
        <snapshot_storage_path>/var/lib/clickhouse/coordination/snapshots</snapshot_storage_path>

        <coordination_settings>
            <operation_timeout_ms>10000</operation_timeout_ms>
            <session_timeout_ms>30000</session_timeout_ms>
            <raft_logs_level>warning</raft_logs_level>
        </coordination_settings>

        <!-- 指定实例启用 ClickHouse Keeper。更新每台服务器的<server_id>设置,node1为1、node2为2、node3为3。-->
        <raft_configuration>
            <server>
                <id>1</id>
                <hostname>node1</hostname>
                <port>9234</port>
            </server>
            <server>
                <id>2</id>
                <hostname>node2</hostname>
                <port>9234</port>
            </server>
            <server>
                <id>3</id>
                <hostname>node3</hostname>
                <port>9234</port>
            </server>
        </raft_configuration>
    </keeper_server>

    <!-- 指定实例所使用的 ClickHouse Keeper 可以使用IP也可以使用域名,或者在hosts文件中配置域名 -->
    <zookeeper>
        <node>
            <host>node1</host>
            <port>9181</port>
        </node>
        <node>
            <host>node2</host>
            <port>9181</port>
        </node>
        <node>
            <host>node3</host>
            <port>9181</port>
        </node>
    </zookeeper>

    <remote_servers>
        <cluster_2S_2R>
            <shard>
                <replica>
                    <host>node1</host>
                    <port>9000</port>
                    <user>default</user>
                    <password>your_password</password>
                </replica>
                <replica>
                    <host>node2</host>
                    <port>9000</port>
                    <user>default</user>
                    <password>your_password</password>
                </replica>
            </shard>
            <shard>
                <replica>
                    <host>node3</host>
                    <port>9000</port>
                    <user>default</user>
                    <password>your_password</password>
                </replica>
                <replica>
                    <host>node4</host>
                    <port>9000</port>
                    <user>default</user>
                    <password>your_password</password>
                </replica>
            </shard>
        </cluster_2S_2R>
    </remote_servers>
    <macros>
        <shard>02</shard>
        <replica>01</replica>
    </macros>

从以上配置文件中可以看出,node1,node2,node3的区别只是<macros></macros>标签中的区别。

2.4 修改node4的配置

在node4的/etc/clickhouse-server/config.xml文件的标签中添加以下内容。

<!-- 添加以下条目以允许通过网络接口进行外部通信。 -->
<listen_host>0.0.0.0</listen_host>

<!-- 指定实例所使用的 ClickHouse Keeper -->
<zookeeper>
    <node>
        <host>node1</host>
        <port>9181</port>
    </node>
    <node>
        <host>node2</host>
        <port>9181</port>
    </node>
    <node>
        <host>node3</host>
        <port>9181</port>
    </node>
</zookeeper>

<remote_servers>
    <cluster_2S_2R>
        <shard>
            <replica>
                <host>node1</host>
                <port>9000</port>
                <user>default</user>
                <password>your_password</password>
            </replica>
            <replica>
                <host>node2</host>
                <port>9000</port>
                <user>default</user>
                <password>your_password</password>
            </replica>
        </shard>
        <shard>
            <replica>
                <host>node3</host>
                <port>9000</port>
                <user>default</user>
                <password>your_password</password>
            </replica>
            <replica>
                <host>node4</host>
                <port>9000</port>
                <user>default</user>
                <password>your_password</password>
            </replica>
        </shard>
    </cluster_2S_2R>
</remote_servers>
<macros>
    <shard>02</shard>
    <replica>02</replica>
</macros>

3.查看集群

集群启动后,可以使用clickhouse client登录客户端,使用以下命令查看集群的相关信息。

SHOW CLUSTERS;
SELECT *
FROM system.zookeeper
WHERE path IN ('/', '/clickhouse');

这个查询时间有点长

SELECT
    cluster,
    shard_num,
    replica_num,
    host_name,
    is_local,
    user,
    database_shard_name,
    database_replica_name
FROM system.clusters;

在这里插入图片描述

在这里插入图片描述


http://www.kler.cn/a/368881.html

相关文章:

  • 01.04、回文排序
  • django游戏门户系统
  • 牛客周赛 Round 65(A—G)
  • 【golang】 lo.Map使用
  • Flink-cdc Schema Evolution 详解
  • 面向对象(上)
  • 【Golang】Go语言中如何进行包管理
  • 新品发布:Manus Metagloves Pro虚拟现实手套
  • 蓝桥杯 单片机 DS1302和DS18B20
  • 大数据Azkaban(二):Azkaban简单介绍
  • 【随便聊聊】MySQL数据类型详解:从基础到高级应用
  • 新华三H3CNE网络工程师认证—OSPF路由协议
  • NLP实践项目1——判断推文的负面情绪
  • C++的 / 运算符
  • 如何构建一个支持GPU的Llamafile容器
  • 【知识科普】正则表达式深入解读
  • C语言 | Leetcode C语言题解之第514题自由之路
  • 基于知识图谱的教学案例问答系统
  • el-date-picker时间范围搜索条件,watch监听
  • 接口自动化-框架搭建(Python+request+pytest+allure)
  • MySQL第四次作业
  • C++-继承
  • 传知代码-ChatGPT多模态命名实体识别
  • 用python将pdf转成图片转换成对应的word文件
  • 9.Three.js的光源
  • [C++11] 右值引⽤与移动语义