副本
1、目的
保障数据的高可用性,即某一 clickhouse 节点宕机,也可以从其他服务器获取相同的数据(副本之间数据相同)。
2、特点
- 副本的实现依赖于 Zookeeper。
- 副本之间等级相同,互为副本,不存在主从副本。
3、流程
写入:
- 向某一副本的表写入数据
- 往zookeeper提交写入日志
- 其他副本收到写入日志
- 其他副本开始从目标副本下载新数据
读取:读取数据过程,会优先选择errors_count小的副本(在查询过程中,如果某一副本表发生了异常,会更新errors_count),在errors_count相同值的情况下,就会出现随机、顺序、hosts名称近似等的选择方式
4、副本配置
-
本地配置副本
... <!-- 副本配置 --> <zookeeper> <!-- 节点 --> <node> <!-- 副本名称、对应端口 --> <host>test01</host> <port>9001</port> </node> </zookeeper> ...
-
加载外置文件的方式配置副本
<!-- 外部配置文件内容 --> <yandex> <zookeeper-servers> <!-- 节点 --> <node> <!-- 副本名称、对应端口 --> <host>test01</host> <port>9001</port> </node> </zookeeper-servers> </yandex>
- clickhouse配置文件增加:
<zookeeper incl="zookeeper-servers" optional="true"/> <include_from>外置文件的路径</include_from>
分片
1、目的
为了对数据横向扩容,可以通过分片把数据进行拆分,存储在不同的节点(不同节点数据不相同)。
2、简略过程
通过分片把一份完整的数据进行切割,不同的分片分布到不同的节点上,再由Distribute引擎把数据拼接起来一同使用(通过分布式逻辑表来写入、分发、路由来操作不同分片的分布式数据)
3、配置文件(一般采用外置配置文件的方式)
yandex # 根节点,固定关键字
clickhouse_remote_servers # clickhouse远程服务配置,固定关键字
cluster_name # 集群名称,可自定义
shard # 分片,可配置多个,固定关键字
internal_replication # 设置内部副本的关联方式,固定关键字
replica # 副本,可配置多个,固定关键字
host # 副本的节点名称,固定关键字
port # 副本端口,固定关键字
<yandex>
<clickhouse_remote_servers>
<cluster_one>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>test101</host>
<port>9001</port>
</replica>
</shard>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>test102</host>
<port>9001</port>
</replica>
</shard>
</cluster_one>
</clickhouse_remote_servers>
</yandex>
4、internal_replication
分布式表:a,副本一:b1,副本二:b2
-
true
指先由分布式表更新一个表,然后通过该表对其他副本表进行同步。例如:读取、写入命令经过分布式表a,会将数据更新到b1/b2表,在通过b1/b2将数据同步至b2/b1表。
-
false
指由分布式表更新所有副本表。例:读取、写入命令经过分布式表a,再一一同步b1、b2表(都从a来同步)