实战篇丨ClickHouse初体验之集群搭建指南(上)

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

实战篇丨ClickHouse初体验之集群搭建指南(上)

大家好,今天给大家分享LS同学根据亲身经历整理的一篇关于搭建ClickHouse集群的文章。


该篇文章主要讲述ClickHouse之3节点3分片1副本的集群搭建过程,也算是避坑指南,希望对大家有帮助,特别是CK初学者。



准备工作

11.webp

安装环境

ZooKeeper版本要求

Zookeeper 安装3节点,版本要求在 ZooKeeper 3.4.5 或更高版本.

你可以配置任何现有的 ZooKeeper 集群,系统会使用里面的目录来存取元数据(该目录在创建可复制表时指定)。

如果配置文件中没有设置 ZooKeeper ,则无法创建复制表,并且任何现有的复制表都将变为只读。

在 ClickHouse 中,ZooKeeper 不参与任何实质性的数据传输。ZooKeeper 在 ClickHouse 中主要用在副本表数据的同步(ReplicatedMergeTree引擎)以及分布式表(Distributed)的操作上。

系统要求

ClickHouse可以在任何具有x86_64,AArch64PowerPC64LE CPU架构Linux,FreeBSD或Mac OS X上运行。

官方预构建的二进制文件通常针对x86_64进行编译,并利用SSE 4.2指令集,因此,除非另有说明,支持它的CPU使用将成为额外的系统需求。下面是检查当前CPU是否支持SSE 4.2的命令:

安装的3台机器都需要做验证!!!

# grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"


输出结果如下

22.webp


CPU是否支持SSE 4.2验证结果图

1、查看磁盘占用情况,因后续需要导入数据过大,以防数据盘空间不够。

33.webp


磁盘占用情况结果图2、在 /data1 目录下创建个ClickHouse,然后授权给CK。


3台机器都要执行:

cd /data1
mkdir clickhouse
chownd -R clickhouse:clickhouse /data1/clickhouse


版本选择和下载

ClickHouse的版本分类

  • testing :测试版本
  • prestable:预发稳定版
  • stable:稳定版
  • lts(长期支持)

我们此处选择stable:22.2.2.1-2 版本,具体细节官网有介绍:https://clickhouse.com/docs/en/faq/operations/production/

下载

rpm下载:

https://packages.clickhouse.com/rpm/stable/

由于我们的机器都是生产环境,所以此处选择了rpm的方式安装,提前把安装包下载好,放到安装包下载目录下 (此处我们的机器已经创建无需考虑)(3台机器都需要)

123.webp

解压后文件目录


安装

台机器都要执行:

rpm -ivh clickhouse-common-static-22.2.2.1-2.x86_64.rpm
rpm -ivh clickhouse-server-22.2.2.1-2.noarch.rpm
rpm -ivh clickhouse-client-22.2.2.1-2.noarch.rpm

55.webp

在安装 server 时,会提醒输入密码:此处确保3台机器的密码一致,我们密码设置为 root ,后续在配置时需要用到此处的密码。


配置文件

CK的配置主要为config.xml、user.xml 和 metrika.xml这三个。


配置 config.xml

配置文件的 config.xml更改的点,确保3台机器都要改动,并且改动的参数一致。

<?xml version="1.0"?>
<!-- CH的config是热部署的 -->
<clickhouse>
    <!-- 端口配置 -->
    <http_port>8123</http_port>
    <tcp_port>9000</tcp_port>
    <interserver_http_port>9009</interserver_http_port>
   <!--取消该注释,开启远程访问-->    <listen_host>::</listen_host>

   <!-- 指定数据存储路径 -->
    <path>/data1/clickhouse/</path>
    <tmp_path>/data1/clickhouse/tmp/</tmp_path>
 <!--
user_files_path:包含用户文件的目录,在表函数file()中使用。-->   <user_files_path>
/data1/clickhouse/user_files/ </user_files_path>
<!--用来存储创建的用户和角色--><access_control_path>/data1/clickhouse/access/</access_control_path><!--包含输入格式文件--><format_schema_path>/data1/clickhouse/format_schemas/<format_schema_path><!-- 远程服务器,分布式表引擎和集群表功能使用的集群的配置 -->
<remote_servers incl="clickhouse_remote_servers" />
    <distributed_ddl>
      <!-- 在ZooKeeper中与DDL查询队列的路径 -->
      <path>/clickhouse/task_queue/ddl</path>
    </distributed_ddl>

    <!-- zk启动 -->
    <zookeeper incl="zookeeper-servers" optional="true" />
    <!-- 启动macros,并指定地址 -->
    <macros incl="macros" optional="true" />
     <!--引入metrika.xml-->
 <include_from>/etc/clickhouse-server/config.d/metrika.xml</include_from></clickhouse>

配置metrika.xml

在 /etc/clickhouse-server/config.d/ 下面vim 一个metrika.xml ,然后复制粘贴下面的配置。配置文件的 metrika.xml更改的点,确保3台机器都要改动,并且改动的参数一致。

<?xml version="1.0"?>
<clickhouse>
<!--新版的clickhouse集群的首个标签必须是clickhouse,而不是yandex --><!-- 集群配置 -->
<clickhouse_remote_servers>
   <!-- 集群名称,确保和config.xml中的<remote_servers incl="clickhouse_remote_servers" />
的incl的中的参数一致-->
   <perftest_3shards_1replicas>
       <shard>
           <!-- 建议一个台机器一个节点,避免资源争夺 -->
           <!-- 表示是否只将数据写入其中一个副本,默认为false,表示写入所有副本,在复制表的情况下可能会导致重复和不一致,所以这里一定要改为true。-->
           <internal_replication>true</internal_replication>
           <!-- 副本配置,ch没有主备之分 -->
           <replica>
               <host>BD-P-GP01</host>
               <port>9000</port>
               <user>default</user>
               <password>root</password>
           </replica>
       </shard>
       <shard>
           <internal_replication>true</internal_replication>
           <replica>
               <host>BD-P-GP02</host>
               <port>9000</port>
               <user>default</user>
               <password>root</password>
           </replica>
       </shard>
        <shard>
           <internal_replication>true</internal_replication>
           <replica>
               <host>BD-P-GP03</host>
               <port>9000</port>
               <user>default</user>
               <password>root</password>
           </replica>
       </shard>
   </perftest_3shards_1replicas>
</clickhouse_remote_servers>

<!-- 本节点副本名称replica,配置后能方便后续创建复制表时不用指定zk路径,每台机器的配置不一样,确保和每台机器的host名称一致 -->
<macros>
   <shard>01</shard>    <replica>BD-P-GP01</replica>
</macros>

<!-- ZK配置  -->
<zookeeper-servers>
 <node index="1">
   <host>zk1</host>
   <port>2181</port>
 </node>
 <node index="2">
   <host>zk2</host>
   <port>2181</port>
 </node>
 <node index="3">
   <host>zk3</host>
   <port>2181</port>
 </node>
</zookeeper-servers>

<!-- 数据压缩算法配置  -->
<clickhouse_compression>
<case>
 <min_part_size>10000000000</min_part_size>
 <min_part_size_ratio>0.01</min_part_size_ratio>
 <method>lz4</method>
</case>
</clickhouse_compression>
</clickhouse>

配置 user.xml

use.xml此处不做改动。使用ACL语句创建用户和授权,此处应该在机器成功启动后再去创建用户 每个节点都要执行:

create database if not exists tutorial;
CREATE ROLE dba;

GRANT all  ON *.* TO dba;
CREATE USER dba_u@'%' IDENTIFIED WITH sha256_password BY '密码';
GRANT dba TO dba_u; 
GRANT all  ON tutorial.* TO 'dba_u';

启动并验证

启动,使用root用户

systemctl start clickhouse-server

查看状态

systemctl status clickhouse-server

66.webp

看到success 证明启动成功!


客户端连接

使用ClickHouse的客户端

-m 代表可以输入多行

clickhouse-client --password 'root' -m 

然后进入到 ClickHouse 的客户端,使用 sql 语句,查看系统表

select * from system.clusters;

77.webp

在查看系统表中能够查看到 perftest_3shards_1replicas 这个集群名称,证明安装成功。



使用DBeaver ,我们是生产环境没有网络,需要自己手动添加 jar 包,下图中的所有 jar,能够连接外网的,这个问题不要考虑。

88.webp

99.webp

00.webp




复制表和分布式表测试

创建复制表:

CREATE TABLE default.perftest31r_local ON CLUSTER perftest_3shards_1replicas
(
    `id` Int32,
    `website` String,
    `wechat` String,
    `FlightDate` Date,
    `Year` UInt16
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/perftest31r_local''{replica}', FlightDate, (Year, FlightDate), 8192)

创建分布式表(在BD-P-GP01实例上):

CREATE TABLE perftest31r_allAS cluster32r_local ENGINE = Distributed(perftest_3shards_1replicas
, default, cluster32r_local, rand());

插入数据:

INSERT INTO default.perftest31r_all(id,website,wechat,FlightDate,Year)values(1,'https://noah.com/','理财师','2022-11-28',2020);
INSERT INTO default.perftest31r_all(id,website,wechat,FlightDate,Year)values(2,'http://www.baidu.con/','java','2021-11-28',2020);
INSERT INTO default.perftest31r_all(id,website,wechat,FlightDate,Year)values(3,'http://www.xxxxx.cn/','xxxxx','2022-11-28',2020);

查看分布式表和本地表:

select count(*) from default.perftest31r_all; ---3
select count(*) from default.cluster32r_local; ---1 这个数据不固定


总结

以上就是LS同学上周搭建CK集群的经历总结,如果大家在实际搭建过程中遇到问题,可以文末留言或加我微信交流。



文章来源:微信公众号【志明】

实战篇丨ClickHouse初体验之集群搭建指南(上)

大家好,今天给大家分享LS同学根据亲身经历整理的一篇关于搭建ClickHouse集群的文章。该篇文章主要讲述ClickHouse之3节点3分片1副本的集群...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息