ClickHouse03-小白如何快速搭建ClickHouse集群

普通测试通常使用ClickHouse单节点就可以了,但是生产环境不免需要考虑多活、负载等高可用问题,集群就成了基础需求

ClickHouse在集群的选择上,作者已知的有两种: 使用ZooKeeper作为节点协调的组件,使用ClickHouse-Keeper作为节点协调的组件:

  1. 在ZooKeeper中存储集群的元数据信息,如表结构、分片配置以及集群节点状态等,通过ZooKeeper,ClickHouse能够实现在分布式环境下的元数据管理和节点间通信的协调。ZooKeeper的部署和使用也是大家比较熟悉的了。
  2. 基于已知的ZooKeeper在部分场景下响应不佳的前提下,ClickHouse Keeper基于Raft一致性算法开发的一款专门为ClickHouse设计的分布式一致性解决方案,旨在替代ZooKeeper作为ClickHouse集群的元数据存储与管理工具。它提供了高可用性和强一致性保证,简化了ClickHouse集群的部署和维护,并且针对ClickHouse的工作负载进行了优化。这个组件的部署还分为独立集群和嵌入式的。

两种选择均可。

  • ZooKeeper方式搭建CK集群
    • 手动部署
      • 手动部署ZK
      • 手动部署CK
    • docker-compose部署
  • ClickHouse-Keeper方式搭建CK集群
    • ClickHouse-Keeper嵌入式
    • ClickHouse-Keeper独立集群
      • 手动部署模式
      • 容器化部署模式
      • Keeper自身服务监控

在这里插入图片描述

ZooKeeper方式搭建CK集群

手动部署

手动部署ZK

使用官方指导快速部署一个单节点

正常单节点部署流程:

  1. 根据自身环境,下载一个安装包
  2. 解压安装包,并进入根目录
  3. 修改conf/zoo.cfg配置文件
tickTime=2000               #描述票据的时间,用来处理心跳或者session过期,毫秒
dataDir=/var/lib/zookeeper  #本地用于存储内存数据快照的目录
clientPort=2181             #通信端口
  1. 启动服务 bin/zkServer.sh start
  2. 查看日志,确认启动成功

集群模式需要至少3个服务节点,2个服务节点本质上是不如单节点稳定,并不推荐
多节点集群的部署流程:

  1. 在每个服务节点,下载安装包,如单节点
  2. 在每个服务节点,解压安装包,进入根目录
  3. 在每个服务节点,进行配置修改 conf/zoo.cfg
tickTime=2000               #描述票据的时间,用来处理心跳或者session过期,毫秒
dataDir=/var/lib/zookeeper  #本地用于存储内存数据快照的目录
clientPort=2181             #通信端口
initLimit=5                 #表示新节点必须连接到leader的时间限制 initLimit*tickTime=最终毫秒数
syncLimit=2                 #表示服务节点要leader间过期的时限 syncLimit*tickTime=最终毫秒数
server.1=zoo1:2888:3888     #服务节点1
server.2=zoo2:2888:3888     #服务节点2
server.3=zoo3:2888:3888     #服务节点3

如果3个服务节点位于一个服务器上,也就是端口无法相同,那么请区分开,比如 2888:3888, 2889:3889, 2890:3890
4. 分别启动那个服务,查看日志

手动部署CK

在多个服务器上分别部署ClickHouse,下载和基础安装步骤均可参考官方说明

单个服务节点都需要:

  1. 根据自身环境,下载安装包
  2. 解压安装服务节点
  3. 修改配置文件 /etc/clickhouse-server/config.xml(默认文件),如果你想调整文件的位置和名称,启动服务时需指定 clickhouse-server --config-file=/etc/clickhouse-server/config.xml
  4. 增加 metrika.xml 配置ZK的地址,修改config.xml 引入metrika的配置,此外需要根据自身情况定义好分片和副本的数量。

关于什么是分片?
通过定义Distributed表引擎或使用Replicated表引擎结合MergeTree系列引擎可以实现分片功能。分片有助于水平扩展数据存储能力,并且可以根据需要在不同的物理服务器上进行负载均衡

关于什么是副本?
通过Replicated表引擎(如ReplicatedMergeTree)可以在集群中的不同节点上创建相同结构表的副本,这样即使某个节点发生故障,其他拥有副本的节点仍然可以提供服务,从而保证了数据的高可用性

/etc/clickhouse-server/metrika.xml:

<yandex><clickhouse_remote_servers><cluster_2s_2r><shard><internal_replication>true</internal_replication><replica><host>127.0.0.1</host><port>9000</port><user>default</user><password></password></replica><replica><host>127.0.0.1</host><port>9100</port><user>default</user><password></password></replica></shard><shard><internal_replication>true</internal_replication><replica><host>127.0.0.1</host><port>9100</port><user>default</user><password></password></replica><replica><host>127.0.0.1</host><port>9000</port><user>default</user><password></password></replica></shard></cluster_2s_2r></clickhouse_remote_servers><zookeeper-servers><node index="1"><host>127.0.0.1</host><port>2181</port></node><node index="2"><host>127.0.0.1</host><port>2182</port></node><node index="3"><host>127.0.0.1</host><port>2183</port></node></zookeeper-servers><macros><layer>01</layer><shard>01</shard><!--分片的定义需要不同--><replica>cluster01-01-1</replica> <!--副本的定义需要不同--></macros><networks><ip>::/0</ip></networks><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>
</yandex>

/etc/clickhouse-server/config.xml

<clickhouse>...<!--引入配置--><include_from>/etc/clickhouse-server/metrika.xml</include_from>...
</clickhouse>
  1. 正常启动所有服务节点,systemctl start clickhouse-server(启动 clickhouse-server 新旧版有几种方式,此种为最新推荐的形式)

docker-compose部署

使用docker-compose编排部署

docker-compose.yml:

version: '3.8'
services: zoo1:image: zookeeper:latestcontainer_name: zoo1environment:- ZOO_MY_ID=1- ZOO_SERVERS=server.1=zoo1:2888:3888;server.2=zoo2:2888:3888;server.3=zoo3:2888:3888ports:- "2181:2181"volumes:- ./data/zoo1/data:/data- ./data/zoo1/datalog:/datalognetworks:- ckclusterzoo2:image: zookeeper:latestcontainer_name: zoo2environment:- ZOO_MY_ID=2- ZOO_SERVERS=server.1=zoo1:2888:3888;server.2=zoo2:2888:3888;server.3=zoo3:2888:3888ports:- "2182:2181"volumes:- ./data/zoo1/data:/data- ./data/zoo1/datalog:/datalognetworks:- ckcluster zoo3:image: zookeeper:latestcontainer_name: zoo3environment:- ZOO_MY_ID=3- ZOO_SERVERS=server.1=zoo1:2888:3888;server.2=zoo2:2888:3888;server.3=zoo3:2888:3888ports:- "2183:2181"volumes:- ./data/zoo1/data:/data- ./data/zoo1/datalog:/datalog networks:- ckcluster       cknode1:image: clickhouse/clickhouse-servercontainer_name: cknode1hostname: cknode1volumes:- ./data/clickhousenode1/data:/var/lib/clickhouse- ./data/clickhousenode1/conf/clickhouse-server/:/etc/clickhouse-server/depends_on:- zoo1- zoo2- zoo3ports:- "9000:9000"- "8123:8123"- "9009:9009"- "9363:9363"networks:- ckcluster  cknode2:image: clickhouse/clickhouse-servercontainer_name: cknode2hostname: cknode2volumes:- ./data/clickhousenode2/data:/var/lib/clickhouse- ./data/clickhousenode2/conf/clickhouse-server/:/etc/clickhouse-server/depends_on:- zoo1- zoo2- zoo3ports:- "9100:9100"- "8124:8124"- "9109:9109"- "9364:9364"    networks:- ckcluster
networks:ckcluster:external: true

在docker-compose.yml的根目录下,启动服务docker-compose up -d

查看日志 docker-compose logs -f 确认服务是否启动成功,如有问题就修复后重启

如需重启:

  • docker-compose restart 全部重启
  • docker-compose restart cknode1 仅重启cknode1服务
  • docker-compose down && docker-compose up -d 全部暂停再启动

ClickHouse-Keeper方式搭建CK集群

ClickHouse-Keeper嵌入式

嵌入式模式代表不需要额外部署和启动服务,在ClickHouse中配置启用,启动ClickHouse就可以启动嵌入式Keeper

修改 /etc/clickhouse-server/config.xml

<clickhouse><logger><!-- Possible levels [1]:- none (turns off logging)- fatal- critical- error- warning- notice- information- debug- trace[1]: https://github.com/pocoproject/poco/blob/poco-1.9.4-release/Foundation/include/Poco/Logger.h#L105-L114--><level>trace</level><log>/var/log/clickhouse-keeper/clickhouse-keeper.log</log><errorlog>/var/log/clickhouse-keeper/clickhouse-keeper.err.log</errorlog><!-- Rotation policySee https://github.com/pocoproject/poco/blob/poco-1.9.4-release/Foundation/include/Poco/FileChannel.h#L54-L85--><size>500M</size><count>10</count><!-- <console>1</console> --> <!-- Default behavior is autodetection (log to console if not daemon mode and is tty) --></logger>
...<keeper_server><tcp_port>9181</tcp_port><!-- Must be unique among all keeper serves --><server_id>1</server_id><log_storage_path>/var/lib/clickhouse/coordination/logs</log_storage_path><snapshot_storage_path>/var/lib/clickhouse/coordination/snapshots</snapshot_storage_path><coordination_settings><operation_timeout_ms>10000</operation_timeout_ms><min_session_timeout_ms>10000</min_session_timeout_ms><session_timeout_ms>100000</session_timeout_ms><raft_logs_level>information</raft_logs_level><compress_logs>false</compress_logs><!-- All settings listed in https://github.com/ClickHouse/ClickHouse/blob/master/src/Coordination/CoordinationSettings.h --></coordination_settings><!-- enable sanity hostname checks for cluster configuration (e.g. if localhost is used with remote endpoints) --><hostname_checks_enabled>true</hostname_checks_enabled><raft_configuration><server><id>1</id><!-- Internal port and hostname --><hostname>localhost</hostname><port>9234</port></server><!-- Add more servers here --></raft_configuration></keeper_server>
...<zookeeper><node><host>localhost</host><port>9181</port></node></zookeeper>
</clickhouse>

以上为手动部署模式,如果是 docker 或 K8S 模式,请将 host 替换为 container name.

启动直接是采用 clickhouse 的启动方式,systemctl start clickhouse-server(启动 clickhouse-server 新旧版有几种方式均可)

此外同样的部署多个服务节点,需调整 <zookeeper><macros> 下的地址配置,设置合理的分片和副本

ClickHouse-Keeper独立集群

独立集群模式,意思是独立于ClickHouse-server之外,可以有更多的灵活性,不需要与ClickHouse-server进行一一捆绑,会更像ZooKeeper集群,可以独立运作,支持单独的指标监控
官方部署说明文档参考

手动部署模式

手动部署模式下,ClickHouse-Keeper在ClickHouse-server部署完后就已经存在:

  • 配置位于 /etc/clickhouse-keeper/keeper_config.xml 就是其配置文件,内容类似于嵌入式的配置,但是需要额外放开IPV6访问和SSL配置 <listen_host>0.0.0.0</listen_host>
  • 启动可以通过 systemctl start clickhouse-keeper

这样你就开启了一个单独的ClickHouse-Keeper节点,如果要与ClickHouse-server绑定互动起来,就需要在 /etc/clickhouse-server/config.xml 中完善 <zookeeper/> 节点的配置

容器化部署模式

容器化部署模式下,选取ClickHouse-Keeper独立的镜像,对于它所需的配置文件进行挂载然后启动,需要与ClickHouse-server进行互动的话,配置同手动部署

对于ClickHouse集群,此外就是多部署几个ClickHouse服务节点,将Keeper的配置同步配置到 <zookeeper>的节点中

Keeper自身服务监控

对于独立集群运作的Keeper集群,可以独立校验它的状态和监控指标

$:echo ruok | nc localhost 9181
imok$:echo mntr | nc localhost 9181
zk_version      v24.2.1.2248-testing-891689a41506d00aa169548f5b4a8774351242c4
zk_avg_latency  0
zk_max_latency  0
zk_min_latency  0
zk_packets_received     0
zk_packets_sent 0
zk_num_alive_connections        0
zk_outstanding_requests 0
zk_server_state standalone
zk_znode_count  10
zk_watch_count  0
zk_ephemerals_count     0
zk_approximate_data_size        1570
zk_key_arena_size       0
zk_latest_snapshot_size 0
zk_open_file_descriptor_count   34
zk_max_file_descriptor_count    500000
zk_followers    0
zk_synced_followers     0$:echo stat | nc localhost 9181
ClickHouse Keeper version: v24.2.1.2248-testing-891689a41506d00aa169548f5b4a8774351242c4
Clients:[::1]:44734(recved=0,sent=0)Latency min/avg/max: 0/0/0
Received: 0
Sent: 0
Connections: 0
Outstanding: 0
Zxid: 0x5be
Mode: standalone
Node count: 10

作为这个独立的组件,也有自己的 Prometheus 端点,可供监控使用


如果喜欢我的文章的话,可以去GitHub上给一个免费的关注吗?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2906413.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

算法---动态规划练习-7(按摩师)【类似打家劫舍】

按摩师 1. 题目解析2. 讲解算法原理3. 编写代码 1. 题目解析 题目地址&#xff1a;点这里 2. 讲解算法原理 首先&#xff0c;给定一个整数数组 nums&#xff0c;其中 nums[i] 表示第 i 天的预约时间长度。 定义两个辅助数组 f 和 g&#xff0c;长度都为 n&#xff08;n 是数组…

201基于matlab的成绩管理系统

基于matlab的成绩管理系统。自带的GUI界面设计了一个成绩管理界面&#xff0c;可进行成绩的载入、查询、绘图、求平均分。可更改自己的数据进行录入。包含作业文档。程序已调通&#xff0c;可直接运行。 201 matlab 成绩管理系统 GUI - 小红书 (xiaohongshu.com)

C语言函数的定义、声明、调用与返回

在C语言中&#xff0c;函数是一种模块化和结构化的编程方式&#xff0c;用于封装特定的功能和逻辑。通过函数&#xff0c;可以将程序分解成多个小的模块&#xff0c;使得程序结构更清晰、易于理解和维护。本文将深入介绍C语言中函数的定义、声明、调用与返回&#xff0c;以帮助…

git的使用日常习惯规范与一些特殊操作

git的使用日常习惯规范与一些特殊操作 操作习惯规范创建本地新分支&#xff0c;推送新分支到云端仓库1.创建一个本地的login分支2.创建新分支后切换到新分支3.推送新分支到云端 git的特殊操作撤回commit&#xff08;取消提交到本地版本库的动作&#xff0c;本地工作区写的代码不…

基于单片机锂电池电量检测数码管显示系统设计

**单片机设计介绍&#xff0c;基于单片机锂电池电量检测数码管显示系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机锂电池电量检测数码管显示系统设计的主要目标是实时、准确地检测锂电池的电量&#xff0c;并…

uniapp中安装vant2

1.uniapp项目搭建 因为是安装vant2所以项目选择vue2&#xff0c;如果vue3项目的话安装vant3 2.安装vant npm i vantlatest-v2 3.在main.js文件引入挂载vant 说明&#xff1a;// #ifndef VUE3这里是vue2模板用来挂载注册组件的地方&#xff1b;// #ifdef VUE3这里是vue3模板…

数据结构学习——链表面试题

1. 删除链表中等于给定值 val 的所有结点。 203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09; 方法一&#xff1a; struct ListNode* removeElements(struct ListNode* head, int val) {struct ListNode* prevNULL;struct ListNode* curhead;while(cur){if(cur-&…

海外媒体发稿:3种媒体宣发套餐内容推广方法

现如今&#xff0c;伴随着信息技术的不断进步和推广&#xff0c;新闻媒体宣发变成企业品牌推广的重要手段之一。为了方便让新闻信息新闻资讯传递给目标群体&#xff0c;公司一般会选择不同的套餐内容和推广方法。下面我们就详细介绍3种新闻资讯新闻媒体宣发套餐内容推广方法。 …

C# 操作 Word 全域查找且替换(含图片对象)

目录 关于全域查找且替换 Word应用样本 SqlServer数据表部分设计样本 范例运行环境 配置Office DCOM 设计实现 组件库引入 实现原理 查找且替换的核心代码 窗格内容 页眉内容 页脚内容 形状内容 小结 关于全域查找且替换 C#全域操作 Word 查找且替换主要包括如下…

【Java】ArrayList数组的扩容机制 jdk1.8

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 ArrayList和普通数组不同&#xff0c;ArrayList支持动态扩容&#xff0c;那么ArrayList到底是如何扩容的呢&#xff1f;你又是否知道ArrayList数组的初始长度是多少呢&#xff1f; 在开始介绍之前&#xff0c;我们要先介…

【Python】如何安装Python

推荐安装python39版本 1.安装python1.1.在任意盘新建Python39目录1.2.双击安装包1.3.安装成功后&#xff0c;WINRcmd进入dos页面&#xff0c;输入 python&#xff0c;即可查看是否安装成功 2.环境变量配置2.1.打开 我的电脑-》高级系统设置-》环境变量-》系统变量2.2.如上图配置…

MHA高可用集群部署

一、MHA的概念 1.1 MHA概述 一套优秀的MySQL高可用环境下故障切换和主从复制的软件MHA的出现就是解决MySQL 单点的问题。 MySQL故障过程中&#xff0c;MHA能做到0-30秒内自动完成故障切换MHA能在故障切换的过程中最大程度上保证数据的一致性以达到真正意义上的高可用 …

​如何用“Dreamina”进行文生图​

文生图&#xff0c;顾名思义&#xff0c;就是用文字描述来生成图片。近年来&#xff0c;随着人工智能技术的进步&#xff0c;文生图技术也逐渐成熟&#xff0c;并逐渐应用于各种领域&#xff0c;例如设计、创作、娱乐等等。 本文将介绍如何使用“Dreamina”进行文生图。 步骤…

2024.3.25-26记:二叉树的遍历

二叉树的遍历深度优先遍历(DFS)递归遍历前序递归遍历&#xff1a;中序递归遍历后续递归遍历 非递归遍历前序非递归遍历中序非递归遍历后续非递归遍历 宽度优先遍历&#xff08;BFS): 二叉树的遍历 二叉树遍历大体上分为深度优先遍历&#xff08;DFS)和宽度优先遍历(BFS)&#…

Linux 常用命令(1)

&#x1f607;作者介绍&#xff1a;一个有梦想、有理想、有目标的&#xff0c;且渴望能够学有所成的追梦人。 &#x1f386;学习格言&#xff1a;不读书的人,思想就会停止。——狄德罗 ⛪️个人主页&#xff1a;进入博主主页 &#x1f5fc;专栏系列&#xff1a;Linux 随笔集合 …

必应bing国内广告推广怎么做,烧不烧钱?

必应Bing作为全球领先的搜索引擎之一&#xff0c;其国内广告平台提供了丰富而精准的广告资源&#xff0c;为众多企业带来极具性价比的品牌推广机会。然而&#xff0c;要想在必应Bing上取得理想的广告效果&#xff0c;并不一定意味着“烧钱”&#xff0c;而是需要通过科学的策略…

Spring日志框架

前言 本文我们简单说说关于Spring中的日志框架,以及对应的注解 我们知道,公司服务器在运行的时候,一定会打印日志,有很多优点,比如预防报警,或者是某重大事故尝试修复等等都需要查看日志 应该说日志对我们来说并不陌生,我们在之前刷题或者是程序遇到bug的时候也经常会将程序的状…

Databricks 开源 DBRX:一款功能强大的新型企业级语言模型

Databricks 公司发布了 DBRX&#xff0c;这是一款性能优异的大语言模型&#xff0c;在各项测试中均超越了现有的开源模型。DBRX 的目标是为企业提供高质量、可定制的 AI 工具&#xff0c;帮助企业更好地利用生成式 AI 技术。 DBRX 的一大亮点是其出色的性能。在语言理解、编程…

Redis 主从复制原理,设计的真巧妙!

前言 今天继续来看看有关 Redis 的一个问题&#xff0c;主从复制。通常&#xff0c;对于大多数的场景来说&#xff0c;读比写更多&#xff0c;于是对于缓存的水平扩展&#xff0c;其中的一个方式 “主从复制” 就是一个常见的思路。有了主从复制&#xff0c;那么可以扩展出很多…

Kibana操作Elasticsearch教程

文章目录 简介ES文档操作创建索引查看索引创建映射字段查看映射关系字段属性详解typeindexstore 字段映射设置流程 新增数据新增会随机生成id新增自定义id智能判断 修改数据删除数据查询基本查询查询所有&#xff08;match_all&#xff09;匹配查询多字段查询词条匹配多词条精确…