鲲鹏安装ClickHouse Docker


鲲鹏服务器的运维真是累人,以前普通的应用安装在鲲鹏上要费更多的时间和精力。为了支持华为的芯片,以及熟悉下不同架构的linux系统,就当回忍者。

安装环境:

  • CentOs 7.9
  • 服务器CPU内核版本 : 4.18.0-305.10.2.el7.aarch64
  • Shell: Zsh 5.0.2 (aarch64-redhat-linux-gnu)

什么是ClickHouse

ClickHouse是一个由俄罗斯最大的搜索公司Yandex开源的列式数据库(DBMS),主要用于在线分析处理查询(OLAP),于2016年开源,采用C++开发。凭借优秀的性能,市场反应非常热烈。

相对行式数据库,像Mysql、Oracle、SqlServer等都是行式存储,是把同一行的数据放到相邻同一数据块种,而列式存储是把同一列的数据放到相邻同一数据块种,这样在进行计算类查询时,可以大大减少IO消耗,返回结果更快,采用列式存储后在进行数据记录写入的时候会麻烦一些。
从2016年开源至今5年多,截止目前为止,国内不少大厂已经纷纷使用。

  • 至今年12月,字节跳动内部的 ClickHouse 节点总数超过 15000 个,管理总数据量超过 600PB,最大的集群规模在 2400 余个节点。
  • 腾讯内部用ClickHouse做游戏数据分析,并且为之建立了一整套监控运维体系。
  • 携程内部从2018年7月份开始接入试用,目前80%的业务都跑在ClickHouse上。每天数据增量十多亿,近百万次查询请求。
  • 快手内部也在使用ClickHouse,存储总量大约10PB, 每天新增200TB, 90%查询小于3S。

安装aarch64架构的docker

已经安装好docker运行环境的请忽略这步。

1. 下载docker官方提供的aarch64的二进制包:

1
wget -c https://download.docker.com/linux/static/stable/aarch64/docker-19.03.6.tgz

其它版本: https://download.docker.com/linux/static/stable/aarch64/

2. 解压然后将docker目录下文件拷贝到/usr/bin里:

1
2
tar -xvf docker-19.03.06.tgz
mv docker/* /usr/bin/

3. 新增系统服务文件docker.service和docker.socket

** 添加docker.service文件并编辑**

1
vi /lib/systemd/system/docker.service

添加以下内容并保存:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target docker.socket firewalld.service
Wants=network-online.target
Requires=docker.socket

[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H fd://
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=1048576
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=always
RestartSec=5
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=multi-user.target

添加docker.socket文件并编辑

1
vi /lib/systemd/system/docker.socket

添加以下内容并保存:

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=Docker Socket for the API
PartOf=docker.service

[Socket]
ListenStream=/var/run/docker.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker

[Install]
WantedBy=sockets.target

4. 新建docker用户及组

1
2
groupadd docker 
useradd docker -g docker

5. 启动docker服务

1
systemctl daemon-reload && systemctl start docker

安装clickhouse的docker服务

因为官方提供的docker镜像不支持aarch64架构的服务器系统,所以只好从库里找了支持arm64架构的镜像。

upload successful

拉取最新版本镜像:

1
docker pull altinity/clickhouse-server:21.8.12.1.testingarm

运行容器,运行前确保clickhouse默认要用的几个端口是否被其他进程占用。可以用命令查看,比如netstat -anput|grep 9000 。如果被其他应用占用了端口,虽然可以配置或者docker映射到其他端口,但是方便工具查看,尽量保持默认端口不变。

1
2
3
4
docker run --rm -d --name=clickhouse-server \
--ulimit nofile=262144:262144 \
-p 8123:8123 -p 9009:9009 -p 9000:9000 \
altinity/clickhouse-server:21.8.12.1.testingarm

创建clickhouse需要的目录并更改权限

1
2
3
4
5
6
7
mkdir -p /app/cloud/clickhouse/data
mkdir -p /app/cloud/clickhouse/conf
mkdir -p /app/cloud/clickhouse/log

chmod -R 777 /app/cloud/clickhouse/data
chmod -R 777 /app/cloud/clickhouse/conf
chmod -R 777 /app/cloud/clickhouse/log

复制上面临时容器内配置文件到宿主机

1
2
docker cp clickhouse-server:/etc/clickhouse-server/config.xml /app/cloud/clickhouse/conf/config.xml
docker cp clickhouse-server:/etc/clickhouse-server/users.xml /app/cloud/clickhouse/conf/users.xml

停止临时容器

docker stop clickhouse-server

创建default账号随机密码

1
PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$PASSWORD"; echo -n "$PASSWORD" | sha256sum | tr -d '-'

会输出明码和SHA256密码,比如:

1
2
eZtC73on
e2e2287f3c0af0fecc1d0b4e7973ff18fdd129ab104a25eab4ade259e314e142

当然你可以用简单密码123456代替上面命令里的“$PASSWORD”

修改用户配置文件

1
2
修改 /app/cloud/clickhouse/conf/users.xml
把default账号设为只读权限,并设置密码 yandex-->users-->default-->profile 节点设为 readonly 注释掉 yandex-->users-->default-->password 节点 新增 yandex-->users-->default-->password_sha256_hex 节点,填入生成的密码,如图所示。

upload successful

修改连接配置文件来支持远程访问

1
2
修改 /app/cloud/clickhouse/conf/config.xml
把注释掉的 <listen_host>::</listen_host> 取消注释。

upload successful

重新创建容器

1
2
3
4
5
6
7
docker run -d --name=clickhouse-server \
-p 8123:8123 -p 9009:9009 -p 9000:9000 \
--ulimit nofile=262144:262144 \
-v /app/cloud/clickhouse/data:/var/lib/clickhouse:rw \
-v /app/cloud/clickhouse/conf/config.xml:/etc/clickhouse-server/config.xml \
-v /app/cloud/clickhouse/conf/users.xml:/etc/clickhouse-server/users.xml \
-v /app/cloud/clickhouse/log:/var/log/clickhouse-server:rw altinity/clickhouse-server:21.8.12.1.testingarm

至此大功告成;更多配置可以查看clickhouse的官方文档。

部分参考链接: https://blog.csdn.net/jianzhang11/article/details/105445855

clickhouse官方中文文档: https://clickhouse.com/docs/zh/


文章作者: Jacky Chen
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Jacky Chen !
评论
  目录