clickhouse 副本与分片

副本


1、目的

保障数据的高可用性,即某一 clickhouse 节点宕机,也可以从其他服务器获取相同的数据(副本之间数据相同)。

2、特点
  • 副本的实现依赖于 Zookeeper
  • 副本之间等级相同,互为副本,不存在主从副本。
3、流程

写入:

  1. 向某一副本的表写入数据
  2. 往zookeeper提交写入日志
  3. 其他副本收到写入日志
  4. 其他副本开始从目标副本下载新数据

读取:读取数据过程,会优先选择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来同步)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ClickHouse 中进行分片副本的配置可以通过以下步骤实现: 1. 首先需要在 ClickHouse 集群中创建一个 ZooKeeper 集群。可以使用 Apache ZooKeeper 来实现。需要确保 ZooKeeper 在集群中的所有节点上都已经安装并正在运行。 2. 然后需要在 ClickHouse 集群中创建一个分布式表。可以使用以下命令来创建一个名为 my_table 的表: ``` CREATE TABLE my_table ( key UInt32, value String ) ENGINE = Distributed('my_cluster', default, my_table', rand()); ``` 其中,my_cluster 是 ClickHouse 集群中的名称,default 是默认分片键,rand() 是随机分片函数。 3. 接下来需要在 ClickHouse 集群中创建分片。可以使用以下命令来创建三个分片: ``` CREATE TABLE my_table_1 ( key UInt32, value String ) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/my_table', '{replica}') PARTITION BY key ORDER BY key SETTINGS index_granularity = 8192; CREATE TABLE my_table_2 ( key UInt32, value String ) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/my_table', '{replica}') PARTITION BY key ORDER BY key SETTINGS index_granularity = 8192; CREATE TABLE my_table_3 ( key UInt32, value String ) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/my_table', '{replica}') PARTITION BY key ORDER BY key SETTINGS index_granularity = 8192; ``` 其中,/clickhouse/tables 是 ClickHouse 集群中的默认表路径,{shard} 是分片的名称,{replica} 是副本的名称。 4. 最后需要在每个分片中创建三个副本。可以使用以下命令来创建三个副本: ``` ALTER TABLE my_table_1 ADD REPLICA 'node1:9000'; ALTER TABLE my_table_1 ADD REPLICA 'node2:9000'; ALTER TABLE my_table_1 ADD REPLICA 'node3:9000'; ALTER TABLE my_table_2 ADD REPLICA 'node2:9000'; ALTER TABLE my_table_2 ADD REPLICA 'node3:9000'; ALTER TABLE my_table_2 ADD REPLICA 'node1:9000'; ALTER TABLE my_table_3 ADD REPLICA 'node3:9000'; ALTER TABLE my_table_3 ADD REPLICA 'node1:9000'; ALTER TABLE my_table_3 ADD REPLICA 'node2:9000'; ``` 其中,node1、node2、node3 是 ClickHouse 集群中的节点名称,9000 是节点的端口号。 完成以上步骤后,ClickHouse 集群将会具有三个分片和每个分片的三个副本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值