快速入门——ClickHouse——集群部署 

你们亲爱的小六六 2022-03-02 14:51:34

ClickHouse集群是一个同质集群。 设置步骤:

  1. 在群集的所有机器上安装ClickHouse服务端
  2. 在配置文件中设置集群配置
  3. 在每个实例上创建本地表
  4. 创建一个分布式表

分布式表实际上是一种view,映射到ClickHouse集群的本地表。 从分布式表中执行SELECT查询会使用集群所有分片的资源。 您可以为多个集群指定configs,并创建多个分布式表,为不同的集群提供视图。

具有三个分片,每个分片一个副本的集群的示例配置:

Copy<remote_servers>
    <perftest_3shards_1replicas>
        <shard>
            <replica>
                <host>example-perftest01j.yandex.ru</host>
                <port>9000</port>
            </replica>
        </shard>
        <shard>
            <replica>
                <host>example-perftest02j.yandex.ru</host>
                <port>9000</port>
            </replica>
        </shard>
        <shard>
            <replica>
                <host>example-perftest03j.yandex.ru</host>
                <port>9000</port>
            </replica>
        </shard>
    </perftest_3shards_1replicas>
</remote_servers>

为了进一步演示,让我们使用和创建hits_v1表相同的CREATE TABLE语句创建一个新的本地表,但表名不同:

CopyCREATE TABLE tutorial.hits_local (...) ENGINE = MergeTree() ...

创建提供集群本地表视图的分布式表:

CopyCREATE TABLE tutorial.hits_all AS tutorial.hits_local
ENGINE = Distributed(perftest_3shards_1replicas, tutorial, hits_local, rand());

常见的做法是在集群的所有计算机上创建类似的分布式表。 它允许在群集的任何计算机上运行分布式查询。 还有一个替代选项可以使用以下方法为给定的SELECT查询创建临时分布式表远程表功能。

让我们运行INSERT SELECT将该表传播到多个服务器。

CopyINSERT INTO tutorial.hits_all SELECT * FROM tutorial.hits_v1;

注意:

这种方法不适合大型表的分片。 有一个单独的工具 clickhouse-copier 这可以重新分片任意大表。

正如您所期望的那样,如果计算量大的查询使用3台服务器而不是一个,则运行速度快N倍。

在这种情况下,我们使用了具有3个分片的集群,每个分片都包含一个副本。

为了在生产环境中提供弹性,我们建议每个分片应包含分布在多个可用区或数据中心(或至少机架)之间的2-3个副本。 请注意,ClickHouse支持无限数量的副本。

包含三个副本的一个分片集群的示例配置:

Copy<remote_servers>
    ...
    <perftest_1shards_3replicas>
        <shard>
            <replica>
                <host>example-perftest01j.yandex.ru</host>
                <port>9000</port>
             </replica>
             <replica>
                <host>example-perftest02j.yandex.ru</host>
                <port>9000</port>
             </replica>
             <replica>
                <host>example-perftest03j.yandex.ru</host>
                <port>9000</port>
             </replica>
        </shard>
    </perftest_1shards_3replicas>
</remote_servers>

启用本机复制Zookeeper是必需的。 ClickHouse负责所有副本的数据一致性,并在失败后自动运行恢复过程。建议将ZooKeeper集群部署在单独的服务器上(其中没有其他进程,包括运行的ClickHouse)。

注意

ZooKeeper不是一个严格的要求:在某些简单的情况下,您可以通过将数据写入应用程序代码中的所有副本来复制数据。 这种方法是建议的,在这种情况下,ClickHouse将无法保证所有副本上的数据一致性。 因此需要由您的应用来保证这一点。

ZooKeeper位置在配置文件中指定:

Copy<zookeeper>
    <node>
        <host>zoo01.yandex.ru</host>
        <port>2181</port>
    </node>
    <node>
        <host>zoo02.yandex.ru</host>
        <port>2181</port>
    </node>
    <node>
        <host>zoo03.yandex.ru</host>
        <port>2181</port>
    </node>
</zookeeper>

此外,我们需要设置宏来识别每个用于创建表的分片和副本:

Copy<macros>
    <shard>01</shard>
    <replica>01</replica>
</macros>

如果在创建复制表时没有副本,则会实例化新的第一个副本。 如果已有实时副本,则新副本将克隆现有副本中的数据。 您可以选择首先创建所有复制的表,然后向其中插入数据。 另一种选择是创建一些副本,并在数据插入之后或期间添加其他副本。

CopyCREATE TABLE tutorial.hits_replica (...)
ENGINE = ReplcatedMergeTree(
    '/clickhouse_perftest/tables/{shard}/hits',
    '{replica}'
)
...

在这里,我们使用ReplicatedMergeTree表引擎。 在参数中,我们指定包含分片和副本标识符的ZooKeeper路径。

CopyINSERT INTO tutorial.hits_replica SELECT * FROM tutorial.hits_local;

复制在多主机模式下运行。数据可以加载到任何副本中,然后系统自动将其与其他实例同步。复制是异步的,因此在给定时刻,并非所有副本都可能包含最近插入的数据。至少应该有一个副本允许数据摄入。另一些则会在重新激活后同步数据并修复一致性。请注意,这种方法允许最近插入的数据丢失的可能性很低。

...全文
1468 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

111

社区成员

发帖
与我相关
我的任务
社区描述
ClickHouse开发者
其他 企业社区
社区管理员
  • csdnsqst0018
  • IT学习日记
  • karina17
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

社区宗旨:意在给学习Clickhouse数据库的朋友提供一个氛围轻松、友好的交流平台,欢迎社区小伙伴们积极讨论。

 

欢迎大家加入到Clickhouse社区大家庭,为了对大家积极的参与感谢,现在准备以下一些奖品【20个CSDN定制帆布包和2个咖啡杯】,满足以下2个条件即有机会领取:

  • 1、加入Clickhouse社区,成为社区成员
  • 2、在社区中发布2个及以上的帖子
  • 帖子条件如下(示例地址:):
    • 推荐文章:需要是至少5篇的推荐内容,内容地址可以放超链接

    • 推荐书籍:需要大致介绍书籍重点内容,或者放书籍目录

    • 推荐视频:需要大致介绍视频重点内容

奖励评选规则:

  • 参与时间:2022年3月1号 ~ 2022年3月8号
  • CSDN定制帆布包【前20位】先到、先满足上面的条件可得(每人一个,机不可失)
  • 咖啡杯则需要根据大家的帖子内容质量,在【加精】帖子中抽奖得出(概率很大哦)

额外奖励:

  • 如果有小伙伴能够介绍给周围的小伙伴,并成功邀请他们加入社区,每拉取2个人奖励现金5元(赚个早餐钱简单)
  • 免费赠送Clickhouse学习电子书籍(即:Clickhouse教程-中文版、ClickHouse万亿数据双中心的设计与实践 )

 

奖励领取方式:

  • 添加博主微信:yyuuyy1235(备注:clickhouse社区)

试试用AI创作助手写篇文章吧