三、docker中安装Clickhouse(单机&集群)

一、安装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
  • 2、选择一个镜像,一般选择stars数最多的

# 服务端
docker pull yandex/clickhouse-server
# 客户端
docker pull yandex/clickhouse-client

tips:会docker的基本使用。

  • 3、运行临时容器 temp-clickhouse-server

启动一个临时的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
  • 4、config配置和users配置映射Windows硬盘目录

  • 1、创建 F:\clickhouse\conf
  • 2、 Windows控制台继续执行命令
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
  1. 通过 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中

在这里插入图片描述

  • 2.配置用户文件

在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>

  • 5.执行脚本

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

  • 5.1 执行脚本

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
  • 5.2 查看clickhouse的状态

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

  • 5.3 参数解释

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
  • 6.客户端连接

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

在这里插入图片描述

在这里插入图片描述
客户端已经成功连接三台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

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值