一、安装docker
https://blog.csdn.net/weixin_39912640/article/details/120391027
二、安装zookeeper集群
Clickhouse单机用不到zookeeper集群,集群模式下需要用倒zookeeper ,但不一定需要zookeeper集群。
https://blog.csdn.net/weixin_39912640/article/details/120392104
单机模式
- 1、打开Windows控制台(Win+R -> 输入cmd -> 回车)-> 输入
- 2、查看有哪些镜像
C:\Users\admin>docker search clickhouse
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
yandex/clickhouse-server ClickHouse is an open-source column-oriented… 340 [OK]
yandex/clickhouse-client Native client for the Clickhouse database ma… 82 [OK]
spoonest/clickhouse-tabix-web-client tabix: https://github.com/tabixio/tabix 9 [OK]
nikepan/clickhouse-bulk Collects small insterts and sends big reques… 4
f1yegor/clickhouse-exporter ClickHouse exporter for Prometheus 3 [OK]
alexakulov/clickhouse-backup Tool for easy ClickHouse backup and restore … 3
altinity/clickhouse-operator ClickHouse Operator for Kubernetes (beta) 2
tacyuuhon/clickhouse-chproxy This is a Docker images of a chproxy 2
yandex/clickhouse-binary-builder 1
yandex/clickhouse-python-bottle 1
flant/clickhouse-exporter Clickhouse Prometheus exporter 0
yandex/clickhouse-stateful-test 0
yandex/clickhouse-integration-helper 0
yandex/clickhouse-stateless-test 0
podshumok/clickhouse My attempt to build Clickhouse with CPU-opti… 0
datagrip/clickhouse ClickHouse image with an external dictionary 0 [OK]
yandex/clickhouse-stress-test 0
yandex/clickhouse-integration-test 0
yandex/clickhouse-integration-tests-runner 0
yandex/clickhouse-s3-proxy 0
yandex/clickhouse-unit-test 0
yandex/clickhouse-deb-builder 0
muxinc/clickhouse-server https://hub.docker.com/r/yandex/clickhouse-s… 0
crobox/clickhouse Clickhouse server image that only uses IPv4 0 [OK]
yandex/clickhouse-fuzzer
# 服务端
docker pull yandex/clickhouse-server
# 客户端
docker pull yandex/clickhouse-client
tips:会docker的基本使用。
启动一个临时的server端,是为了获取ck的配置文件
docker run --rm -d --name=temp-clickhouse-server yandex/clickhouse-server
C:\Users\admin>docker run --rm -d --name=temp-clickhouse-server yandex/clickhouse-server
Unable to find image 'yandex/clickhouse-server:latest' locally
latest: Pulling from yandex/clickhouse-server
35807b77a593: Pull complete
227b2ff34936: Pull complete
1f146c18eea9: Pull complete
2f4cc4c74be7: Pull complete
6c77b18b2086: Pull complete
15926356e6d0: Pull complete
193cbb933a84: Pull complete
Digest: sha256:e7f902cc787bb1ef13dd2da6f0655895bfd43fb1556380ec666fd754714ca519
Status: Downloaded newer image for yandex/clickhouse-server:latest
af0aa200d1712290dc04cf912a0e78728bd444920b71917799da2b5621700709
C:\Users\admin>docker cp temp-clickhouse-server:/etc/clickhouse-server/config.xml F:/clickhouse/conf/config.xml
C:\Users\admin>docker cp temp-clickhouse-server:/etc/clickhouse-server/users.xml F:/clickhouse/conf/users.xml
- 3、查看配置文件是否复制成功完成
5、创建账号
此账号是客户端连接服务端使用的
- 1、 进入临时容器 temp-clickhouse-server ,Windows控制台继续执行命令
docker exec -it temp-clickhouse-server /bin/bash
- 2、 容器内执行命令,生成账号的SHA256,例如账号:zhao 密码:zhao
PASSWORD=$(base64 < /dev/urandom | head -c8); echo "zhao"; echo -n "zhao" | sha256sum | tr -d '-'
C:\Users\admin>docker exec -it temp-clickhouse-server /bin/bash
root@af0aa200d171:/# PASSWORD=$(base64 < /dev/urandom | head -c8); echo "zhao"; echo -n "zhao" | sha256sum | tr -d '-'
# 用户名
zhao
# 加密后的密码
4ba739741e69e5d4df6d596c94901c58f72c48caaf8711be6fead80e2fa54ddd
root@af0aa200d171:/#
- 3 修改 F:/clickhouse/conf/users.xml 文件
找到标签 在标签内直接添加 这个用户
<users>
<zhao>
<password_sha256_hex>4ba739741e69e5d4df6d596c94901c58f72c48caaf8711be6fead80e2fa54ddd</password_sha256_hex>
<networks incl="networks" replace="replace">
<ip>::/0</ip>
</networks>
<profile>zhao</profile>
<quota>zhao</quota>
</zhao>
</users>
6、修改监听host
修改 F:/clickhouse/conf/config.xml 文件
将这个标签去掉注释 让它生效 表示可以被外网访问 如果不打开可能会有网络不通的问题
<listen_host>0.0.0.0</listen_host>
tips:一般是IPV4,如果IPV6改成 <listen_host>::</listen_host>
7、销毁临时容器
C:\Users\admin>docker stop af0aa200d171
af0aa200d171
8、运行ClickHouse服务
- (1) 创建目录:F:/clickhouse/data 存放数据 和 F:/clickhouse/log 存放日志
- (2) Windows控制台执行命令,映射端口 8123、9000、9009,数据、配置、日志映射到Windows硬盘
docker run -d --name=single-clickhouse-server -p 8123:8123 -p 9000:9000 -p 9009:9009 --ulimit nofile=262144:262144 --volume F:/clickhouse/data:/var/lib/clickhouse:rw --volume F:/clickhouse/conf:/etc/clickhouse-server:rw --volume F:/clickhouse/log:/var/log/clickhouse-server:rw yandex/clickhouse-server
参数解释
docker run -d
# 容器名称
--name=single-clickhouse-server
# 端口映射
-p 8123:8123
-p 9000:9000
-p 9009:9009
--ulimit nofile=262144:262144
#映射数据目录
--volume F:/clickhouse/data:/var/lib/clickhouse:rw
# 映射配置文件
--volume F:/clickhouse/conf:/etc/clickhouse-server:rw
#映射日志
--volume F:/clickhouse/log:/var/log/clickhouse-server:rw yandex/clickhouse-server
安装完毕
C:\Users\admin>docker run -d --name=single-clickhouse-server -p 8123:8123 -p 9000:9000 -p 9009:9009 --ulimit nofile=262144:262144 --volume F:/clickhouse/data:/var/lib/clickhouse:rw --volume F:/clickhouse/conf:/etc/clickhouse-server:rw --volume F:/clickhouse/log:/var/log/clickhouse-server:rw yandex/clickhouse-server
a2a3e46643ac313554be38a260bae290e75d6cffaa7db202a4cbf52ad2712cfb
查看clickhouse 状态 安装完成
C:\Users\admin>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a2a3e46643ac yandex/clickhouse-server "/entrypoint.sh" 4 minutes ago Up 4 minutes 0.0.0.0:8123->8123/tcp, :::8123->8123/tcp, 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp, 0.0.0.0:9009->9009/tcp, :::9009->9009/tcp single-clickhouse-server
9、客户端连接ck
-
DBeaver相关
-
1、下载社区版
https://dbeaver.io/files/dbeaver-ce-latest-x86_64-setup.exe -
2、安装
下一步就行 -
3、连接ClickHouse
-
3.1 、 输入主机IP -> 输入端口号 -> 输入账号密码 -> 测试链接 -> 完成
第一次连接要下载驱动,会进入这个界面
点击下载就好
到此单机版的已经搭建完成
单机参考
https://blog.csdn.net/u010318957/article/details/114290585
集群模式
环境 :zookeeper集群已经搭建完成
并且已经有了自建的bridge 网络,如果使用宿主机的ip网络,ck无法内部无法通信,与docker中的zookeeper也无法通信
所以需要zookeeper和clickhouse在同一个网络中才可以通信。
此处参考zookeeper集群的网络设置
- https://blog.csdn.net/weixin_39912640/article/details/120392104
- 通过 docker network create --driver bridge --subnet=172.18.0.0/16 --gateway=172.18.0.1 zoonet
ck与zk在同一个子网下
说明:
模拟搭建3个节点的ck集群三个分片分别在ck-node1,ck-node2,ck-node3上
ck-node1:172.18.0.5:8123 9000 9009
ck-node2:172.18.0.6:8124 9001 9010
ck-node3:172.18.0.7:8125 9002 9011
1、创建目录
创建三个目录分别包存配置文件与数据
F:\clickhouse\ck-node1
F:\clickhouse\ck-node2
F:\clickhouse\ck-node3
2、修改配置文件
- 1、从单机环境中复制一份 config.xml 和users.xml到ck-node1中
在users.xml中的标签中添加用户
<zhao>
<password_sha256_hex>4ba739741e69e5d4df6d596c94901c58f72c48caaf8711be6fead80e2fa54ddd</password_sha256_hex>
<networks incl="networks" replace="replace">
<ip>::/0</ip>
</networks>
<profile>zhao</profile>
<quota>zhao</quota>
</zhao>
-
3 编辑config.xml
- 3.1 注意 在旧版本中一个会创建一个metrika.xml进行节点的配置,新版ck建议直接在config.xml进行配置
两种配置方式:一个直接在config.xml中进行remote_servers的配置,一个是在conf文件夹中创建metrika.xml
然后在config.xml文件中 remote_servers这个xml标签后添加如下配置<include_from>/etc/clickhouse-server/metrika.xml</include_from>
- 3.2 本文直接在config.xml中进行配置
找到<remote_servers>标签增加如下内容
ck分片配置
# 集群名称
<jdcluster>
# 第一个分片
<shard>
<internal_replication>true</internal_replication>
<replica>
<!--这里写节点1的IP4地址 这个地址不是宿主机的地址,而是刚才在docker中创建的虚拟子网的ip地址-
->
<host>172.18.0.5</host>
<!--这里写节点1的tcp端口-->
<port>9000</port>
<!--这里写节点1的账号-->
<user>zhao</user>
<!--这里写节点1的账号对应的密码-->
<password>zhao</password>
</replica>
</shard>
# 第二个分片
<shard>
<internal_replication>true</internal_replication>
<replica>
<!--这里写节点2的IP4地址-->
<host>172.18.0.6</host>
<!--这里写节点1的tcp端口-->
<port>9000</port>
<!--这里写节点1的账号-->
<user>zhao</user>
<!--这里写节点1的账号对应的密码-->
<password>zhao</password>
</replica>
</shard>
# 第三个分片
<shard>
<internal_replication>true</internal_replication>
<replica>
<!--这里写节点3的IP4地址-->
<host>172.18.0.7</host>
<!--这里写节点1的tcp端口-->
<port>9000</port>
<!--这里写节点1的账号-->
<user>zhao</user>
<!--这里写节点1的账号对应的密码-->
<password>zhao</password>
</replica>
</shard>
</jdcluster>
zookeeper配置
<zookeeper>
<node>
<!--这个地址需要和clickhouse的ip地址是docker虚拟出来的子网ip 这样zookeeper和clickhouse 才可以相互通信-->
<host>172.18.0.2</host>
<port>2181</port>
</node>
<node>
<host>172.18.0.3</host>
<port>2181</port>
</node>
<node>
<host>172.18.0.4</host>
<port>2181</port>
</node>
</zookeeper>
网络配置
- 1、listen_host
<listen_host>0.0.0.0</listen_host>
- 2 、network配置
<networks>
<ip>::/0</ip>
</networks>
- 3、 macros配置
<macros>
<cluster>jdcluster</cluster>
<shard>01</shard>
<replica>jdcluster-01-1</replica>
</macros>
其他2分片配置
将node1下的config.xml和users.xml文件拷贝到node2,node3下边
并修改config.xml 的macros配置
<macros>
<cluster>jdcluster</cluster>
<shard>02</shard>
<replica>jdcluster-02-1</replica>
</macros>
<macros>
<cluster>jdcluster</cluster>
<shard>03</shard>
<replica>jdcluster-03-1</replica>
</macros>
docker run -d -p 8125:8123 -p 9001:9000 -p 9019:9009 --name=ck_node1 --privileged --restart always --network zoonet --ip 172.18.0.5 --ulimit nofile=262144:262144 --volume F:/clickhouse/ck-node1/data:/var/lib/clickhouse:rw --volume F:/clickhouse/ck-node1/conf:/etc/clickhouse-server:rw --volume F:/clickhouse/ck-node1/log:/var/log/clickhouse-server:rw 8a2fd1d0ecd3
docker run -d -p 8126:8123 -p 9002:9000 -p 9029:9009 --name=ck_node2 --privileged --restart always --network zoonet --ip 172.18.0.6 --ulimit nofile=262144:262144 --volume F:/clickhouse/ck-node2/data:/var/lib/clickhouse:rw --volume F:/clickhouse/ck-node2/conf:/etc/clickhouse-server:rw --volume F:/clickhouse/ck-node2/log:/var/log/clickhouse-server:rw 8a2fd1d0ecd3
docker run -d -p 8127:8123 -p 9003:9000 -p 9039:9009 --name=ck_node3 --privileged --restart always --network zoonet --ip 172.18.0.7 --ulimit nofile=262144:262144 --volume F:/clickhouse/ck-node3/data:/var/lib/clickhouse:rw --volume F:/clickhouse/ck-node3/conf:/etc/clickhouse-server:rw --volume F:/clickhouse/ck-node3/log:/var/log/clickhouse-server:rw 8a2fd1d0ecd3
C:\Users\admin>docker run -d -p 8125:8123 -p 9001:9000 -p 9019:9009 --name=ck_node1 --privileged --restart always --network zoonet --ip 172.18.0.5 --ulimit nofile=262144:262144 --volume F:/clickhouse/ck-node1/data:/var/lib/clickhouse:rw --volume F:/clickhouse/ck-node1/conf:/etc/clickhouse-server:rw --volume F:/clickhouse/ck-node1/log:/var/log/clickhouse-server:rw 8a2fd1d0ecd3
152cb698415f6a146d1490c93aa6e923ce9df50a01ddb053861ae037fbc0f5b6
C:\Users\admin>docker run -d -p 8126:8123 -p 9002:9000 -p 9029:9009 --name=ck_node2 --privileged --restart always --network zoonet --ip 172.18.0.6 --ulimit nofile=262144:262144 --volume F:/clickhouse/ck-node2/data:/var/lib/clickhouse:rw --volume F:/clickhouse/ck-node2/conf:/etc/clickhouse-server:rw --volume F:/clickhouse/ck-node2/log:/var/log/clickhouse-server:rw 8a2fd1d0ecd3
545f605f77a8bd9f1c814b7992f51ea2ac774a2ea58d2f37f63d87b7cff67931
C:\Users\admin>docker run -d -p 8127:8123 -p 9003:9000 -p 9039:9009 --name=ck_node3 --privileged --restart always --network zoonet --ip 172.18.0.7 --ulimit nofile=262144:262144 --volume F:/clickhouse/ck-node3/data:/var/lib/clickhouse:rw --volume F:/clickhouse/ck-node3/conf:/etc/clickhouse-server:rw --volume F:/clickhouse/ck-node3/log:/var/log/clickhouse-server:rw 8a2fd1d0ecd3
565c1596829436e09d1b4a379080ab924f18143a05f29057ebc49a4d2bb5ffe0
C:\Users\admin>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
565c15968294 8a2fd1d0ecd3 "/entrypoint.sh" 9 seconds ago Up 6 seconds 0.0.0.0:8127->8123/tcp, :::8127->8123/tcp, 0.0.0.0:9003->9000/tcp, :::9003->9000/tcp, 0.0.0.0:9039->9009/tcp, :::9039->9009/tcp ck_node3
545f605f77a8 8a2fd1d0ecd3 "/entrypoint.sh" 16 seconds ago Up 14 seconds 0.0.0.0:8126->8123/tcp, :::8126->8123/tcp, 0.0.0.0:9002->9000/tcp, :::9002->9000/tcp, 0.0.0.0:9029->9009/tcp, :::9029->9009/tcp ck_node2
152cb698415f 8a2fd1d0ecd3 "/entrypoint.sh" 24 seconds ago Up 21 seconds 0.0.0.0:8125->8123/tcp, :::8125->8123/tcp, 0.0.0.0:9001->9000/tcp, :::9001->9000/tcp, 0.0.0.0:9019->9009/tcp, :::9019->9009/tcp ck_node1
a2a3e46643ac yandex/clickhouse-server "/entrypoint.sh" 2 hours ago Up 2 hours 0.0.0.0:8123->8123/tcp, :::8123->81
docker run
# 后台运行
-d
#端口映射
-p 8125:8123 -p 9001:9000 -p 9019:9009
# 容器名称
--name=ck_node1
# 防止报错
--privileged
# docker 重启该容器也会自动重启
--restart always
# 使用自定义的子网ip 手动为每个节点指定ip
--network zoonet --ip 172.18.0.5
--ulimit nofile=262144:262144
# 数据文件映射
--volume F:/clickhouse/ck-node1/data:/var/lib/clickhouse:rw
#配置文件映射
--volume F:/clickhouse/ck-node1/conf:/etc/clickhouse-server:rw
# 日志映射
--volume F:/clickhouse/ck-node1/log:/var/log/clickhouse-server:rw
# 镜像id
8a2fd1d0ecd3
客户端已经成功连接三台clickhouse
7、创建表
7.1 在端口 8125,8126,8127 分别创建一个名字叫jdcluster的数据库
create database jdcluster;
7.2 在8125 端口号的连接上创建jdcluster.test001表
create table jdcluster.test001 on cluster jdcluster
(
membership_id int, -- comment '会员id',
membership_uid String, -- comment '会员uid',
insert_date Date DEFAULT toDate(now()) -- 数据插入日期
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/test001', '{replica}')
order by membership_uid
参数解释:
# /clickhouse/tables/ clickhouse 在zookeeper上的根目录
# {shard} 取配置文件中的节点信息
# test001 一般与表名相同,在zookeeper的位置
# {replica} 副本信息 也是取配置文件中的值
<macros>
<cluster>jdcluster</cluster>
<shard>03</shard>
<replica>jdcluster-03-1</replica>
</macros>
ReplicatedMergeTree('/clickhouse/tables/{shard}/test001', '{replica}')
创建成功后,在8126,8127上都可以看到jdcluster.test001 这张表
7.3 创建分布式表(任意节点 执行一次就可以了)
CREATE TABLE jdcluster.test001_all ON CLUSTER jdcluster AS jdcluster.test001
ENGINE = Distributed('jdcluster','jdcluster','test001',rand())
7.4使用分布式表插入数据
插入数据
INSERT INTO jdcluster.test001_all
(membership_id, membership_uid, insert_date)
VALUES(0, 'a', toDate(now())),
(0, 'a', toDate(now())),
(2, 'a', toDate(now())),
(3, 'a', toDate(now())),
(4, 'a', toDate(now())),
(5, 'd', toDate(now()));
查看数据
可以看到数据已经随机分配到了三个分片上,到此clickhouse集群分片完成
副本还没有演示
https://www.cnblogs.com/qa-freeroad/p/14398818.html