博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用 docker 搭建 clickhouse 集群
阅读量:7052 次
发布时间:2019-06-28

本文共 4588 字,大约阅读时间需要 15 分钟。

转载来自

写在前面

你好,欢迎浏览我的博客,这篇文章将记录我使用docker搭建clickhouse集群的过程

工具准备

服务器准备

这里我们准备三台服务器,

分别配置hostname为server01、server02、server03

所有服务器的/etc/hosts都加上

$ip1 server01$ip2 server02$ip3 server03复制代码

注意: 这里的$ip1、$ip2、$ip3代表的是你三台服务器的ip,记得以实际值写入到/etc/hosts文件中哦

安装 docker

执行命令 yum list | grep docker

返回结果应该如图所示

注意 docker 的版本

一致了之后执行yum install -y docker

-y参数是为了在待输入yes的时候直接自动输入yes

安装 clickhouse-server 和 clickhouse-client

执行命令 yum list | grep clickhouse 返回结果应该如图所示

我们装的是前两个

接下来我们执行下面两条命令进行安装

yum pull docker.io/yandex/clickhouse-server;yum pull docker.io/yandex/clickhouse-client;复制代码

安装 zookeeper 集群

可以参照

启动clickhouse-server

创建对应本地路径

在三台服务器

创建配置存储目录: mkdir /etc/clickhouse-server

创建数据存储目录: mkdir /opt/clickhouse

获取配置

在server01服务器

采用非docker方式安装都是有默认配置的,这个时候我们没有默认配置怎么办?

我们可以先按照官方教程的docker命令启动一下

docker run -d --name clickhouse-server --ulimit nofile=262144:262144 --volume=/opt/clickhouse/:/var/lib/clickhouse yandex/clickhouse-server

-d参数:当前容器在后台启动

--name参数:当前容器的名字,不传的话docker会随机生成

--ulimit参数:这个参数还不清楚,有了解的朋友可以在评论区告诉我一下

--volume参数:将冒号两侧的路径建立映射,当容器服务读取冒号后面的虚拟机内路径时,会去读冒号前面的本机路径。加这个参数的作用是自定义配置

启动完成了后,我们需要复制容器内的配置文件到本机目录下

docker cp clickhouse-server:/etc/clickhouse-server/ /etc/clickhouse-server/

配置集群

在server01服务器

编辑config.xml

执行命令vim /etc/clickhouse-server/config.xml编辑config.xml文件

remote_servers这个xml标签后添加如下配置

/etc/clickhouse-server/metrika.xml
复制代码

新增metrika.xml

执行命令vim /etc/clickhouse-server/metrika.xml新增metrika.xml文件

输入如下文本

false
server01
9000
default
false
server02
9000
default
false
server03
9000
default
server01
2181
server02
2181
server03
2181
::/0
10000000000
0.01
lz4
复制代码

传递配置文件

到这里我们的关于集群的配置就全部完成了,接下来要做的是把我们在server01上的配置文件传输到其它服务器上 执行命令

scp -r /etc/clickhouse-server server02:/etc/clickhouse-serverscp -r /etc/clickhouse-server server03:/etc/clickhouse-server复制代码

可以去对应服务器验证一下

启动集群

分别在三台服务器

执行docker启动脚本

docker run -d \--name cs \--ulimit nofile=262144:262144 \--volume=/opt/clickhouse/:/var/lib/clickhouse  \--volume=/etc/clickhouse-server/:/etc/clickhouse-server/ \--add-host server01:$ip1 \--add-host server02:$ip2 \--add-host server03:$ip3 \--hostname $current_hostname \-p 9000:9000 \-p 8123:8123 \-p 9009:9009 \yandex/clickhouse-server复制代码

注意1: 这里的 $ip1、$ip2、$ip3 记得替换为实际值

注意2: $current_hostname 为当前服务器的hostname

--add-host参数:因为我们在配置文件中使用了hostname来指代我们的服务器,为了让容器能够识别,所以需要加此参数

--hostname参数:clickhouse中的system.clusters表会显示集群信息,其中is_local的属性如果不配置hostname的话clickhouse无法识别是否是当前本机。is_local都为0的话会影响集群操作,比如create table on cluster cluster_2s_1r .....

--p参数:暴露容器中的端口到本机端口中。本机端口:容器端口

验证集群搭建

分别查看三台服务器的system.clusters,应该显示集群中三台服务器的信息,且is_local为正确值

启动 clickhouse-client

在任意服务器

docker run -it \--rm \--add-host server01:$ip1 \--add-host server02:$ip2 \--add-host server03:$ip3 \yandex/clickhouse-client \--host server01 \--port 9000复制代码

--host参数:相当于我们通过yum安装clickhouse时,执行命令clickhouse-client --host server01后面接的参数host,指定用于连接的clickhouse-server的host

--port参数:相当于我们通过yum安装clickhouse时,执行命令clickhouse-client --port 9000后面接的参数port,指定用于连接的clickhouse-server的port

写在最后

使用docker搭建服务和我们平时在服务器上搭建的思路有些不太一样,需要时刻注意我们使用docker启动的服务是在一个虚拟机里的,可以理解为“面向虚拟机部署”

一开始部署集群的时候我的is_local这个属性值就一直不正常,后来看了,想着用他的方式试一下

发现is_local的值好了!我一开始还以为是docker中network的问题,后来在改配置的过程中才意识到是参数hostname起到了关键的作用

转载于:https://juejin.im/post/5cb9a8466fb9a06852553c22

你可能感兴趣的文章
POJ 1873 The Fortified Forest(凸包)题解
查看>>
linux tcpdump的使用详解
查看>>
点击隐藏
查看>>
[ROS]一些传感器数据读取融合问题的思考
查看>>
C++ 文件复制
查看>>
Linux的kickstart安装详解
查看>>
CF Gym 100187J Deck Shuffling (dfs判连通)
查看>>
使用WORD2013发布BLOG
查看>>
解决配置SQL MDS服务时遇到“The required .svc handler mappings are not installed in IIS”错误...
查看>>
猴子选大王
查看>>
【转】“从客户端(ctl00$Content$txtContent)中检测到有潜在危险的 Request.Form 值”之解...
查看>>
MySQL 数据库双向同步复制
查看>>
探索 | “中医+AI”会诊电力设备故障
查看>>
JS—超酷时钟
查看>>
在机器人仿真环境gazebo中加入新的velodyne传感器
查看>>
C#会重蹈覆辙吗?系列之1:论C#性能不能承受之慢
查看>>
利用ssh传输文件
查看>>
JAVA调用Shell脚本
查看>>
破解哈工程大学深澜认证路由器
查看>>
[转载] 杜拉拉升职记——52 如何处置这样的“三期”员工
查看>>