ClickHou之数据复制

更新时间:2023-07-13 19:38:12 阅读: 评论:0

ClickHou之数据复制
headache怎么读ClickHou在集群中的数据分布是⾮常灵活的,例如可以将不同的拓扑结合在⼀个集群中,使⽤共享配置等管理多个逻辑集群。
分布式拓扑由两个主要属性定义,这两个主要属性对接两个主要的集群特征:可伸缩性和可靠性。
可伸缩性由数据分⽚或分段(shard/gment)保证。
可靠性是由数据复制(replication)保证。
纳尼亚传奇1>新东方英语教师培训数据分⽚和复制是完全独⽴的。ClickHou天然⽀持分⽚,⽽复制严重依赖于Zookeeper,⽤于通知副本rver状态变更。elecom
ClickHou可以在没有复制的情况下运⾏,但是即使现在没⽤到复制,提前配置好也是有意义的。
原因有⼆:
1.即使现在不使⽤复制,之后也有可能需要复制。
2.对复制表的插⼊由Zookeeper确认,跟踪最后100个插⼊块的校验和,以避免重复,如果检查到之前已
经插⼊过同样的数据则会悄悄丢弃这部分的插⼊。
高考政治答题技巧分布式表(Distributed tables):
分布式表⽤于使⽤⼀张表访问位于不同服务器的表(数据分⽚)。分布式表由“分布式”引擎定义,实际上是分⽚表上的接⼝或视图。你可以简单的理解为
它就是⼀个视图,并不存储数据,会从各个不同的shard中汇总数据。
这⾥的“集群”(cluster)指的是在ClickHou配置⽂件中的集群拓扑定义,它定义了数据如何在不同节点间分布。
shard table必须存在并且在每个节点具有相同的结构。可以同时在⼀个系统中定义不同的拓扑结构,例如:
(gmented):每个集群节点都存储数据的⼀部分。
(gmented mirrored):两个(或更多)集群中的节点组成分⽚,每个数据段存储在分⽚的所有节点处。
(cross gmented):每个节点存储两个或更多的分⽚,每个分⽚存储在两个或更多的节点上。
(single rver):数据位于单个服务器上,但可以通过分布式接⼝从每个节点访问。
我们来看两个节点上不同拓扑的两个简单例⼦。
例⼦
举个例⼦,假定你有6个nodes:
replcated:
1=2=3=4=5=6
every shard has the same copy of the table. Works for small tables
gmented:
1,2,3,4,5,6 (all different)
gmented_mirrored:
1=4,2=5,3=6 (or in a different order)
集群配置可以即时更新。所以如果新的节点被添加到分布式表中,不需要重新启动服务器。
在⼀个ClickHou系统内部,可以使⽤不同的集群,例如⼀些表可以归类到没有复制的shard,另外⼀些归类到存在复制的shard等。另外,可以在“⼦集群”存储⼀些数据,但是可以通过全局分布表访问它们。
可以把分布式表视为⼀个接⼝。建议进⾏客户端分段,并将数据插⼊到ClickHou节点上的本地分⽚表中。但是也可以直接插⼊到分布式表中。在这种情况下,ClickHou在分⽚键上使⽤散列函数分配数据。
所以如果有⼀个单节点表需要被扩展到多个服务器,过程如下:
1.在新服务器上创建分⽚表
2.必要时重新分配数据(⼿动更好,尽管ClickHou也⽀持重新分⽚)
onn
3.定义群集配置并将其放置在每个ClickHou节点上
4.创建⼀个分布式表来访问来⾃多个分⽚的数据
5.群集扩展更容易,因为它只需要在配置⽂件中添加新的服务器配置就可以了。
复制表:
复制表⽤于在不同的服务器上存储数据的多个副本。如上所述,复制依赖Zookeeper集群可⽤。Zookeper由配置⽂件中的部分引⽤:
它可以是⼀个或多个节点部分,每个主机可以解析为⼀个或多个IP。
为了创建复制表,应该使⽤Replicated *系列的表引擎。基本的语法如下:ENGINE = ReplicatedMergeTree('', '{replica}',, (sort columns), 8192)
不同的Zookeeper路径允许⽀持不同的复制拓扑。由于很难为每个节点的每个表创建⼀个⾃定义路径,因此ClickHou提供了宏替代机制。宏在每个节点的配置⽂件中定义(为此⽬的有⼀个单独的⽂件是合理的,例如/etc/clickhou-rver/conf.l),并在⼤括号中引⽤。国民教育毕业生
对于复制表宏,在两个地⽅有⽤到:
1.Zookeeper中表的znode的路径
麦当劳菜单2.副本名称具有相同ZooKeeper路径的表将是特定数据分⽚的副本。插⼊操作不限定任何副本,ClickHou接管复制以确保所有副本处于⼀致状态。⼀致性不强制插⼊,复制是异步的。
可以使⽤不同的Zookeper路径模拟不同的复制拓扑。例如,宏配置⽂件可能如下所⽰:
在这个例⼦中定义了3个宏:
{cluster} - ClickHou集群的昵称,⽤于区分不同集群之间的数据。
{分⽚} - 分⽚号或符号引⽤
{副本} - 副本的名称通常是主机名
来看⼀些设置复制表的例⼦:
不可变维度(单个节点上保存完整副本)
ENGINE = ReplicatedMergeTree('/clickhou/{cluster}/tables/', '{replica}',, (sort columns), 8192)
可变维度(单个节点上保存完整副本)
derrickENGINE = ReplicatedReplacingMergeTree('/clickhou/{cluster}/tables/', '{replica}',, (sort columns), 8192)
与前⾯的例⼦唯⼀不同的是'Replacing'替换掉'MergeTree',允许⽤主键替换数据。
分⽚表(每个节点都有⼀个数据⼦集)
ENGINE = ReplicatedMergeTree('/clickhou/{cluster}/tables//{shard}', '{replica}',, (sort columns), 8192)
正如你所看到的,设置复制需要⾸先创建带副本的表。所以建⽴系统时先考虑它是有意义的。配置完
成后,可以在配置级别上执⾏增加或替换副本,增加复制因⼦等维护操作。
Plus:
四种复制模式:
⾮复制表,internal_replication=fal。插⼊到分布式表中的数据被插⼊到两个本地表中,如果在插⼊期间没有问题,则两个本地表上的数据保持同步。我们称之为“穷⼈的复制”,因为复制在⽹络出现问题的情况下容易发⽣分歧,没有⼀个简单的⽅法来确定哪⼀个是正确的复制。
复制表,internal_replication=true。插⼊到分布式表中的数据仅插⼊到其中⼀个本地表中,但通过复制机制传输到另⼀个主机上的表中。因此两个本地表上的数据保持同步。这是推荐的配置。
⾮复制表,internal_replication=true。数据只被插⼊到⼀个本地表中,但没有任何机制可以将它转移到另⼀个表中。因此,在不同主机上的本地表看到了不同的数据,查询分布式表时会出现⾮预期的数据。显然,这是配置ClickHou集群的⼀种不正确的⽅法。
复制表,internal_replication=fal。数据被插⼊到两个本地表中,但同时复制表的机制保证重复数据会被删除。数据会从插⼊的第⼀个节点复制到其它的节点。其它节点拿到数据后如果发现数据重复,数据会被丢弃。这种情况下,虽然复制保持同步,没有错误发⽣。但由于不断的重复复制流,会导致
写⼊性能明显的下降。所以这种配置实际应该是避免的,应该使⽤配置2。
FAQ:
1.distributed表依赖Zookeeper吗?
中级口译成绩查询ClickHou的复制依赖Zookeeper。⾮复制的distributed表不要Zookeeper。所以其实可以创建⼀个distributed表,既不需要复制,也不需要依赖Zookeeper。

本文发布于:2023-07-13 19:38:12,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/1094818.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:复制   数据   节点   配置   分布式   副本   集群   定义
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图