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;

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

alfiy

请博主喝瓶矿泉水吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值