惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

ike‘s blog

mac软件推荐 用Siri来控制Windows电脑开机关机吧 clickhouse的一些优化建议和工具 2023sumppary 记录一下我的第一个网页游戏Mazeball 如何使用Clickhouse的索引 如何从zookeeper切换为clickhouse—keeper cloki分布式查询和clickhouse副本存储 使用ilogtail+cloki+clickhouse来做日志系统吧 快速安装部署clickhouse和cloki 快速部署thanos架构 如何使用go的jwt 如何修改git commit记录 业务容器化需要注意的一些地方 游戏企划 Prometheus Metrics精简优化2 来在线听音乐吧 Chatgpt的API入门 简单搭建国内也可以使用的chatgpt Prometheus Metrics精简优化 Kubernetes的探针机制 本地部署chatAI【chatglm】 AI绘画工具webui简单入门 之 高清化 写在地下城邂逅Ⅳ·灾厄篇·完结之后 如何部署gitalk作为评论系统 AI绘画工具webui简单入门 之 工具安装 grafanadb迁移到mysql kubectl常用命令 开始写博客啦 隐私政策URL Markdown Example Include Video in the Posts Markdown Extended Features Simple Guides for Fuwari Golang net/http & HTTP Serve 源码分析
clickhouse集群部署指南
2023-08-11 · via ike‘s blog

起因#

网上找到的集群安装博文各个都是复制粘贴,还缺胳膊少腿MD,各种坑,自己梳理下搭建过程。

步骤#

zookeeper安装#

wget https://downloads.apache.org/zookeeper/stable/apache-zookeeper-3.6.3-bin.tar.gz   #注意要下载bin.tar.gz
tar -xvf apache-zookeeper-3.6.3-bin.tar.gz  #解压到目录
cp zoo_sample.cfg zoo.cfg                   #参考下面zoo.cfg配置
mkdir -p /data/zookeeper/{data,logs}        #创建数据目录
echo "1" > /data/zookeeper/data/myid        #注意myid里的数字一定要和cfg里的server顺序一致
./zkServer.sh start                         #启动zk

zoo.cfg配置参考

tickTime=2000
dataDir=/data/zookeeper/data
dataLogDir=/data/zookeeper/logs
clientPort=2181
admin.serverPort=2182
initLimit=10
syncLimit=5
server.1=zk1:2888:3888
server.2=zk2:2888:3888
server.3=zk3:2888:3888

clickhouse安装#

yum install -y yum-utils
yum-config-manager --add-repo https://packages.clickhouse.com/rpm/clickhouse.repo
yum install -y clickhouse-server clickhouse-client
chmod a+x /etc/clickhouse-server/*

配置#

  1. 新建一个/etc/clickhouse-server/metrika.xml文件,添加zookeeper和集群配置
<yandex>
    <clickhouse_remote_servers>
        <!--自定义集群名称-->
        <ck_cluster>
            <!--定义集群的分片数量-->
            <shard>
                <internal_replication>true</internal_replication>
                <replica>
                    <host>ck1</host>
                    <port>9000</port>
                    <user>default</user>  <!--默认是default用户-->
                    <password>xxxxxxxxx</password> <!--你在user.xml里配置的密码-->
                </replica>
            </shard>
            <shard>
                <internal_replication>true</internal_replication>
                <replica>
                    <host>ck2</host>
                    <port>9000</port>
                    <user>default</user>
                    <password>xxxxxxxxx</password>
                </replica>
            </shard>
            <shard>
                <internal_replication>true</internal_replication>
                <replica>
                    <host>ck3</host>
                    <port>9000</port>
                    <user>default</user>
                    <password>xxxxxxxxx</password>
                </replica>
            </shard>
        </ck_cluster>
    </clickhouse_remote_servers>

    <networks>
        <ip>::</ip>
    </networks>

    <macros>
        <replica>ck1</replica>  <!--此处填写各个节点名称,唯一值,不能重复-->
    </macros>

    <zookeeper-servers>
        <node index="1">    <!--index 是你部署zookeeper的时候设置的myid-->
            <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>
</yandex>
  1. 修改/etc/clickhouse-server/config.xml文件,把listen_host标签取消注释,并新增标签启用metrika的配置,如果默认有相关标签就注释掉,prometheus的标签可以用来监控集群状态。
    <listen_host>::</listen_host>
    <include_from>/etc/clickhouse-server/metrika.xml</include_from>
    <macros incl="macros" optional="true"/>
    <!-- <zookeeper incl="zookeeper-servers" optional="true" /> --># 这个是用来指定metrika里的clickhouse_remote_servers标签,如果是用clickhouse-keeper则不需要
    <remote_servers incl="clickhouse_remote_servers"/> # 这个是用来指定metrika里的clickhouse_remote_servers标签

    #辅助zookeeper,如果同步的数据量太大,一个zookeeper同步不过来,经常出现readonly表,则可以加多几个辅助zookeeper,只需要在表引擎地址前指定zookeeper名称即可,例如
    #ENGINE = ReplicatedReplacingMergeTree('zookeeper2:/clickhouse/tables/samples/{shard}', '{replica}')
    #但不能和主zookeeper一样,可以用自带的clickhouse-keeper,zookeeper用来做辅助
    <auxiliary_zookeepers> 
      <zookeeper2>
        <node>
            <host>10.0.0.1</host>
            <port>2181</port>
        </node>
        <node>
            <host>10.0.0.2</host>
            <port>2181</port>
        </node>
        <node>
            <host>10.0.0.3</host>
            <port>2181</port>
        </node>
      </zookeeper2>
    </auxiliary_zookeepers>

    <prometheus>
        <endpoint>/metrics</endpoint>
        <port>9363</port>
        <metrics>true</metrics>
        <events>true</events>
        <asynchronous_metrics>true</asynchronous_metrics>
        <status_info>true</status_info>
    </prometheus>
  1. 在config.d目录里新增keeper.xml文件:
<?xml version="1.0" ?>
<yandex>
    <keeper_server>
        <tcp_port>9181</tcp_port>
        <server_id>1</server_id> #这里也要记得不同服务器要不一样
        <log_storage_path>/data/clickhouse/coordination/log</log_storage_path>
        <snapshot_storage_path>/data/clickhouse/coordination/snapshots</snapshot_storage_path>

      <raft_configuration>
            <server>
               <id>1</id>
                 <hostname>10.0.0.1</hostname>
               <port>9444</port>
          </server>
          <server>
               <id>2</id>
                 <hostname>10.0.0.2</hostname>
               <port>9444</port>
          </server>
          <server>
               <id>3</id>
                 <hostname>10.0.0.3</hostname>
               <port>9444</port>
          </server>
      </raft_configuration>

    </keeper_server>

    <zookeeper>
        <node>
            <host>10.0.0.1</host> #不同服务器这个ip要换,尽量指定自己的zookeeper,防止都集中到单个一样的zookeeper里
            <port>9181</port>
        </node>
    </zookeeper>

    <distributed_ddl>
        <path>/clickhouse/cluster/task_queue/ddl</path>
    </distributed_ddl>
</yandex>

  1. 如果需要添加密码的话修改/etc/clickhouse-server/user.xml文件,把明文密码加到password标签中即可,或者也可以使用SHA256加密后的密码,请将其放置在 password_sha256_hex 配置段。
#shell生成加密密码的示例
  PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$PASSWORD"; echo -n "$PASSWORD" | sha256sum | tr -d '-'

最后启动clickhouse-server.service service clickhouse-server restart

启动后可以lsof -i:8123 查看端口是否有启动,service clickhouse-server status服务是否正常启动,/var/log/clickhouse-server/clickhouse-server.err.log相关日志是否都正常,没有报错。

8123是默认客户端端口,用于接收客户端的连接和处理来自客户端的查询请求。 9000是默认数据端口,用于处理 ClickHouse 数据节点之间的内部通信。

没问题后执行clickhouse-client后即可登陆clickhouse。

  1. 登陆clickhouse后select * from system.clusters\G; 看下是否节点都可以正常,在服务器里echo stat | nc 127.0.0.1 9181检查9181端口的keeper是否也正常,如果都显示正常那就搭建完毕啦!

ps: users.xml里也可以配置一些自定义的配置,具体可以参考官方文档,下面是一些我这边用到的:

        <default>
          <load_balancing>random</load_balancing> #负载均衡
          <distributed_product_mode>global</distributed_product_mode> #分布式表一定得改成global,默认好像是local,只查询自己
          <group_by_overflow_mode>throw</group_by_overflow_mode> #如果内存查爆了,直接中断查询丢出报错,默认是throw,也可以改成不报错,丢出部分查询数据
          <max_memory_usage>64000000000</max_memory_usage> #单个查询最大能使用多大内存,这里是60g左右
          <max_bytes_before_external_group_by>32000000000</max_bytes_before_external_group_by> #group_by如果聚合大于30g,则溢出到磁盘了,用io代替内存
          <max_bytes_before_external_sort>32000000000</max_bytes_before_external_sort>#order_by如果聚合大于30g,则溢出到磁盘了,用io代替内存
        </default>