[SQL系列]从零开始学Clickhouse——集群篇

        在上一篇中,我们通过Docker构建了一个简单的单点Clickhouse,但是如果要做大数据的处理的话,Clickhouse集群是必不可少的,今天我们先用Docker简单地搭建一个Clickhouse集群。

容器逐个部署

        使用Docker部署ClickHouse集群涉及几个步骤,包括创建Docker网络、配置ClickHouse容器以及设置集群的各个节点。

1. 创建Docker网络

首先,需要创建一个Docker网络,以确保ClickHouse容器可以相互通信。

docker network create --subnet=172.18.0.0/16 clickhouse_network

        如果遇到了这个问题“Error response from daemon: Pool overlaps with other one on this address space”,那说明docker已经建立了对应的子网,占据了地址,我们可以改一下,比如说--subnet=172.16.0.0/16,如果此处冲突了。下一步的docker run指定的ip也需要修改。

2. 启动ClickHouse服务器

接着,启动ClickHouse服务器实例。假设我们要部署一个具有三个节点的集群。

对于每个节点,运行一个ClickHouse容器,并加入之前创建的网络:

docker run -d --name clickhouse-server-1 \
  --ip 172.18.0.2 \
  --network clickhouse_network \
  -p 8123:8123 \
  -p 9000:9000 \
  -v /path/to/configs:/var/lib/clickhouse \
  yandex/clickhouse-server

docker run -d --name clickhouse-server-2 \
  --ip 172.18.0.3 \
  --network clickhouse_network \
  yandex/clickhouse-server

docker run -d --name clickhouse-server-3 \
  --ip 172.18.0.4 \
  --network clickhouse_network \
  yandex/clickhouse-server

这里-p 8123:8123-p 9000:9000表示将容器的端口映射到宿主机,这样可以通过宿主机的端口访问ClickHouse服务。-v参数用于将宿主机的配置文件目录挂载到容器中,以自定义配置。

上面的格式是在bash下的格式,如果在Powershell,需要把斜杠去掉。 上面的容器是yandex/clickhouse-server,也可以修改成clickhouse/clickhouse-server,这个容器上一篇文章中下载过了。

3. 配置ClickHouse集群

每个ClickHouse节点都需要在其配置文件config.xml中设置集群配置。你需要编辑每个节点的config.xml文件,添加集群配置信息。

docker exec -it clickhouse-server-1 bash
cd /etc/clickhouse-server

//下载vim
apt-get update
apt-get install vim

vim config.xml
//按照下面的内容修改,修改完后
//先按Esc,:wq回车就保存好了

以下是示例配置:

<clickhouse>
  <!-- Other configurations... -->
  <remote_servers>
    <cluster_1>
      <shard>
        <internal_replication>true</internal_replication>
        <replica>
          <host>clickhouse-server-1</host>
          <port>9000</port>
        </replica>
      </shard>
      <shard>
        <internal_replication>true</internal_replication>
        <replica>
          <host>clickhouse-server-2</host>
          <port>9000</port>
        </replica>
      </shard>
      <shard>
        <internal_replication>true</internal_replication>
        <replica>
          <host>clickhouse-server-3</host>
          <port>9000</port>
        </replica>
      </shard>
    </cluster_1>
  </remote_servers>
  <!-- Other configurations... -->
</clickhouse>

确保<host>标签中的值与Docker容器名称一致。

修改结束之后,可以用exit退出当前容器,也可以ctrl+p+q退出

4. 重启ClickHouse服务器

配置完成后,需要重启所有ClickHouse服务器以使配置生效。

docker restart clickhouse-server-1 clickhouse-server-2 clickhouse-server-3

5. 验证集群

使用ClickHouse客户端连接到任意一个节点,并运行以下命令来验证集群是否配置正确:

docker exec -it clickhouse-server-1 clickhouse-client --query "SELECT * FROM system.clusters"

这个查询应该返回你配置的集群信息。

6. 删除集群

docker stop clickhouse-server-1 clickhouse-server-2 clickhouse-server-3

docker rm clickhouse-server-1 clickhouse-server-2 clickhouse-server-3

docker network rm clickhouse_network

使用Docker-compose部署

1. 编写yaml文件

使用docker-compose来搭建ClickHouse集群会更加简单和方便,因为docker-compose允许你在一个YAML文件中定义所有的服务,并且管理它们的生命周期。

version: '3'

services:
  clickhouse-server-1:
    image: yandex/clickhouse-server
    container_name: clickhouse-server-1
    networks:
      - clickhouse_network
    ports:
      - "8123:8123"
      - "9000:9000"
    volumes:
      - /path/to/configs-1:/var/lib/clickhouse

  clickhouse-server-2:
    image: yandex/clickhouse-server
    container_name: clickhouse-server-2
    networks:
      - clickhouse_network
    volumes:
      - /path/to/configs-2:/var/lib/clickhouse

  clickhouse-server-3:
    image: yandex/clickhouse-server
    container_name: clickhouse-server-3
    networks:
      - clickhouse_network
    volumes:
      - /path/to/configs-3:/var/lib/clickhouse

networks:
  clickhouse_network:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.18.0.0/16

         上面的volumns可以不带,如果不想挂载主机路径的话,上面的network里面的subnet地址也可以因为冲突修改掉。

        在这个配置文件中,我们定义了三个ClickHouse服务(clickhouse-server-1clickhouse-server-2clickhouse-server-3),它们都使用yandex/clickhouse-server镜像。每个服务都挂载了一个卷,用于存储配置文件和数据。此外,我们创建了一个名为clickhouse_network的网络,用于服务之间的通信。

2. 修改配置文件

        与直接使用Docker容器一样,你需要为每个ClickHouse节点配置集群设置。编辑每个节点的config.xml文件,添加集群配置信息。由于我们使用了卷挂载,你可以在宿主机的相应路径下编辑这些配置文件。

        如果没有使用-v进行挂载的话,还是得进入到每个容器里面进行修改。

3. 启动集群        

        配置完成后,使用以下命令启动集群:

docker-compose up -d

        这将根据docker-compose.yml文件定义启动所有服务。

4. 验证集群

使用ClickHouse客户端连接到任意一个节点,并运行以下命令来验证集群是否配置正确:

docker-compose exec clickhouse-server-1 clickhouse-client --query "SELECT * FROM system.clusters"

这个查询应该返回你配置的集群信息。

5. 删除集群

docker-compose down -v --rmi all

Go使用Clickhouse

package main

import (
	"database/sql"
	"fmt"
	"log"

	_ "github.com/ClickHouse/clickhouse-go"
)

func main() {
	// 连接到ClickHouse单点
	connectToSingleNode()
	// 连接到ClickHouse集群
	connectToCluster()
}

func connectToSingleNode() {
	conn, err := sql.Open("clickhouse", "tcp://localhost:9000?debug=true")
	if err != nil {
		log.Fatal(err)
	}
	defer conn.Close()

	var version string
	if err := conn.QueryRow("SELECT version()").Scan(&version); err != nil {
		log.Fatal(err)
	}
	fmt.Printf("Single Node Version: %s\n", version)
}

func connectToCluster() {
	conn, err := sql.Open("clickhouse", "tcp://localhost:9000,tcp://localhost:9001,tcp://localhost:9002?debug=true")
	if err != nil {
		log.Fatal(err)
	}
	defer conn.Close()

	var version string
	if err := conn.QueryRow("SELECT version()").Scan(&version); err != nil {
		log.Fatal(err)
	}
	fmt.Printf("Cluster Version: %s\n", version)
}

        上述分别定义了连接单点和连接集群的方法,主要是在连接地址的不同,其余的对于开发者而言都是透明的,包括切片的选取和副本。

  • connectToSingleNode函数连接到单个ClickHouse实例,它使用tcp://localhost:9000作为连接字符串。
  • connectToCluster函数连接到ClickHouse集群,它使用tcp://localhost:9000,tcp://localhost:9001,tcp://localhost:9002作为连接字符串,这样就可以连接到多个分片。

在ClickHouse中,当你连接到集群时,通常不需要手动选择分片。ClickHouse的查询处理器会自动处理分布式查询,根据查询语句和集群配置将查询分发到适当的分片上。你只需要连接到集群中的任何一个节点,ClickHouse就会负责将查询分发到所有相关的分片上,并合并结果。

然而,如果你想要手动控制查询在哪些分片上执行,你可以在查询中使用ON CLUSTER子句来指定集群的名称,以及使用SHARDREPLICA子句来指定特定的分片和副本。例如:

SELECT * FROM my_table ON CLUSTER my_cluster WHERE shard = 1

这个查询只会在集群my_cluster中编号为1的分片上执行。

在Go程序中,你仍然使用相同的连接字符串来连接到集群,无论你是在所有分片上执行查询还是在特定的分片上执行查询。ClickHouse的Go驱动会处理与集群的通信,并将查询发送到正确的位置。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Stable Diffusion 参数介绍及用法

大模型 CheckPoint 介绍 作用&#xff1a;定调了作图风格&#xff0c;可以理解为指挥者 安装路径&#xff1a;models/Stable-diffusion 推荐&#xff1a; AnythingV5Ink_v32Ink.safetensors cuteyukimixAdorable_midchapter2.safetensors manmaruMix_v10.safetensors counterf…

2024年的Java版本选择?java 17 安装

文章目录 2024年的Java版本选择&#xff1f;java 1.8 和 java17 什么区别&#xff1f;java 17 安装windows 11安装java 17C:\Program Files\Common Files\Oracle\Java\javapath是什么 2024年的Java版本选择&#xff1f; 3年前&#xff0c;java 1.8是市场主流&#xff08;还有一…

STM32用HAL库函数实现硬件IIC

/*出处&#xff1a;【STM32入门教程-2024】第12集 IIC通信与温湿度传感器AHT20(DHT20)_哔哩哔哩_bilibili */ AHT20驱动 这篇笔记我主要介绍代码实现&#xff0c;想要了解原理的请自己看视频&#xff0c;我不过多赘述了。 AHT20通信数据帧格式&#xff1a; ①对照手册上的通…

面对网络安全,做好风险评估对企业会带来哪些帮助

随着信息技术的飞速发展&#xff0c;网络安全问题日益凸显&#xff0c;成为企业不容忽视的重要议题。企业作为社会经济活动的主要参与者&#xff0c;其网络安全不仅关系到自身的生存与发展&#xff0c;更与国家的经济安全、社会稳定息息相关。因此&#xff0c;企业必须高度重视…

K8s: Prometheus 服务结构以及基础抓取数据服务部署

Prometheus 发布应用之后&#xff0c;就有持续运维的事情&#xff0c;就是平台监控Prometheus 是一个云原生的日志监控平台&#xff0c;是一个实时标准的一个技术它是著名的 cncf 里的一个重要的开源项目 上面整个图片是在云原生应用及K8s应用架构下的一个日志监控的一个标准的…

ezplot--Matlab学习

目录 一、代码 二、效果 ​编辑 三、ezplot讲解 四、如何自定义一个函数 一、代码 clc; clear; t0:32; x4(t) cos(2*pi*t/4).*sin(2*pi*t/4); x8(t) cos(2*pi*t/8).*sin(2*pi*t/8); x16(t) cos(2*pi*t/16).*sin(2*pi*t/16); subplot(3,1,1) ezplot(x4,[0,32]); subplot…

《软件设计师教程:数据库系统基础知识大总结》

​ 个人主页&#xff1a;李仙桎 &#x1f525; 个人专栏: 《软件设计师》 ⛺️生活的理想&#xff0c;就是为了理想的生活! ​ ⛺️前言&#xff1a;各位铁汁们好啊&#xff01;&#xff01;&#xff01;今天继续正式学习中级软件设计师考试相关的内容&#xff0c;后续不断更新…

python学习笔记B-11:序列结构之列表--二维列表的遍历和生成式

二维列表的遍历方式&#xff0c;使用双层for循环&#xff0c;遍历索引号。 二维列表的生成式&#xff0c;也是使用类似双层循环的形式生成。 print("##初始化二维列表&#xff0c;每个元素就是1个列表") lst [["东方延续","太空军自然选择号舰长&qu…

【AI心理咨询应用】继Woebot之后,国内诞生的“LLM+CBT”应用:白小喵

导言 AI认知行为疗法&#xff08;Cognitive Behavioral Therapy&#xff0c;CBT&#xff09;早在2017年便有了首例&#xff0c;即美国知名CBT治疗机器人Woebot。 然而&#xff0c;Woebot在CBT的完整落地上仍有缺陷问题&#xff0c;LLM的出现促进了对该问题的解决&#xff0c;…

typeScript 安装

1、安装typescript 安装npm i -g typescript 查看是否安装成功 tsc -v 2、使用ts // 浏览器不支持ts 需要编译成 es5 let str: string ts 在终端输入 tsc index.ts 会将其生成一个对应的index.js文件 在电脑上首次使用TS的时候&#xff0c;执行TS 的命令的时候报错 打开PowerS…

RustGUI学习(iced)之小部件(三):如何使用下拉列表pick_list?

前言 本专栏是学习Rust的GUI库iced的合集&#xff0c;将介绍iced涉及的各个小部件分别介绍&#xff0c;最后会汇总为一个总的程序。 iced是RustGUI中比较强大的一个&#xff0c;目前处于发展中&#xff08;即版本可能会改变&#xff09;&#xff0c;本专栏基于版本0.12.1. 概述…

2024年,新手做抖音小店想要赚钱,必须明白三件事!

大家好&#xff0c;我是电商糖果 有不少小店的商家都说过&#xff0c;现在的抖音小店比三四年前复杂了。 三四年前抖音小店刚刚出现&#xff0c;平台规则还没有那么多&#xff0c;很多机制也不太成熟。 那个时期的抖店说是捡钱的&#xff0c;一点儿都不假。 但是如果说你现…

Linux详解:进程等待

文章目录 进程等待等待的必要性进程等待的方法waitwaitpid获取子进程status阻塞等待 与 非阻塞等待 进程等待 等待的必要性 子进程退出&#xff0c;父进程不进行回收的话&#xff0c;就可能造成僵尸进程&#xff0c;进而造成内存泄露 如果进程进入了僵尸状态&#xff0c;kill…

机器学习:驱动现代交通运输革命的AI智慧引擎

&#x1f9d1; 作者简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

玄子Share-引导过程与服务控制

玄子Share-引导过程与服务控制 Linux操作系统引导过程 系统初始化进程 init 进程 由 Linux 内核加载运行 /sbin/init 程序init 进程是系统中第一个进程init 进程的 PID&#xff08;进程标记&#xff09;号永远为 1 Systemd Systemd是Linux操作系统的一种init软件CentOS7中采用…

【Linux开发 第十二篇】搭建JavaEE环境

搭建开发环境 搭建javaEE环境 搭建javaEE环境 在Linux下开发JavaEE需要安装软件包&#xff1a; 安装jdk 安装步骤&#xff1a; 在opt目录下创建jdk目录通过xftp上床到jdk目录中进入到jdk目录中&#xff0c;解压jdk压缩包在/usr/local下创建java目录将解压完成的jdk文件移动…

SpringBoot框架学习笔记(一):依赖管理和自动配置

本文为个人笔记&#xff0c;仅供学习参考之用&#xff0c;如有不当之处请指出。 本文基于springboot2.5.3版本&#xff0c;开发环境需要是 jdk 8 或以上&#xff0c;maven 在 3.5 1 SpringBoot 基本介绍 1.1 官方文档 &#xff08;1&#xff09; 官网 : https://spring.io/pr…

张朝阳对话华为Fellow陈海波:万物智联时代,鸿蒙如何实现“换道超车”?

随着智能终端设备的普及和万物智联时代的加速到来&#xff0c;鸿蒙生态的高速发展正引发全行业的关注。 搜狐创始人、董事局主席兼CEO、物理学博士张朝阳与华为Fellow、基础软件首席科学家陈海波带来了一场关于鸿蒙生态的公开课。鸿蒙技术架构有哪些领先性?HarmonyOS发布5年来…

compose调用系统分享功能分享图片文件

compose调用系统分享功能图片文件 简介UI界面提供给外部程序的文件访问权限创建FileProvider设置共享文件夹 通用分享工具虚拟机验证结果参考 本系列用于新人安卓基础入门学习笔记&#xff0c;有任何不同的见解欢迎留言 运行环境 jdk17 andriod 34 compose material3 简介 本案…

Hadoop3:集群搭建及常用命令与shell脚本整理(入门篇,从零开始搭建)

一、集群环境说明 1、用VMware安装3台Centos7.9虚拟机 2、虚拟机配置&#xff1a;2C&#xff0c;2G内存&#xff0c;50G存储 3、集群架构 从表格中&#xff0c;可以看出&#xff0c;Hadoop集群&#xff0c;主要有2部分&#xff0c;一个是HDFS服务&#xff0c;一个是YARN服务 …
最新文章