【HBZ分享】RPM方式集群部署ClickHouse

一. 环境准备

这里博主准备了4台阿里云服务器,其中一台部署ZooKeeper,另外3台部署ClickHouse集群

二. ZooKeeper的Docker部署

Docker部署ZK命令:
docker run -d --name zookeeper -p 2181:2181 -t zookeeper:3.7.0

【HBZ分享】RPM方式集群部署ClickHouse_第1张图片
【HBZ分享】RPM方式集群部署ClickHouse_第2张图片
注意:如果是云服务器部署,一定要开放2181端口

三. 下载ClickHouse安装包

下载地址:https://clickhouse.com/docs/zh/getting-started/install/.

【HBZ分享】RPM方式集群部署ClickHouse_第3张图片
下载下面4个即可,采用22.1.2.2-2版本的
【HBZ分享】RPM方式集群部署ClickHouse_第4张图片
【HBZ分享】RPM方式集群部署ClickHouse_第5张图片
下载完毕就是这样
【HBZ分享】RPM方式集群部署ClickHouse_第6张图片

四. 把ClickHouse上传到3台服务器上,并安装

我这里上传的路径是:/software/clickhouse

服务器安装clickhouse

1. 进入到目录
cd ../software/clickhouse

2. 安装(过程中会让输入用户名,密码。可以直接回车不输入)
sudo rpm -ivh *.rpm

3. 启动
systemctl start clickhouse-server

4. 状态查看(一定要加sudo)
sudo systemctl status clickhouse-server

5. 停止
systemctl stop clickhouse-server

6. 重启
systemctl restart clickhouse-server

7. 查看端口,默认是8123
lsof -i :8123

8. 查看正常日志 与 错误日志
tail -f /var/log/clickhouse-server/clickhouse-server.log
tail -f /var/log/clickhouse-server/clickhouse-server.err.log

启动成功截图:sudo systemctl status clickhouse-server
在这里插入图片描述

五. 打开网络,实现可远程连接

1. 进入配置文件
vim /etc/clickhouse-server/config.xml

2. 解除下面配置的注释
0.0.0.0

3. 保存即可

4. 重启
systemctl restart clickhouse-server

【HBZ分享】RPM方式集群部署ClickHouse_第7张图片

远程连接测试:通过工具连接,只要成功连接即说明成功
【HBZ分享】RPM方式集群部署ClickHouse_第8张图片

六. 配置多服务器节点的副本间通信

1. 进入hosts文件
sudo vim /etc/hosts

2. 配置每个节点ip : 主机名——->注意:为了安全起见,一定要使用内网ip,不要使用公网ip
172.31.13.102    iZwz9bg08mzvezp7qumh70Z
172.28.124.76    iZwz9bg08mzvezp7qumh71Z
172.31.13.103    iZwz9bg08mzvezp7qumh72Z

3. 如何查看机器名称?
服务器任意地方输入  hostname   命令

4. 把第二步骤的3条复制到每个节点上即可

5. 重启clickhouse
systemctl restart clickhouse-server

6. 进入配置文件
vim /etc/clickhouse-server/config.xml

7. 配置zookeeper地址,每台服务器都配置,解开注释或者重新写都可以, 多个zookeeper可以加多个node

          
                zookeeper的公网/内网ip
                2181
          
         


8. 重启
systemctl restart clickhouse-server

9. 开放阿里云端口
网络安全组记得开放http端口是8123,tcp端口是9000, 同步端口9009  

【HBZ分享】RPM方式集群部署ClickHouse_第9张图片

【HBZ分享】RPM方式集群部署ClickHouse_第10张图片

七. 验证集群 与 副本成功配置完毕

验证点1:

连接上zookeeper时,system库中,会多一张zookeeper表

验证点2:实战

1. 在所有节点上创建表
#节点一,zk路径一致,副本名称不一样
CREATE TABLE tb_product
(
    userId UInt32
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/1/tb_product', 'product-replica-1')
ORDER BY (userId)


#节点二,zk路径一致,副本名称不一样
CREATE TABLE tb_product
(
    userId UInt32
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/1/tb_product', 'product-replica-2')
ORDER BY (userId)


#节点三,zk路径一致,副本名称不一样
CREATE TABLE tb_product
(
    userId UInt32
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/1/tb_product', 'product-replica-3')
ORDER BY (userId)



2. 在节点1上添加几条数据
INSERT into tb_product values(1),(2),(3)


3. 去节点2,3上查询,依然能够看到节点1插入的数据(达到此效果,表示配置成功)
select * from tb_product

4. 查看下zk
select * from system.zookeeper where path='/'

注意1,3个节点的zk路径一定要【都一样】,副本名称一定【不能一样】
注意2,副本间同步只针对数据,表是不会同步的,所以建表的时候,每个节点都要执行建表语句
注意3,所有节点互为副本,没有什么主从之分

八. 配置多分片副本,这里是3分片,每个分片1个副本进行配置

1. 进入配置文件,3台服务器都要写
vim /etc/clickhouse-server/config.xml

2. 找到标签为,在其内部复制如下内容, 3台服务器都要写以下内容

        
        
            
                172.31.13.102
                9000
            
        
        
        
        
            
                172.28.124.76
                 9000
            
        

 	
        
            
                172.31.13.103
                 9000
            
        


注释:
    cluster_3shards_1replicas:集群cluster的名称,随便起
    shard:每有一个shard块,就代表一个分片
    replica:每个shard分片的副本,shard下有几个replica块,就表示每个shard有多少个副本,这里有一个
    host: 服务器的内网地址
    port: tcp通信端口,默认是9000


3. 重启
systemctl restart clickhouse-server


4. 验证集群是否成功,在clickhouse中执行如下sql命令:看看是否存在cluster_3shards_1replicas这个集群
select * from system.clusters

【HBZ分享】RPM方式集群部署ClickHouse_第11张图片

【HBZ分享】RPM方式集群部署ClickHouse_第12张图片

九. 验证集群搭建

建表实操

1. 【选一个节点】创建好【本地表】后,在1个节点创建,会在其他节点都存在
create table default.cluster_order on cluster cluster_3shards_1replicas
(id Int8,name String) engine =MergeTree order by id;

2. 【选一个节点】创建【分布式表名】 cluster_order_all,在1个节点创建,会在其他节点都存在
create table cluster_order_all on cluster cluster_3shards_1replicas (
id Int8,name String
)engine = Distributed(cluster_3shards_1replicas,default, cluster_order,hiveHash(id));

3.分布式表插入-->会按照权重等策略分配到不同的分片
insert into cluster_order_all values(1,'冰冰'),(2,'大钊'),(3,'小D'),(4,'老王');

4. 【任意节点查询-分布式,全部数据】   【查询的是全部的数据】
SELECT * from cluster_order_all

5. 【任意本地节点查询,部分数据】  【查询的是部分数据,仅能查到自己库里面的数据】
SELECT * from cluster_order

注意:分布式表创建的格式如下:

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
    ...
) ENGINE = Distributed(cluster, database, table[, sharding_key[, policy_name]])
[SETTINGS name=value, ...]

cluster集群名: cluster_3shards_1replicas      【clickhouse配置文件中配置的那个集群名称】
database库名:default    是数据库的名,即default.cluster_order
table表名:cluster_order(每个节点表都叫这个名)
sharding_key:hiveHash(id)   对id做hash

截图
本地表创建:
【HBZ分享】RPM方式集群部署ClickHouse_第13张图片
分布式表创建,要在视图中找:

【HBZ分享】RPM方式集群部署ClickHouse_第14张图片

向分布式表插入数据后,通过分布式表查询, 可以查到全部数据:
【HBZ分享】RPM方式集群部署ClickHouse_第15张图片
使用本地表查询,只能查到部分数据
【HBZ分享】RPM方式集群部署ClickHouse_第16张图片
【HBZ分享】RPM方式集群部署ClickHouse_第17张图片
【HBZ分享】RPM方式集群部署ClickHouse_第18张图片

十. 卸载clickhouse

# 卸载及删除安装文件(需root权限)
yum list installed | grep clickhouse
 
yum remove -y clickhouse-common-static
 
yum remove -y clickhouse-server-common
 
rm -rf /var/lib/clickhouse
 
rm -rf /etc/clickhouse-*
 
rm -rf /var/log/clickhouse-server

rpm -e clickhouse-common-static-dbg-22.1.2.2-2.x86_64

你可能感兴趣的:(clickhouse,zookeeper,数据库)