搭建ClickHouse集群
系统要求
如果从官方仓库安装,需要确保您使用的是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包应该列为可用,如下所示:
有多个软件包可用(新版本和旧工具),其中一些已经弃用,因此无需安装所有可用的RPM。
现在让我们安装ClickHouse主要部件 - 服务器和客户端应用程序,
命令:
sudo yum install -y clickhouse-server clickhouse-client
并验证它是否已列为已安装,
命令:
sudo yum install -y clickhouse-server clickhouse-client
并验证它是否已列为已安装,
命令:
sudo yum list installed 'clickhouse*'
ClickHouse软件包应列为已安装,如下所示,
确保ClicKhouse服务器正在运行,
命令:
sudo /etc/init.d/clickhouse-server restart
然后连接到它 clickhouse-client,
命令:
clickhouse-client
ClickHouse服务器应该响应,如下所示,
至此,单机版的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里,即:
文件夹: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
4.CK里的引擎有十几个,这里只推荐3个
*MergeTree,是CK里最Advanced的引擎,性能超高,单机写入可以达到50w峰值,查询性能非常快,有兴趣看我其他文章
*ReplicatedMergeTree,基于MergeTree,同时引入ZK,做了复制,下文会说
*Distributed,分布式引擎,本身不存储数据,可认为就是一张View,如果写入,会把请求丢到集群里的节点(有算法控制),如果查询,会帮你做查询转发再聚合返回
5.修改配置文件
(1)修改config.xml里对数据目录的定义
说明:remote_servers就是集群配置,可以直接在此处配置,也可以提出来配置到扩展文件中。incl属性表示可从外部文件中获取节点名为clickhouse_remote_servers的配置内容。
使用扩展文件,首先,添加外部扩展配置文件。
(2)metrika.xml
说明:
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
- 点赞
- 收藏
- 关注作者
评论(0)