阅读此文,你将得到什么:
ClickHouse安装的2种方法,以及背后的坑
一步步帮你实现ClickHouse从单机到集群化,以及集群化的原理、配置文件等
集群化的2种方案,孰优孰劣
如有疑问,请留言或者联系我
官方默认只支持Ubuntu,并且提供了Docker镜像:
Docker安装很方便,但是有几个问题:
建议调整:
由于Docker方式我并不在线上采用,这里不再举例。建议仅仅作为笔记本上测试、了解用(不过前期,没有找到rpm包,Docker的确帮了我们很大的忙)。
不出意外的话,99%的服务器都是CentOS系列
官方没有提供rpm包,但是Altinity公司提供了,关于这个公司的介绍,可以参照我其他文章
如果下载不了,看我的百度网盘,密码yv72(我这里好久没更新了,请注意看版本)
CentOS推荐7.3以上,基本没有依赖包的问题
rpm -ivh * 即可安装完成
ClickHouse有几核心的配置文件:
以上文件都可以在官方git下载到
# 默认配置文件位置
[email protected]:/ # 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
[email protected]:/ # 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
# 最大文件打开数
[email protected]:/ # cat /etc/security/limits.d/clickhouse.conf
clickhouse soft nofile 262144
clickhouse hard nofile 262144
# 默认crontab目录(没啥用)
/etc/cron.d/clickhouse-server
# 剩下就是/usr/bin下的二进制文件,但其实都是软链接到了clickhouse这个二进制文件
[email protected]:/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
默认的数据目录明显不合理,特别是对于部分机器,系统盘和数据盘是不同的配置,需要单独挂载,以我们为例,我们统一使用/data1来放数据,数据目录以clickhouse命名,考虑到不用单机多实例,不以clickhouse${port}来命名
默认的配置文件,对我们的管理也是个隐患,建议把配置文件、数据目录、临时目录、日志文件,统一放到/data1/clickhouse里,即:
[email protected]:/data1/clickhouse # tree . -L 1
.
├── config-preprocessed.xml
├── config.xml
├── cores
├── data
├── flags
├── log
├── metadata
├── metrika.xml
├── start_ck.sh
├── status
├── tmp
├── users-preprocessed.xml
└── users.xml
- 这里其实是可以直接使用clickhouse-server(二进制那个),并采用-d参数启动的,但是实际过程,遇到了很多意外的情况,比如-d后,并不会以daemon方式启动,后来就不考虑直接命令行方式了
- 修改config.xml里对数据目录的定义
trace
/data1/clickhouse/log/server.log
/data1/clickhouse/log/error.log
1000M
10
8123
9000
9009
这里需要用域名,如果后续用到复制的话
0.0.0.0
64
3
16
8589934592
10737418240
/data1/clickhouse/
/data1/clickhouse/tmp/
users.xml
default
1
default
3600
0
/data1/clickhouse/metrika.xml
无需多解释,就是单机部署
按照上述方式安装rpm包,修改默认的config文件和启停控制脚本,启动即可
我上面的配置文件里,直接包含了集群的配置文件,如果只用了上述文件,是无法正常启动的
看这个文章的,应该都是冲着后面的集群搭建来的吧,所以,忽略这一个吧
CK的分布式,完全依赖配置文件,即每个节点,都共享同样的配置文件,这个配置文件里,写了我跟谁是一个cluster的,我自己的名字是啥
如下面的配置文件里,有3个分片,各自用域名来标记,如果需要密码的话,集群也要写上明文密码和用户名
这样,就行程了ClickHouse的集群
集群怎么用?
false
ck31.xxxx.com.cn
9000
default
6lYaUiFi
false
ck32.xxxx.sina.com.cn
9000
default
6lYaUiFi
false
ck33.xxxxa.com.cn
9000
default
6lYaUiFi
ck1
::/0
1.xxxx.sina.com.cn
2181
2.xxxx.sina.com.cn
2181
3.xxxxp.sina.com.cn
2181
10000000000
0.01
lz4
10000000000
0
random
10000000000
0
random
1
3600
0
0
0
0
0
967f3bf355dddfabfca1c9f5cab39352b2ec1cd0b05f9e1e6b8f629705fe7d6e
::/0
default
default
967f3bf355dddfabfca1c9f5cab39352b2ec1cd0b05f9e1e6b8f629705fe7d6e
::/0
readonly
default
CREATE TABLE db.tb (date Date, ……) ENGINE = MergeTree(date, (date, hour, datetime), 8192)
CREATE TABLE db.tb_all (date Date, ……) ENGINE = Distributed(bip_ck_cluster, 'ck_test', 'dagger', rand())"
db.tb为本地表,数据只是在本地
db.tb_all为分布式表,查询这个表,引擎自动把整个集群数据计算后返回
像不像一台手动挡的车
上述方案,使用过后,会发现CK的性能真的是超级快,这里我就不在贴图了,有兴趣可以看我那122页的PPT
但是有个问题,以上面3个节点为例,每个节点占1/3,如果宕机1个节点,直接丢掉1/3的数据,不能忍啊
于是,就得考虑数据的安全性,即副本
MergeTree + Distributed + 集群复制
解释都在图里了,提一点,如果IP1挂了,IP2还在,不影响集群查询
这种方案为什么我们没有用呢?
CREATE TABLE db.tb (date Date, ……) ENGINE = ReplicatedMergeTree('/clickhouse/db/tb/name', 'node_name', date, (date, hour, datetime), 8192)
CREATE TABLE db.tb_all (date Date, ……) ENGINE = Distributed(bip_ck_cluster, 'ck_test', 'dagger', rand())"
转载:http://www.clickhouse.com.cn/topic/5a366e97828d76d75ab5d5a0