clickhouse集群安装

2023-11-02

环境介绍
准备四台服务器搭建clickhouse集群,(创建两个分片,每个分片一个副本)
在任意三台服务器上安装zookeeper 服务,clickhouse集群依赖zookeeper进行服务器之间的数据同步。

192.168.1.1 ch1.test.com ch1
192.168.1.2 ch2.test.com ch2
192.168.1.3 ch3.test.com ch3
192.168.1.4 ch4.test.com ch4

目录结构设计
1、配置文件的默认目录为/etc/clickhouse-server/
2、数据库数据目录设置为/data/clickhouse/
3、数据库日志的目录设置为/data/clickhouse/

#zookeeper 集群的安装

1、安装zookeeper 集群

1、安装jdk
https://www.oracle.com/java/technologies/downloads/
wget https://dlcdn.apache.org/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz

2、优化jdk
3、安装zookeeper
4、使用systemctl 管理zookeeper服务
[Unit]
Description=Zookeeper service
After=network.target

[Service]
Type=simple
User=root
Group=root
ExecStart=/usr/local/zookeeper363/bin/zkServer.sh start
ExecStop=/usr/local/zookeeper363/bin/zkServer.sh stop
Restart=on-failure

[Install]
WantedBy=multi-user.target

下载最新的稳定版
https://packages.clickhouse.com/rpm/stable

wget https://packages.clickhouse.com/rpm/stable/clickhouse-client-21.8.13.6-2.noarch.rpm
wget https://packages.clickhouse.com/rpm/stable/clickhouse-common-static-21.8.13.6-2.x86_64.rpm
wget https://packages.clickhouse.com/rpm/stable/clickhouse-common-static-dbg-21.8.13.6-2.x86_64.rpm
wget https://packages.clickhouse.com/rpm/stable/clickhouse-server-21.8.13.6-2.noarch.rpm

安装clickhouse

yum localinstall *.prm
或则
rpm -ivh *.rpm

关闭防火墙并检查环境依赖

关闭防火墙
systemctl stop firewalld.service
关闭开机启动防火墙
systemctl disable firewalld.service

设置主机名

hostnamectl --static set-hostname ch1.test.com
验证主机名设置是否生效
hostname -f
ch1.test.com

最后需要配置hosts 文件,配置后的效果如下:
#cat /etc/hosts
192.168.1.1 ch1.test.com ch1
192.168.1.2 ch2.test.com ch2
192.168.1.3 ch3.test.com ch3
192.168.1.4 ch4.test.com ch4

修改配置文件 文件句柄数量

vim /etc/security/limits.d/clickhouse.conf 文件句柄数量的配置

clickhouse soft nofile 262144
clickhouse hard nofile 262144

改配置也可以通过config.xml 的max_open_files参数指定。

设置计划任务 用于恢复因异常原因中断的clickhouse 服务进程,其默认的配置如下

more /etc/cron.d/clickhouse-server
#*/10 * * * * root ((which service > /dev/null 2>&1 && (service clickhouse-server condstart ||:)) || /etc/init.d/clickhouse-server condstart) > /dev/null
2>&1

设置目录权限

chown -R clikchouse.clickhouse /data/clickhouse

修改配置文件xml格式(关键参数说明)

主配置文件config.xml
用户级别的配置文件user.xml

文件注释

说明: 用户及请求相关的设置需要配置在user.xml文件中,如果配置在config.xml,用户相关的配置如果配置到config.xml文件中,服务就无法启动。

NOTE: User and query level settings are set up in “users.xml” file.
If you have accidentally specified user-level settings here, server won’t start.
You can either move the settings to the right place inside “users.xml” file
or add <skip_check_for_incorrect_settings>1</skip_check_for_incorrect_settings> here

日志设置
在这里插入图片描述
端口说明:

  • HTTP:8123端口:使用ODBC、JDBC(DataGrip、Dbeaver) 等驱动和一些web接口如embedded UI 、grafana、redash等都需要链接http 8123端口。

  • TCP 9000 : clickhouse的原生工具需要链接9000端口。
    ClickHouse -client和其他本地ClickHouse工具(ClickHouse -benchmark, ClickHouse - copy);
    clickhouse-server与其他clickhouse-server进行分布式查询处理;
    ClickHouse驱动程序和应用程序支持本机协议
    (该协议也被非正式地称为“TCP协议”);

  • TCP 9004 : clickhouse 使用此端口把自己伪装成mysql;

  • TCP 9005 : clickhouse 使用此端口把自己伪装成postgresSQL;

  • https 8443 : 支持使用https

  • <listen_host>::</listen_host> – 监听本机上的所有ipv6 地址
    <listen_host>0.0.0.0</listen_host> – 监听本机上的所有ipv4地址

    监听指定的ip
    <listen_host>127.0.0.1</listen_host>
    <listen_host>10.205.110.37</listen_host>

    并发量比较大时,需要优化此参数,等待链接的数量。
    <listen_backlog>128</listen_backlog>
    最大链接数量
    <max_connections>4096</max_connections>

** http 1.1 保持链接时间**
<keep_alive_timeout>3</keep_alive_timeout>

最大并发链接数
<max_concurrent_queries>400</max_concurrent_queries>

内存设置
<max_server_memory_usage>0</max_server_memory_usage>
如果此次设置为0,可用内存的大小由参数"max_server_memory_usage_to_ram_ratio" * 可用物理内存的大小。
Default is “max_server_memory_usage_to_ram_ratio” of available physical RAM.
If the value is larger than “max_server_memory_usage_to_ram_ratio” of available physical RAM, it will be cut down。如果使用的内存量大于可用内存时,clickhouse-server服务进程就会杀掉。

<max_thread_pool_size>10000</max_thread_pool_size>
最大线程池的大小。

设置最大使用可用物理内存的比例:
<max_server_memory_usage_to_ram_ratio>0.7</max_server_memory_usage_to_ram_ratio>

设置数据存放目录
/export/clickhouse/

设置临时数据目录
<tmp_path>/export/clickhouse/tmp/</tmp_path>

由’file’引擎表函数可访问的用户提供文件的目录。

<user_files_path>/var/lib/clickhouse/user_files/</user_files_path>

<remote_servers>

集群的名字test_shard_localhost

    <test_shard_localhost>  
        <shard>
            <!-- Optional. Whether to write data to just one of the replicas. Default: false (write data to all replicas). -->
            **可选的。是否只向一个副本写入数据。默认值:false(写入所有副本)。**
            <internal_replication>true</internal_replication> -->
            <!-- **数据写入改分片的权重** -->
            <!-- <weight>1</weight> -->
            <replica>
                <host>localhost</host>
                <port>9000</port>
                <!-- Optional. Priority of the replica for load_balancing. Default: 1 (less value has more priority)可选的。load_balancing副本的优先级。缺省值:1(值越小优先级越高). -->
                <!-- <priority>1</priority> -->
            </replica>
        </shard>
    </test_shard_localhost>
    <test_cluster_two_shards_localhost>
         <shard>
             <replica>
                 <host>localhost</host>
                 <port>9000</port>
             </replica>
         </shard>
         <shard>
             <replica>
                 <host>localhost</host>
                 <port>9000</port>
             </replica>
         </shard>
    </test_cluster_two_shards_localhost>
    <test_cluster_two_shards>
        <shard>
            <replica>
                <host>127.0.0.1</host>
                <port>9000</port>
            </replica>
        </shard>
        <shard>
            <replica>
                <host>127.0.0.2</host>
                <port>9000</port>
            </replica>
        </shard>
    </test_cluster_two_shards>
    <test_cluster_two_shards_internal_replication>
        <shard>
            <internal_replication>true</internal_replication>
            <replica>
                <host>127.0.0.1</host>
                <port>9000</port>
            </replica>
        </shard>
        <shard>
            <internal_replication>true</internal_replication>
            <replica>
                <host>127.0.0.2</host>
                <port>9000</port>
            </replica>
        </shard>
    </test_cluster_two_shards_internal_replication>
    
    <open_service_cluster>
        <shard>
            <internal_replication>true</internal_replication>
            <replica>
                <host>ch1.test.com</host>
                <port>9000</port>
            </replica>

            <replica>
                <host>ch2.test.com</host>
                <port>9000</port>
            </replica>
        </shard>
        <shard>
            <internal_replication>true</internal_replication>
            <replica>
                <host>ch3.test.com</host>
                <port>9000</port>
            </replica>
            <replica>
                <host>ch4.test.com</host>
                <port>9000</port>
            </replica>
        </shard>
    </haigeek_open_service_cluster>
</remote_servers>

zookeeper设置

<zookeeper>
    <node>
        <host>ch1.test.com</host>
        <port>2181</port>
    </node>
    <node>
        <host>ch1.test.com</host>
        <port>2181</port>
    </node>
    <node>
        <host>ch1.test.com</host>
        <port>2181</port>
    </node>
</zookeeper>

给服务器设置一个集群内的喂一次标识
第一台服务器

<macros>
    <shard>01</shard>
    <replica>app-01-1</replica>
</macros>

第二台服务器

 <macros>
    <shard>01</shard>
    <replica>app-01-2</replica>
</macros>

第三台服务器

<macros>
    <shard>02</shard>
    <replica>app-02-1</replica>
</macros>

第四台服务器

 <macros>
    <shard>02</shard>
    <replica>replica-02-2</replica>
</macros>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

clickhouse集群安装 的相关文章

  • 如何通过ssh获取远程命令的退出代码

    我正在通过 ssh 从远程计算机运行脚本 ssh some cmd my script 现在 我想在本地计算机上存储 shell 脚本的退出状态 我该怎么做 假设没有任何问题ssh其本身 其退出状态是在远程主机上执行的最后一个命令的退出状态
  • 选择fasta文件中氨基酸超过300个且“C”出现至少4次的序列

    我有一个包含蛋白质序列的 fasta 文件 我想选择超过 300 个氨基酸且半胱氨酸 C 氨基酸出现超过 4 次的序列 我使用此命令来选择具有超过 300 个 aa 的序列 cat 72hDOWN fasta fasta bioawk c
  • Vagrant 遇到问题 - “404 - 未找到”

    我正在尝试使用 Vagrant 制作一个 LAMP 盒子 有人告诉我它使用起来非常简单 我对网络和虚拟机完全陌生 对 Linux Ubuntu 的经验也很少 我目前已尝试按照官方文档页面上的教程进行操作 http docs vagrantu
  • 使用 systemctl 获取 systemd 进程的正常运行时间或停机时间?

    喜欢使用systemctl is active
  • 为什么 OS X 和 Linux 之间的 UTF-8 文本排序顺序不同?

    我有一个包含 UTF 8 编码文本行的文本文件 mac os x cat unsorted txt foo foo 津 如果它有助于重现问题 这里是文件中确切字节的校验和和转储 以及如何自己生成文件 在 Linux 上 使用base64 d
  • Ruby:在 Ubuntu 上安装 rmagick

    我正在尝试在 Ubuntu 10 04 上安装 RMagick 看起来here https stackoverflow com questions 1482823 is there an easy way to install rmagic
  • 为 Linux 编译 Objective-C 应用程序(API 覆盖范围)

    我可能在这里问一些奇怪的问题 但我不确定从哪里开始 问题是我正在考虑使用 Obj C 和 Foundation 类在 Mac 上编写一个命令行工具 但存在一个非常大的风险 那就是我希望能够为不同的 Linux 发行版编译它 以便将来作为服务
  • Ubuntu Python shebang 线不工作

    无法让 shebang 线在 Ubuntu 中为 python 脚本工作 我每次只收到命令未找到错误 test py usr bin env python print Ran which python usr bin python 在 sh
  • Python 3.4.3 subprocess.Popen 在没有管道的情况下获取命令的输出?

    我试图将命令的输出分配给变量 而不让命令认为它正在通过管道传输 原因是 如果正在通过管道传输 则相关命令会给出未格式化的文本作为输出 但如果从终端运行 则会给出颜色格式化的文本 我需要获取这种颜色格式的文本 到目前为止我已经尝试了一些事情
  • 为什么 fork 炸弹没有使 android 崩溃?

    这是最简单的叉子炸弹 我在许多 Linux 发行版上执行了它 但它们都崩溃了 但是当我在 android 终端中执行此操作时 即使授予后也没有效果超级用户权限 有什么解释为什么它没有使 Android 系统崩溃吗 一句话 ulimit Li
  • 如何才能将 TCP 连接返回到同一端口?

    机器是 RHEL 5 3 内核 2 6 18 有时我在 netstat 中注意到我的应用程序有连接 建立了 TCP 连接本地地址 and 国外地址是一样的 其他人也报告了同样的问题 症状与链接中描述的相同 客户端连接到本地运行的服务器的端口
  • vmsplice() 和 TCP

    在原来的vmsplice 执行 有人建议 http lwn net Articles 181169 如果您的用户态缓冲区是管道中可容纳的最大页面数的 2 倍 则缓冲区后半部分成功的 vmsplice 将保证内核使用缓冲区的前半部分完成 但事
  • 批量删除文件名中包含 BASH 中特殊字符的子字符串

    我的目录中有一个文件列表 opencv calib3d so2410 so opencv contrib so2410 so opencv core so2410 so opencv features2d so2410 so opencv
  • 执行命令而不将其保留在历史记录中[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在进行软件开发时 经常需要在命令行命令中包含机密信息 典型示例是将项目部署到服务器的凭据设置为环境变量 当我不想将某些命令存储在命令历史记
  • SSH,运行进程然后忽略输出

    我有一个命令可以使用 SSH 并在 SSH 后运行脚本 该脚本运行一个二进制文件 脚本完成后 我可以输入任意键 本地终端将恢复到正常状态 但是 由于该进程仍在我通过 SSH 连接的计算机中运行 因此任何时候它都会登录到stdout我在本地终
  • 适用于 Linux 的轻量级 IDE [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • linux下无法创建僵尸进程

    嗯 我有一个奇怪的问题 我无法在我的项目中创建僵尸进程 但我可以在其他文件中创建僵尸进程 有简单的说明 int main if fork 0 printf Some instructions n else sleep 10 wait 0 r
  • Google BQ:运行参数化查询,其中参数变量是 BQ 表目标

    我正在尝试从 Linux 命令行为 BQ 表目标运行 SQL 此 SQL 脚本将用于多个日期 客户端和 BQ 表目标 因此这需要在我的 BQ API 命令行调用中使用参数 标志 parameter 现在 我已经点击此链接来了解参数化查询 h
  • 如何为 Linux 桌面条目文件指定带有相对路径的图标?

    对于我的一个 Linux 应用程序 我有应用程序二进制文件 一个 launcher sh 脚本 针对 LD LIBRARY PATH 和一个 desktop 文件 所有这些都位于同一文件夹中 我想使用图标的相对路径而不是绝对路径 我试过了
  • 通过 Visual Studio 2017 使用远程调试时 Linux 控制台输出在哪里?

    我的Visual Studio 2017 VS2017 成功连接Linux系统 代码如下 include

随机推荐

  • Spring Boot学习之旅:(四)springboot 整合 fastjson

    springboot 默认使用的 jackson 但是听说某宝的fastjson 性能很好 而且平时用的习惯 所以来整合一下 首先在pom 中导入依赖
  • QT登陆注册界面练习

    一 界面展示 二 主要功能界面代码 include widget h include ui widget h Widget Widget QWidget parent QMainWindow parent ui new Ui Widget
  • 【Shell牛客刷题系列】SHELL13 去掉所有包含this的句子:awk与gawk命令的进阶使用

    该系列是基于牛客Shell题库 针对具体题目进行查漏补缺 学习相应的命令 刷题链接 牛客题霸 Shell篇 该系列文章都放到专栏下 专栏链接为 专栏 Linux 欢迎关注专栏 本文知识预告 首先学习了用于模式扫描和处理语言的gawk命令 然
  • Django 静态文件

    静态文件 1 什么是静态文件 对于前端已经写好了的文件 我们只是拿过来使用 那么这些文件都可以称之为叫 静态文件 静态文件可以是 bootstrap一类的前段框架 已经写好了的图片 css js 静态文件默认全都放在static文件夹下 s
  • vue使用Monaco editor

    1 项目中使用monaco editor首先要安装 npm install monaco editor S 2 在组件中引用并使用 初始化 更改内容 销毁
  • day 7

    封装一个学生的类 定义一个学生这样类的vector容器 里面存放学生对象 至少3个 再把该容器中的对象 保存到文件中 再把这些学生从文件中读取出来 放入另一个容器中并且遍历输出该容器里的学生 include
  • windows系统中用Python调用linux系统shell脚本

    一 windows系统先安装 1 安装python3 5 2 安装paramiko pip install paramiko 3 卸载cryptography 2 5 python m pip uninstall cryptography
  • linux+rwx+权限值,linux权限管理:rwx

    权限管理简介 r w x 对文件及目录进行权限管理 从而达到文件及目录管理 1 rwx对于文件而言 r 可读 可以使用类似cat等命令查看文件内容 w 可写 可以编辑或删除此文件 x 可执行 exacutable 可以命令提示符下当作命令提
  • 华为机试题70-矩阵乘法计算量估算

    描述 矩阵乘法的运算量与矩阵乘法的顺序强相关 例如 A是一个50 10的矩阵 B是10 20的矩阵 C是20 5的矩阵 计算A B C有两种顺序 AB C 或者 A BC 前者需要计算15000次乘法 后者只需要3500次 编写程序计算不同
  • 新手必看!最简单的MySQL数据库详解

    本篇文章主要跟大家介绍的是详解MySQL数据库 对于新手来说帮助很大的 而且MySQL是最流行的关系型数据库管理系统 在web应用方面 MySQL也是最好的RDBMS应用软件之一 因此 感兴趣的朋友记得要看完 是什么数据库 数据库 Date
  • 微信商户平台结算周期T+1是什么意思

    我们在商户平台的管理后台 有的时候 用户支付了 可是却没有看到有资金信息 这个一般是因为您的账户类似的T 1的原因 那结算周期T 1是什么意思呢 通俗的理解就是 交易日的次日 T就是today 今天的意思 的第一个字母的大写 T 1 T 2
  • C语言中的static的用法(超级详细)

    作者 云小逸 个人主页 云小逸的主页 码云 云小逸 YunXiaoYi003 motto 要敢于一个人默默的面对自己 强大自己才是核心 不要等到什么都没有了 才下定决心去做 种一颗树 最好的时间是十年前 其次就是现在 学会自己和解 与过去和
  • yii2 ajax增删改查,Yii2 中常用的增删改查操作总结

    一 新增 1 使用save model newUser model gt name test model gt phone 13000000000 model gt email 123456 qq com model gt save 2 使
  • c语言24点核心算法,24点游戏的核心算法时.doc

    24点游戏的核心算法时 24点游戏的核心算法 时间 2010 10 15 15 10 点击 873 次 24 点游戏 就是在给定的几个数字之间加入数学运算符号 使最终结果等于 24 如下图所示 算法的思路是 1 考虑没有括号的情况 运算符为
  • 「面试」拿到B站的意向书

    此次B站服务端开发面试之旅可谓惊险 不过通过对大部分面试题套路的掌握 不出意外还是拿下了 下面我们来看看这些骚题是不是常见的不能再常见的了 这些面试题看了就能面上 当然不是 只是通过这些题让自己知道所欠缺的是什么 以及可以去看看哪些资料 1
  • React 从零开始学习(二)—— JSX

    接上一篇 搭建的项目基本结构如下 上面可以看到 React 应用程序是由 组件 组成的 一个组件是 UI 用户界面 的一部分 有自己的逻辑和外观 组件可以小到一个按钮 也可以大到整个页面 JSX React 组件是返回标签的 JavaScr
  • MySQL 用户管理

    目录 用户管理 用户 用户信息 创建用户 删除用户 修改用户密码 数据库的权限 给用户 注意 如果发现赋权限后 没有生效 执行如下指令 回收权限 用户管理 如果我们只能使用 root 用户 这样存在安全隐患 这时 就需要使用 MySQL 的
  • 【正点原子STM32连载】 第三十章 PVD电压监控实验 摘自【正点原子】APM32F407最小系统板使用指南

    1 实验平台 正点原子stm32f103战舰开发板V4 2 平台购买地址 https detail tmall com item htm id 609294757420 3 全套实验源码 手册 视频下载地址 http www openedv
  • [951]numpy.concatenate()函数

    numpy concatenate 官方文档 numpy concatenate a1 a2 axis 0 out None 将具有相同结构的array序列结合成一个array axis是拼接方向 0为横轴 1为纵轴 axis 0 拼接方向
  • clickhouse集群安装

    环境介绍 准备四台服务器搭建clickhouse集群 创建两个分片 每个分片一个副本 在任意三台服务器上安装zookeeper 服务 clickhouse集群依赖zookeeper进行服务器之间的数据同步 192 168 1 1 ch1 t