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://www.mzph.cn/news/779153.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

红米手机Redmi 不会自动弹出USB调试选项,如何处理?(红米小米均适用)

参考&#xff1a; 红米手机Redmi 不会自动弹出USB调试选项&#xff0c;如何处理&#xff1f;&#xff08;红米小米均适用&#xff09; - 知乎 以红米9A为例&#xff1b; 【设置】菜单进入后&#xff0c;找到【我的设备】&#xff0c; 选择【全部参数】&#xff0c; 对准miui版…

SQL96 返回顾客名称和相关订单号(表的普通联结、内联结inner join..on..)

方法一&#xff1a;普通联结 select cust_name, order_num from Customers C,Orders O where C.cust_id O.cust_id order by cust_name,order_num;方法二&#xff1a;使用内连接 select cust_name,order_num from Customers C inner join Orders O on C.cust_id O.cust_id …

测试人员如何提交一条高质量的bug

测试人员在测试软件过程中&#xff0c;发现bug是必然的&#xff0c;那么发现bug后就要提交bug到缺陷管理系统中&#xff0c;如何提交一条高质量的bug&#xff0c;是每一个测试人员值得深思的问题&#xff0c;如果bug提交的不规范&#xff0c;不准确会导致开发人员理解错误&…

Python工具箱系列(五十一)

九宫格与词云 对图片进行九宫格切割&#xff0c;并且放到微信朋友圈曾经风靡一时。对于python来说&#xff0c;这个也非常简单。 from PIL import Image import mathdef ninerectanglegrid(inputfilename):"""实现九宫格切割Args:inputfilename (string): 输入…

golang import引用项目下其他文件内函数

初始化项目 go mod init [module名字] go mod init project 项目结构 go mod 文件 代码 需要暴露给外界使用的变量/函数名必须大写 在main.go中引入&#xff0c;当前项目模块名/要引用的包名 package mainimport (// 这里的路径开头为项目go.mod中的module"project/…

DHCP设置二

华为ensp模拟实验 准备工作 需要设备&#xff1a;路由器 一台 交换机 两台 pc两台 ip划分网段 &#xff1a;192.168.10.0 24 192.168.20.0 24 当我们准备好之后就可以开机了 开机实验 点击菜单栏小三角&#xff0c;开启设备。 输入system-view进入系统视图&#x…

深度解析:Elasticsearch检索请求原理

在上一篇文章中&#xff0c;我们学习了 Elasticsearch 的写入流程&#xff0c;今天我们来学习一下 Elasticsearch 的读取流程&#xff0c;当一个检索请求到达 Elasticsearch 之后是如何进行检索的呢&#xff1f; 下面先说一下一个总的检索流程。 1、客户端发送请求到任意一个…

卓翼飞思全国合作伙伴火热招募,共筑智能生态

摘要&#xff1a;市场有可为&#xff0c;政策高扶持 抢占AI高地&#xff0c;共筑智能生态 卓翼飞思全国合作伙伴招募计划 在人工智能的浪潮下&#xff0c;我们正见证一个由数据驱动、智能主导的新时代的到来。无人智能技术作为人工智能领域的重要分支&#xff0c;正在以其独特…

Qt篇——Qt无法翻译tr()里面的字符串

最近遇到使用Qt语言家翻译功能时&#xff0c;ui界面中的中文都能够翻译成英文&#xff0c;但是tr("测试")这种动态设置给控件的中文&#xff0c;无法翻译&#xff08;lang_English.ts文件中的翻译已经正确添加了tr()字符串的翻译&#xff09;。 上网搜了很多资料&am…

Linux 常用命令(1)

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

【漏洞复现】通天星CMSV6 admin 弱口令漏洞(CVE-2024-29666)

0x01 产品简介 CMSV6平台是基于车辆位置信息服务和实时视频传输服务的创新技术和开放运营理念。为GPS运营商车辆硬件设备制造商、车队管理企业等车辆运营相关企业提供核心基础数据服务。 0x02 漏洞概述 CMSV6 7.31.0.2、7.32.0.3版本中存在弱密码漏洞&#xff0c;未授权的攻…

【Linux】图文详解Xshell远程连接服务器:以Amazon EC2 VPS为例

文章目录 问题描述解决方案Q&A 问题描述 本地cmd或powershell使用ssh -i “your.pem” user_nameip_address是可以登录Amazon EC2云服务器的。 然而&#xff0c;当使用XShell以SSH加载PEM文件方式登录亚马逊EC2云服务器&#xff0c;一直出现输入密码的问题&#xff0c;如…

小狐狸JSON-RPC:wallet_addEthereumChain(添加指定链)

wallet_addethereumchain&#xff08;添加网络&#xff09; var res await window.ethereum.request({"method": "wallet_addEthereumChain","params": [{"chainId": "0x64", // 链 ID &#xff08;必填&#xff09;"…

JavaEE 初阶篇-深入了解多线程等待与多线程状态

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 线程等待 1.1 线程等待 - join() 方法 1.1.1 main 线程中等待多个线程 1.1.2 main 线程等待 t2 线程且t2 线程等待 t1 线程 1.1.3 其他线程阻塞等待 main 线程 1.…

Webpack常见插件和模式

目录 目录 目录认识 PluginCleanWebpackPluginHtmlWebpackPlugin自定义模版 DefinePlugin的介绍 ( 持续更新 )Mode 配置 认识 Plugin Loader是用于特定的模块类型进行转换&#xff1b; Plugin可以用于执行更加广泛的任务&#xff0c;比如打包优化、资源管理、环境变量注入等 …

基于ThinkPHP+Uniapp开发的房产管理系统

一款基于ThinkPHPUniapp开发的房产管理系统&#xff0c;支持小程序、H5、APP&#xff1b;包含房客、房东、经纪人三种身份。核心功能有&#xff1a;新盘销售、房屋租赁、地图找房、房源代理、在线签约、电子合同、客户CRM跟进、经纪人收益、分享佣金等 多终端 Uniapp开发&…

系统开发实训小组作业week5 —— 用例描述与分析

目录 4.3 UC003电影浏览与查询 4.3.1 用例描述 4.3.2 活动图 4.3.3 界面元素 4.3.4 功能 4.4 UC004在线订票 4.4.1 用例描述 4.4.2 活动图 4.4.3 界面元素 4.4.4 功能 4.3 UC003电影浏览与查询 4.3.1 用例描述 用例号 UC003-01 用例名称 电影浏览与查询 用例描述…

Spring Boot 统一数据返回格式 分析 和 处理

目录 实现统一数据格式 测试 原因分析 解决方案 &#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f4d5;格言&#xff1a;吾愚多不敏&#xff0c;而愿加学欢迎大家&#x1f44d;点赞✍评论⭐收藏 实现统一数据格式 统⼀的数据返回格式使⽤ ControllerAdvice 和 Response…

基于Python微博舆情数据爬虫可视化分析系统(NLP情感分析+爬虫+机器学习)

这里写目录标题 基于Python微博舆情数据爬虫可视化分析系统(NLP情感分析爬虫机器学习)一、项目概述二、微博热词统计析三、微博文章分析四、微博评论分析五、微博舆情分析六、项目展示七、结语 基于Python微博舆情数据爬虫可视化分析系统(NLP情感分析爬虫机器学习) 一、项目概…

【C++】vector模拟实现

个人主页 &#xff1a; zxctscl 如有转载请先通知 文章目录 1. 前言2. vector源码3. 构造、赋值和析构3.1 无参构造3.2 拷贝构造3.3 迭代器区间构造3.4 赋值3.5 析构 4. Capacity4.1 size4.2 capacity4.3 empty4.4 resize4.5 reserve 5. 下标访问和迭代器6. 输出7. Modifiers7.…