搭建模式规划

一共四台。分别为hostname rhel071,rhel072,rhel075,rhel076 模式为

rhel072 分片1 副本1
rhel075 分片1 副本2
rhel076 分片2 副本1
rhel079 分片2 副本2

1.首先四台机器分别要安装好单机版的clickhouse

2.四个分别修改配置文件/etc/metrika.xml

1).默认改文件再/etc/下也可以自行修改,密码这里由于是测试环境没进行加密,CH也有提供加密的方式

<?xml version="1.0" encoding="utf-8"?>

<yandex>
  <clickhouse_remote_servers>
    <mycluster>
      <shard>
        <!-- 其他副本从这个副本进行复制同步,而不是同时插入,false无法保证数据一致性 -->
        <internal_replication>true</internal_replication>
        <replica>
          <host>rhel072</host>
          <port>9954</port>
          <user>user_richdm</user>
          <password>richdm</password>
        </replica>
        <replica>
          <host>rhel075</host>
          <port>9954</port>
          <user>user_richdm</user>
          <password>richdm</password>
        </replica>
      </shard>
      <shard>
        <internal_replication>true</internal_replication>
        <replica>
          <host>rhel076</host>
          <port>9954</port>
          <user>user_richdm</user>
          <password>richdm</password>
        </replica>
        <replica>
          <host>rhel079</host>
          <port>9954</port>
          <user>user_richdm</user>
          <password>richdm</password>
        </replica>
      </shard>
    </mycluster>
  </clickhouse_remote_servers>
  <zookeeper-servers>
    <node index="1">
      <host>rhel072</host>
      <port>2181</port>
    </node>
  </zookeeper-servers>
<!-- 这里每个对应节点只放开一个 -->
  <macros>
    <layer>01</layer>
    <shard>01</shard>
    <replica>rhel072</replica>
  </macros>
 <!--
<macros>
    <layer>01</layer>
    <shard>01</shard>
    <replica>rhel075</replica>
</macros>
<macros>
    <layer>01</layer>
    <shard>02</shard>
    <replica>rhel076</replica>
</macros>

<macros>
    <layer>01</layer>
    <shard>02</shard>
    <replica>rhel079</replica>
</macros>
-->
</yandex>

 2)添加以下几行(旧版本好像不用,我用新版本如果不添加四个机器都是独立模式不能组成集群)

 <remote_servers incl="clickhouse_remote_servers" />
 <zookeeper incl="zookeeper-servers" optional="true" />
 <macros incl="macros" optional="true" />
 <compression incl="clickhouse_compression" optional="true" />

  

 

 3)重启CH服务

重启服务
systemctl restart clickhouse-server.service
查看服务状态
systemctl status clickhouse-server.service

4)利用客户端连接进入命令行(端口,密码,用户名都可以自己进行配置,默认9000太容易冲突了python我们环境就用了9000)

 clickhouse-client -h rhel075

5)制作测试表

1. 在所有节点执行如下语句:
创建本地复制表:
CREATE TABLE table_local on cluster mycluster
(EventDate DateTime,
CounterID UInt32,
UserID UInt32
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/table_local', '{replica}')
PARTITION BY toYYYYMM(EventDate)
ORDER BY (CounterID, EventDate, intHash32(UserID))
SAMPLE BY intHash32(UserID);

##('/clickhouse/tables/{layer}-{shard}/table_local', '{replica}') CH本地复制表插入时候会写入ZK数据,该路径为创建表时候ZK的存储数据路径。百万数据大概会往ZK写入十几条。

​创建分布式表:
CREATE TABLE table_distributed as table_local ENGINE = Distributed(mycluster, default, table_local, rand());

 

1.本地复制表为把数据分别存在两个分片上。

2.存在副本的分片,副本节点宕机不会影响到数据的完整性

3.需要到哪个节点查询全部数据就在该节点创建分布式表,进行可以对全部本地复制表数据进行查询