clickhouse集群
设备需求
- clickhouse集群
- centos7/ubuntu
- 6台(3 shard,2 replica)
- zookeeper集群
- centos7/ubuntu
- 3台
环境安装
zookeeper集群搭建
java准备
- 下载jdk,并配置环境变量
zookeeper准备
- 下载zookeeper
- 配置zookeeper
- 建立zookeeper数据路径,实验所使用的配置路径是 /data/apache/zookeeper/zkdata/
- 在数据路径下,创建myid文件,并写入本机的zookeeper id,比如实验所以用的三台设备的id分别为1、2、3,在三台设备的myid中分别写入1、2、3,然后在配置文件中对应即可
- 修改配置文件
- $ZOOKEEPER_HOME/zoo.cfg
server.${设备1的myid}=${设备1的IP}:2888:3888 server.${设备2的myid}=${设备2的IP}:2888:3888 ...... server.${设备n的myid}=${设备n的IP}:2888:3888
- 注意,对应设备的IP的server.${myid}中的myid要对应到该设备的myid文件中的内容
- $ZOOKEEPER_HOME/zoo.cfg
- 在每台设备上分别启动zookeeper即可,另外请注意防火墙
clickhouse集群搭建
单机clickhouse的安装
- 官方说明文档clickhouse安装
- 离线安装
- 启动clickhouse-server
systemctl start clickhouse-server
- 客户端连接
# 此命令可以用于远程连接其他设备上的clickhouse,不过需要做些配置 clickhouse-client --host=${host}
集群clickhouse的搭建
- 在各台设备上分别安装单机的clickhouse
- 配置每台设备上的配置文件,所有设备的配置保持一致即可
- 文件配置路径 /etc/clickhouse-server/config.xml
- 文件配置修改后,clickhouse会动态加载配置内容
- 文件需要修改或者添加的内容
- 分片、副本配置
<remote_servers incl="clickhouse_remote_servers" > <perftest_3shards> <shard> <replica> <host>node1</host> <port>9000</port> </replica> <replica> <host>node2</host> <port>9000</port> </replica> </shard> <shard> <replica> <host>node3</host> <port>9000</port> </replica> <replica> <host>node4</host> <port>9000</port> </replica> </shard> <shard> <replica> <host>node5</host> <port>9000</port> </replica> <replica> <host>node6</host> <port>9000</port> </replica> </shard> <shard> <replica> <host>node7</host> <port>9000</port> </replica> <replica> <host>node8</host> <port>9000</port> </replica> </shard> </perftest_3shards> </remote_servers>
- preftest_3shards是集群的名字,这里可以自行定义,后面建立分布式表时需要用到
- zookeeper配置
<zookeeper incl="zookeeper-servers" optional="true" > <node> <host>10.80.0.150</host> <port>2181</port> </node> <node> <host>10.80.0.151</host> <port>2181</port> </node> <node> <host>10.80.0.152</host> <port>2181</port> </node> </zookeeper>
- 分片、副本数量配置
<macros incl="macros" optional="true" > <shard>3</shard> <replica>2</replica> </macros>
- 外部访问权限开放配置
#将这条配置的数据放开 <listen_host>::</listen_host>
- 此配置是用来放开集群内部其他设备访问本机clickhouse的权限的
- 当然还是要注意防火墙,这里都是用的9000端口
- 分片、副本配置
- 文件配置路径 /etc/clickhouse-server/config.xml
建表
建物理表
- 每台设备上都要建好这个表
- test表的建表语句
[root@node1 clickhouse-server]# clickhouse-client ClickHouse client version 20.4.4.18 (official build). Connecting to localhost:9000 as user default. Connected to ClickHouse server version 20.4.4 revision 54434. node1 :) create table test(id UInt32, rank UInt32, message String, newcolumn String) engine=MergeTree() partition by rank order by rank;
- 注意Engine后面的MergeTree,是对应表的引擎,这玩意儿是大小写敏感的
- MergeTree要求必须写够3个变量,包括我语句中给的partition by、order by,另外一个没看,应该是有默认值的
建分布式表
- 建设分布式表的前提是建好物理表
- 建表语句
create table test_distribute as test engine = Distributed(perftest_3shards, default, test, rand());
- 引擎Distributed后面的每个参数的含义
- perftest_3shards,集群名称,就是clickhouse配置文件中的那个配置,详情见上文
- default,是物理表所在的数据库
- test,是物理表的名称
- rand(),是分片的key
- 引擎Distributed后面的每个参数的含义
测试
- 直接向分布式表中插入数据即可,注意字符串用单引号
insert into table test_distribute values (1, 1, 'A', 'A')