搭建ClickHouse集群

举报
1226741228 发表于 2019/01/16 11:16:07 2019/01/16
【摘要】 系统要求如果从官方仓库安装,需要确保您使用的是x86_64处理器构架的Linux并且支持SSE 4.2指令集检查是否支持SSE 4.2:命令:grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"我们推荐使用Ubuntu或者Debian。终端必须使用UTF-8编码。基于r...

系统要求

如果从官方仓库安装,需要确保您使用的是x86_64处理器构架的Linux并且支持SSE 4.2指令集

检查是否支持SSE 4.2:

命令:

grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"

我们推荐使用Ubuntu或者Debian。终端必须使用UTF-8编码。基于rpm的系统,你可以使用第三方的安装包:https://packagecloud.io/altinity/clickhouse 或者直接安装debian安装包。ClickHouse还可以在FreeBSD与Mac OS X上工作。同时它可以在不支持SSE 4.2的x86_64构架和AArch64 CPUs上编译。

来自packagecloud.io的ClickHouse RPM软件包安装(单节点安装)

1.基于脚本的安装

为方便起见,packagecloud.io提供了一个很好的,用户友好的方式来添加他们脚本的回购。我们需要下载并运行packagecloud的bash脚本,它将执行所有必需的步骤。

安装脚本

确保curl已安装在系统上,

命令:

sudo yum install -y curl

下载并运行packagecloud.io提供的安装shell脚本,

命令:

curl -s https://packagecloud.io/install/repositories/altinity/clickhouse/script.rpm.sh | sudo bash

脚本后安装包

首先,确保我们有可用于安装的ClickHouse软件包,

命令:

sudo yum list 'clickhouse*'

ClickHouse包应该列为可用,如下所示:

clipboard1.png

有多个软件包可用(新版本和旧工具),其中一些已经弃用,因此无需安装所有可用的RPM。

现在让我们安装ClickHouse主要部件 - 服务器和客户端应用程序,

命令:

sudo yum install -y clickhouse-server clickhouse-client

并验证它是否已列为已安装,

命令:

sudo yum install -y clickhouse-server clickhouse-client

并验证它是否已列为已安装,

命令:

sudo yum list installed 'clickhouse*'

ClickHouse软件包应列为已安装,如下所示,

clipboard2.png

确保ClicKhouse服务器正在运行,

命令:

sudo /etc/init.d/clickhouse-server restart

然后连接到它 clickhouse-client,

命令:

clickhouse-client

ClickHouse服务器应该响应,如下所示,

clipboard3.png

至此,单机版的ClickHouse完成安装

2.手动安装

参见官方文档

分布式集群搭建

1.配置文件解析

ClickHouse有几核心的配置文件:

*config.xml 端口配置、本地机器名配置、内存设置等

*metrika.xml 集群配置、ZK配置、分片配置等

*users.xml 权限、配额设置

2.rpm启动方式

rpm安装后,会在服务器上生成如下几个文件:

# 默认配置文件位置

root@localhost.localdomain:/  # ls /etc/clickhouse-server

config.xml  users.xml

# 上述文件定义了默认数据目录,临时目录位置,日志目录

/var/lib/clickhouse

/var/lib/clickhouse/tmp/

/var/log/clickhouse-server

# 默认启动脚本,注意,这个名字虽然叫server,其实是个shell脚本

/etc/rc.d/init.d/clickhouse-server

root@localhost.localdomain:/  # file /etc/rc.d/init.d/clickhouse-server

/etc/rc.d/init.d/clickhouse-server: POSIX shell script, ASCII text executable, with very long lines

# 最大文件打开数

root@localhost.localdomain:/  # cat /etc/security/limits.d/clickhouse.conf

clickhouse      soft    nofile  262144

clickhouse      hard    nofile  262144

# 默认crontab目录(没啥用)

/etc/cron.d/clickhouse-server

# 剩下就是/usr/bin下的二进制文件,但其实都是软链接到了clickhouse这个二进制文件

root@localhost.localdomain:/usr/bin  # ll | grep click -i

-rwxr-xr-x    1 root root      63M Sep 20 16:58 clickhouse

lrwxrwxrwx    1 root root       10 Dec 11 17:14 clickhouse-client -> clickhouse

-rwxr-xr-x    1 root root     3.3M Sep 20 16:58 clickhouse-compressor

lrwxrwxrwx    1 root root       10 Dec 11 17:14 clickhouse-server -> clickhouse

3.注意几个问题:

(1)默认的数据目录明显不合理,特别是对于部分机器,系统盘和数据盘是不同的配置,需要单独挂载,以我们为例,我们统一使用/data1来放数据,数据目录以clickhouse命名,考虑到不用单机多实例,不以clickhouse${port}来命名

(2)默认的配置文件,对我们的管理也是个隐患,建议把配置文件、数据目录、临时目录、日志文件,统一放到/data1/clickhouse里,即:

clipboard4.png

文件夹:cores、data、还有data_old、flags、log、metadata、tmp,文件:status,

启动脚本:start_ck.sh(即 file /etc/rc.d/init.d/clickhouse-server)

(3)修改默认的shell脚本,修改默认配置文件的位置,即上面的start_ck.sh

clipboard5.png

4.CK里的引擎有十几个,这里只推荐3个

*MergeTree,是CK里最Advanced的引擎,性能超高,单机写入可以达到50w峰值,查询性能非常快,有兴趣看我其他文章

*ReplicatedMergeTree,基于MergeTree,同时引入ZK,做了复制,下文会说

*Distributed,分布式引擎,本身不存储数据,可认为就是一张View,如果写入,会把请求丢到集群里的节点(有算法控制),如果查询,会帮你做查询转发再聚合返回

5.修改配置文件

(1)修改config.xml里对数据目录的定义

clipboard6.png

clipboard7.png

说明:remote_servers就是集群配置,可以直接在此处配置,也可以提出来配置到扩展文件中。incl属性表示可从外部文件中获取节点名为clickhouse_remote_servers的配置内容。

使用扩展文件,首先,添加外部扩展配置文件。

(2)metrika.xml

clipboard8.png

clipboard9.png

说明:

clickhouse_remote_servers与config.xml中的incl属性值对应;

cluster_3shards_1replicas是集群名,可以随便取名;

共设置3个分片,每个分片只有1个副本;

(3)user.xml

用于用户管理

<?xml version="1.0"?>

<yandex>

<profiles>

<!-- 读写用户设置  -->

<default>

<max_memory_usage>10000000000</max_memory_usage>

<use_uncompressed_cache>0</use_uncompressed_cache>

<load_balancing>random</load_balancing>

</default>

<!-- 只写用户设置  -->

<readonly>

<max_memory_usage>10000000000</max_memory_usage>

<use_uncompressed_cache>0</use_uncompressed_cache>

<load_balancing>random</load_balancing>

<readonly>1</readonly>

</readonly>

</profiles>

<!-- 配额  -->

<quotas>

<!-- Name of quota. -->

<default>

<interval>

<duration>3600</duration>

<queries>0</queries>

<errors>0</errors>

<result_rows>0</result_rows>

<read_rows>0</read_rows>

<execution_time>0</execution_time>

</interval>

</default>

</quotas>

<users>

<!-- 读写用户  -->

<default>

<password_sha256_hex>967f3bf355dddfabfca1c9f5cab39352b2ec1cd0b05f9e1e6b8f629705fe7d6e</password_sha256_hex>

<networks incl="networks" replace="replace">

<ip>::/0</ip>

</networks>

<profile>default</profile>

<quota>default</quota>

</default>

<!-- 只读用户  -->

<ck>

<password_sha256_hex>967f3bf355dddfabfca1c9f5cab39352b2ec1cd0b05f9e1e6b8f629705fe7d6e</password_sha256_hex>

<networks incl="networks" replace="replace">

<ip>::/0</ip>

</networks>

<profile>readonly</profile>

<quota>default</quota>

</ck>

</users>

</yandex>

问题:端口占用

查看端口占用情况:

sudo netstat -nltp | grep 9000

sudo  kill -9 3071


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。