ClickHouse Replication - 简书


本站和网页 https://www.jianshu.com/p/0f58ea5c27be 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

ClickHouse Replication - 简书登录注册写文章首页下载APP会员IT技术ClickHouse Replication白奕新关注赞赏支持ClickHouse Replication0、一个重要参数:internal_replication
internal_replication:是否只写入所有replica中的一台。
true:代表了只写入shard内的一台,与ZooKeeper配合进行复制;
false:代表了写入shard内所有的replica,与分布式表配合进行复制。
1、依赖ZooKeeper进行复制
SQL
CREATE TABLE table_name
EventDate DateTime,
CounterID UInt32,
UserID UInt32
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/table_name', '{replica}')
PARTITION BY EventDate
ORDER BY (CounterID, EventDate, intHash32(UserID)
SETTINGS index_granularity = 8192;
item
(1)/clickhouse/tables/{layer}-{shard}/table_name:代表的是这张表在zk上的路径,如果要配置复制则需要配置相同的路径。即配置在相同shard里面的不同replica的机器需要配置相同的路径,不同shard的路径不同。
(2){replica}:分片的名称,可以理解是机器名,即需要每台机器都不同
(3)集群的配置,{layer}{shard}{replica}配置在配置文件的中
<?xml version="1.0"?>
<yandex>
<remote_servers>
<common>
<shard>
<weight>1</weight>
<internal_replication>true</internal_replication>
<replica>
<host>CH-IP1</host>
<port>53090</port>
</replica>
<replica>
<host>CH-IP2</host>
<port>53090</port>
</replica>
</shard>
<shard>
<weight>1</weight>
<internal_replication>true</internal_replication>
<replica>
<host>CH-IP3</host>
<port>53090</port>
</replica>
<replica>
<host>CH-IP4</host>
<port>53090</port>
</replica>
</shard>
</common>
</remote_servers>
<zookeeper>
<node index="1">
<host>IP1</host>
<port>50000</port>
</node>
<node index="2">
<host>IP2</host>
<port>50000</port>
</node>
<node index="3">
<host>IP3</host>
<port>50000</port>
</node>
</zookeeper>
<macros replace="replace">
<shard>p1</shard>
<replica>CH-IP1</replica>
</macros>
</yandex>
(4)ZooKeeper version:3.4.5 or later
(5)internal_replication配置为true
(6)使用ZooKeeper以及复制不会影响SELECT的性能
(7)数据会被发送到写入的那台服务器,再异步同步到其他Replica上。如果replica在当时不可用,会等到可用的时候再写入。
2、写分布式表进行复制
区别于使用ZooKeeper进行复制,写分布式表进行复制类似于ClickHouse帮你进行多张复制表的多写
(1)local表只需要配置为MergeTree即可,不需要配置为复制表
(2)配置<internal_replication>false</internal_replication>
(3)写分布式表
3、两种复制方式的比较
image.png
使用写分布式表的缺点:
(1)使用写分布式表进行复制,则可能出现多写一边成功一边失败的情况,数据的一致性不可控
(2)在一台服务器宕机一阵子以后,再恢复过来则这个时间段里面的数据不能自动恢复从另外的replica恢复过来。
4、其他
在删表以后,ch会把zk上最后那个znode删掉。即我们的zk path是“/clickhouse/tables/xxx/yyy/ddd”,则会把ddd节点删掉,保留/clickhouse/tables/xxx/yyy
在同个shard的replica1上删除replicated表,在replica2上的表不会被删除。
在replica1上删除/增加column,在replica2上的表会随着变动。
在replica1上修改sorting key,replica2上的表也会变动。
一次Batch写入的过程和Zookeeper交互的次数不下10次。
节点commit临时part以后,生成同步日志到zk超时会怎么办?CH依旧会commit,但是会把这个part放入检查队列中,检查是否可以注册到zk上。没有实在不行再移除这个part。
新写入的Data Part只有同步到全部副本节点后才可以参与merge。
每个节点上都有清理线程,清理zk上过期数据。
数据的merge是由主节点(zk上leader_election对应的replica)来决定的,发布merge策略到zk上,副节点再根据这个merge策略进行merge。
推荐阅读更多精彩内容ClickHouse之数据复制ClickHouse在集群中的数据分布是非常灵活的,例如可以将不同的拓扑结合在一个集群中,使用共享配置等管理多个逻...金科_阅读 14,721评论 1赞 6Clickhouse集群应用、分片、复制简介 通常生产环境我们会用集群代替单机,主要是解决两个问题: 效率 稳定 如何提升效率?一个大大大任务,让一个人干...user0650阅读 26,854评论 35赞 71深入解读HBase2.0新功能之高可用读Region Replica摘要:基于时间线一致的高可用读(Timeline-consistent High Available Reads)...猫耳呀阅读 528评论 0赞 8Clickhouse-copier简介Clickhouse-copier 是一个将数据从某个clickhouse环境迁至另一个clickhouse环境的...金科_阅读 5,676评论 6赞 4昨天一早去天津,两点半才到家感觉全程周围的人都活的好动情。 换到票后我和吴元虎在10号门前面等(吹)着(风),三五票贩子在我们附近忙活招揽生意...徐一棉阅读 453评论 0赞 2👀✨Wendy的感恩日记053感恩今天早上老公给侄女取完语文练习册回来接我和多多去奶奶家,最近雾霾太严重,很贴心 感恩今天老妈给我们做的美味佳肴...Wendy老师阅读 96评论 0赞 0【看图写故事】分别后,记得爱我在学校门口,我们拿着在江边拍下的照片,相视一笑,在那里我们说了太多太多,爱情,家庭,包括我们自己。然后你往东,我往...瑾瑶521阅读 209评论 4赞 4使用js向网页中写入html内容前言 js可以向网页中写入html内容,方法是调用write方法向document的节点中写入html元素以下展示...稻草人_b788阅读 4,645评论 0赞 1评论0赞赞1赞赞赏更多好文