ClickHouse【高可用篇】02:ClickHouse分片集群部署

一、环境准备

1、环境信息

192.168.184.161  zk  ck
192.168.184.162  zk  ck
192.168.184.163  zk  ck
192.168.184.164      ck

在这里插入图片描述

2、修改主机名

(1)161节点执行

hostname  node-01
sudo hostnamectl set-hostname node-01
su -

在这里插入图片描述

(2)162节点执行

hostname  node-02
sudo hostnamectl set-hostname node-02
su -

在这里插入图片描述

(3)163节点执行

hostname  node-03
sudo hostnamectl set-hostname node-03
su -

在这里插入图片描述

(3)164节点执行

hostname  node-04
sudo hostnamectl set-hostname node-04
su -

在这里插入图片描述

3、修改hosts

vim /etc/hosts

添加如下内容

192.168.184.161 node-01
192.168.184.162 node-02
192.168.184.163 node-03
192.168.184.164 node-04

在这里插入图片描述

4、安装java环境

在zk集群安装即可,我这里是161、162、163节点进行安装。

yum -y install java

在这里插入图片描述

java -version

在这里插入图片描述

5、安装clickhouse

在161、162、163、164节点安装clickhouse,可参考:

ClickHouse安装以及常见字段类型

二、ClickHouse分片架构图

在这里插入图片描述
在这里插入图片描述

三、zookeeper安装和启动

1、下载zookeeper

网盘地址:

链接: https://pan.baidu.com/s/1p2aPuhR3GSo3qDehTPmypg?pwd=hkyw
提取码: hkyw 
mkdir /data/zookeeper
cd /data/zookeeper
ll

在这里插入图片描述

tar zxvf apache-zookeeper-3.9.3-bin.tar.gz
cd apache-zookeeper-3.9.3-bin
cd conf/

cp zoo_sample.cfg zoo.cfg

在这里插入图片描述

2、修改配置文件

vim /data/zookeeper/apache-zookeeper-3.9.3-bin/conf/zoo.cfg

加入

server.1=192.168.184.161:2888:3888
server.2=192.168.184.162:2888:3888
server.3=192.168.184.163:2888:3888

在这里插入图片描述

3、配置myid

(1)161节点执行

mkdir -p /tmp/zookeeper/ 
echo 1 >/tmp/zookeeper/myid

在这里插入图片描述

(2)162节点执行

mkdir -p /tmp/zookeeper/ 
echo 2 >/tmp/zookeeper/myid

在这里插入图片描述

(3)163节点执行

mkdir -p /tmp/zookeeper/ 
echo 3 >/tmp/zookeeper/myid

在这里插入图片描述

4、启动zookeeper

/data/zookeeper/apache-zookeeper-3.9.3-bin/bin/zkServer.sh start

在这里插入图片描述

查看进程

ps -ef | grep zookeeper

在这里插入图片描述

四、配置ClickHouse的分片集群

在161、162、163、164节点进行配置

1、修改分片配置文件

vim /etc/clickhouse-server/config.xml

(1)调整监听的host

调整监听的host,这里一般安装的时候就设置好了:

<listen_host>0.0.0.0</listen_host>

在这里插入图片描述

(2)zookeeper的配置

加入zookeeper的配置:

<zookeeper>
    <node>
        <host>node-01</host>
        <port>2181</port>
    </node>
    <node>
        <host>node-02</host>
        <port>2181</port>
    </node>
    <node>
        <host>node-03</host>
        <port>2181</port>
    </node>
</zookeeper>

在这里插入图片描述

(3)分片集群的配置

加入分片集群的配置:

<remote_servers>
  <!-- 2分片1副本 -->
  <cluster_test>
    <!-- 数据分片1 -->
    <shard>
      <weight>1</weight>
      <!-- Optional. Whether to write data to just one of the replicas. Default: false (write data to all replicas). -->
      <internal_replication>true</internal_replication>
      <replica>
        <host>192.168.184.161</host>
        <port>9000</port>
      </replica>
      <replica>
         <host>192.168.184.162</host>
         <port>9000</port>
      </replica>

    </shard>
    <!-- 数据分片2 -->
    <shard>
      <weight>1</weight>
      <internal_replication>true</internal_replication>
      <replica>
        <host>192.168.184.163</host>
        <port>9000</port>
      </replica>
      <replica>
        <host>192.168.184.164</host>
        <port>9000</port>
      </replica>

    </shard>
  </cluster_test>
</remote_servers>

在这里插入图片描述
在这里插入图片描述

参数解释:

internal_replication
这个参数表示是否将数据写入其中一个副本,如果是false,表示写入所有副本。
每个分片可以配置权重weight,默认都是1

(4)分片集群的名称

注意,这里每一个节点都不一样,要注意一下!!

161节点

<macros>
    <shard>01</shard>
    <replica>node-01</replica>
</macros>

在这里插入图片描述

162节点

<macros>
    <shard>01</shard>
    <replica>node-02</replica>
</macros>

在这里插入图片描述

163节点

<macros>
    <shard>02</shard>
    <replica>node-03</replica>
</macros>

在这里插入图片描述

164节点

<macros>
    <shard>02</shard>
    <replica>node-04</replica>
</macros>

在这里插入图片描述

参数解释:

这一段是ClickHouse里面的宏,类似代码里的变量
在等一下创建分布式表的时候,会调用这两个宏
分片1,shard写成01
分片2,shard写成02
replica,每个节点唯一,比如是node-01 到04

2、重启clickhouse

/etc/init.d/clickhouse-server restart

在这里插入图片描述

3、查看集群信息

随便选择一个节点,登录clickhouse,这里我在161节点进行登录

clickhouse-client -m

在这里插入图片描述

查看集群信息

select * from system.clusters;

在这里插入图片描述

4、创建本地表和总表

(1)创建库

在所有节点创建库,我这里是161、162、163、164节点

clickhouse-client -m

在这里插入图片描述

CREATE DATABASE cluster_db; 

在这里插入图片描述
在这里插入图片描述

(2)创建本地表

到其中一个节点创建本地表,会自动同步到其他节点,我这里在161节点进行创建。

clickhouse-client -m

在这里插入图片描述

CREATE TABLE cluster_db.cluster_table_local on cluster cluster_test
(
    EventDate DateTime,
    CounterID UInt32,
    UserID UInt32
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/cluster_table_local', '{replica}')
PARTITION BY toYYYYMM(EventDate)
ORDER BY (CounterID, EventDate, intHash32(UserID));

在这里插入图片描述

参数解释:

ENGINE = ReplicatedMergeTree('zk_path', 'replica_name')

1、zk_path 用于指定在 zk 中创建数据表的路径,一般 zk_path 建议配置成如下形式:
/clickhouse/fcluster}/{shard}{table name}
	(1){cluster}表示集群名;
	(2){shard}表示分片编号;
	(3){table_name}表示数据表的名称;
2、replica_name 的定义,需要注意的是同一分片不同副本,需要定义不同的名称;
3、而 zk path 的定义,需要注意的是同一分片不同副本,需要定义相同的路径。

(3)创建分布式总表

所有节点都需要创建分布式总表:

CREATE TABLE  cluster_db.cluster_table_all AS  cluster_db.cluster_table_local ENGINE = Distributed(cluster_test, cluster_db, cluster_table_local, rand());

在这里插入图片描述

参数解释:

cluster_test:集群名
cluster_db和cluster_table:库表名
rand():分片方式

五、数据分布测试

1、往总表写入数据

在161节点写入数据

insert into cluster_db.cluster_table_all values ('2030-01-01 12:00:00',1,1),
('2030-02-01 12:00:00',2,2),
('2030-03-01 12:00:00',3,3),
('2030-04-01 12:00:00',4,4);

在这里插入图片描述

2、查询总表数据

161、162、163、164节点查询数据

select * from cluster_db.cluster_table_all;

在这里插入图片描述

3、查询各个分片本地表的数据

161、162、163、164节点查询数据

select * from cluster_db.cluster_table_local;

在这里插入图片描述

六、高可用测试

1、停一个节点

停掉163节点的ck

/etc/init.d/clickhouse-server stop

在这里插入图片描述

2、测试总表写入数据

161节点写入数据

insert into cluster_db.cluster_table_all values 
('2030-05-01 12:00:00',5,5),
('2030-06-01 12:00:00',6,6);

在这里插入图片描述

3、测试总表查询

161、162、164节点查询数据

select * from cluster_db.cluster_table_all ;

在这里插入图片描述

七、问题总结

1、怎样完全删除分片表

如果创建了本地表,想删除,可以登录zookeeper

(1)登录zookeeper

/data/zookeeper/apache-zookeeper-3.9.3-bin/bin/zkCli.sh

在这里插入图片描述

(2)查询

ls /

在这里插入图片描述

(3)删除

deleteall /clickhouse/tables/01
deleteall /clickhouse/tables/02

在这里插入图片描述

2、某个实例本地表没有任何数据可能的原因

如果发现某个本地表没有保存任何数据,可能是listen_host没有开放,配置如下:

<listen_host>0.0.0.0</listen_host>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

做一个有趣的人Zz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值