zoukankan      html  css  js  c++  java
  • Clickhouse 3分片2副本

    三条服务器,每台服务器安装两个clickhouse实例

    一、服务器规划

    单机两个clickhouse实例安装,参考Clickhouse 单机双实例

    zookeeper集群安装,参考: Zookeeper 集群搭建--单机伪分布式集群

    我这里用的是三台服务器,分别为第一台sever1 118.xx.xx.101,第二台 server2  49.xx.xx.125, 第三台server3 110.xx.xx.67

    二、配置

    1、集群配置 config.xml

    <remote_servers>
    <perftest_3shards_2replicas>
        <shard>
    	<internal_replication>true</internal_replication>
    	<replica>
    	    <host>server1</host>
    	    <port>9000</port>
    	    <user>larrylin2</user>
    	    <password>123456</password>
    	</replica>
    	<replica>
    	    <host>server2</host>
    	    <port>9001</port>
    	    <user>larrylin2</user>
    	    <password>123456</password>
    	</replica>
        </shard>
        <shard>
    	 <internal_replication>true</internal_replication>
    	<replica>
    	    <host>server2</host>
    	    <port>9000</port>
    	    <user>larrylin2</user>
    	    <password>123456</password>
    	</replica>
    	 <replica>
    	    <host>server3</host>
    	    <port>9001</port>
    	    <user>larrylin2</user>
    	    <password>123456</password>
    	</replica>
        </shard>
        <shard>
    	 <internal_replication>true</internal_replication>
    	<replica>
    	    <host>server3</host>
    	    <port>9000</port>
    	    <user>larrylin2</user>
    	    <password>123456</password>
    	</replica>
    	<replica>
    	    <host>server1</host>
    	    <port>9001</port>
    	   <user>larrylin2</user>
    	    <password>123456</password>
    	</replica>
        </shard>
    </perftest_3shards_2replicas>
    </remote_servers>
    

      

    2、zk集群配置 config.xml

    <zookeeper>
    <node>
        <host>server1</host>
        <port>2181</port>
    </node>
    <node>
        <host>server2</host>
        <port>2181</port>
    </node>
    <node>
        <host>server3</host>
        <port>2181</port>
    </node>
    </zookeeper>
    

      

    3、副本配置 config.xml

    <macros>
              <layer>01</layer>
    	  <shard>01</shard>
    	   <replica>01-01-1</replica>
        </macros> 

    另外5个实例的副本配置分别为

    <macros>
              <layer>01</layer>
            <shard>01</shard>
             <replica>01-01-2</replica>
        </macros> 
    <macros>
              <layer>01</layer>
             <shard>02</shard>
             <replica>01-02-1</replica>
        </macros> 
    <macros>
              <layer>01</layer>
             <shard>02</shard>
             <replica>01-02-2</replica>
    </macros> 
    
    <macros>
              <layer>01</layer>
             <shard>03</shard>
            <replica>01-03-1</replica>
        </macros> 
    <macros>
              <layer>01</layer>
             <shard>03</shard>
             <replica>01-03-2</replica>
    </macros> 
    

      

    4、用户配置  users.xml

      <users>   
         <larrylin2>
                <password>123456</password>
                <networks incl="networks" replace="replace">
                    <ip>0.0.0.0</ip>
                </networks>
                <profile>default</profile>
                <quota>default</quota>
            </larrylin2>
        </users>
    

      

    三、创建本地表

    CREATE TABLE IF NOT EXISTS default.test_local ON CLUSTER 'perftest_3shards_2replicas' (
            ts_date Date,
            ts_date_time DateTime,
            user_id Int64,
            event_type String,
            site_id Int64,
            groupon_id Int64,
            category_id Int64,
            merchandise_id Int64,
            search_text String
    )
        ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/default/test_local','{replica}')
            PARTITION BY ts_date
            ORDER BY (ts_date,toStartOfHour(ts_date_time),site_id,event_type)
            SETTINGS index_granularity = 8192;

    ON CLUSTER 表示分布式DDL, 一次执行所有实例上创建同样的本地表。

    perftest_3shards_2replicas为集群名称

    {shard} 分片标识符

    {replica} 副本标识符,来自config.xml 中的macros

    ReplicatedMergeTree引擎接收两个参数:

    1、ZK中该表相关数据的存储路径,Clickhouse官方建议格式 /clickhouse/tables/{shard}/[database_name]/[table_name]

    2、副本名称,一般用{replica}

    四、ZK路径的znode结构和内容

     metadata的value值

    metadata format version: 1
    date column: 
    sampling expression: 
    index granularity: 8192
    mode: 0
    sign column: 
    primary key: ts_date, toStartOfHour(ts_date_time), site_id, event_type
    data format version: 1
    partition key: ts_date
    granularity bytes: 10485760
    

     colums的value值 

    columns format version: 1
    9 columns:
    `ts_date` Date
    `ts_date_time` DateTime
    `user_id` Int64
    `event_type` String
    `site_id` Int64
    `groupon_id` Int64
    `category_id` Int64
    `merchandise_id` Int64
    `search_text` String 

     

    ReplicatedMergeTree引擎在ZK中存储了大量的数据,包括表结构信息,元数据、操作日志、副本状态、数据块校验值、数据part merge过程中的选主信息等。

    ZK在复制表机制下有元数据存储、日志框架、分布式协调器服务三种角色,任务很重,所以要保证ZK集群的可用性以及资源(尤其是硬盘资源)。

    五、创建分布式表

    CREATE TABLE IF NOT EXISTS default.test_all ON CLUSTER 'perftest_3shards_2replicas'
    AS default.test_local
    ENGINE = Distributed(perftest_3shards_2replicas, default, test_local,rand());

     Distributed引擎需要以下几个参数

    1) 集群标识符

    2)本地表所在的数据库名称

    3) 本地表名称

    4)分片键sharding key(可选)

     该键与config.xml 中配置的分片权重(weight) 一同决定写入分布式表时的路由。它可以时表中的一列原始数据(如site_id),也可以是函数调用的结果,如上面的SQL语句采用了随机值rand()。 注意该键要尽量保证数据均匀分布,另外一个常用的操作是采用区分度较高的列的哈希值,如intHash64(user_id).

     直接写分布式表的优点自然是可以让clickhouse控制数据到分片的路由,

    缺点:

    数据是先写到一个分布式表的实例中缓存起来,再逐渐分发到各个分片上去,实际是双写了数据(写入放大),浪费资源。

    数据写入默认是异步的,短时间内可能造成不一致。

    目标表中会产生较多的小parts,使merge(即compaction)过程压力增大。

    相对而言,直接写本地表是同步操作,更快,parts的大小也比较合适,但是要求应用层额外实现路由逻辑,如轮询或者随机等。

    六、验证

     在第一台9000中增加数据

    insert into test_local (ts_date, ts_date_time, user_id, event_type, site_id,
                            groupon_id, category_id, merchandise_id,
                            search_text)
    values ('2021-11-11','2021-11-11 10:00:00',5,'stand',1,1,1,1,'world');
    

     

    可以看到数据已经添加select * from test_local where user_id= 5; 

    查询分布式表

    在另外一台查看本地表 select * from test_local where user_id= 5;

     说明数据已经复制到副本了。

    参考: https://www.jianshu.com/p/ab811cceb856

    
    

    作者:Work Hard Work Smart
    出处:http://www.cnblogs.com/linlf03/
    欢迎任何形式的转载,未经作者同意,请保留此段声明!

  • 相关阅读:
    CF 142B Tprimes
    CF 231A Team
    poj 2001 Shortest Prefixes ——字典树入门
    hdu 1039 Easier Done Than Said?
    poj 2528 Mayor's posters
    hdu 1061 Rightmost Digit
    poj 2503 Babelfish
    CF271 A. Beautiful Year
    poj 2752
    CF271 B. Prime Matrix
  • 原文地址:https://www.cnblogs.com/linlf03/p/15392198.html
Copyright © 2011-2022 走看看