目录
背景
在阿里云ECS服务器Linux中安装部署ClickHouse。
ClickHouse版本:version 24.12.2.29
一、什么是ClickHouse
-
简介
ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。Clickhouse是开源列式数据库,主要用于数据分析(OLAP)领域。
-
特性
1)真正的列式数据库管理系统
ClickHouse不单单是一个数据库, 它是一个数据库管理系统。因为它允许在运行时创建表和数据库、加载数据和运行查询,而无需重新配置或重启服务。
2)数据压缩
压缩性能更高:磁盘空间和CPU消耗之间进行不同权衡的高效通用压缩编解码器,甚至提供针对特定类型数据的专用编解码器。
3)数据的磁盘存储
基于shard+replica实现的线性扩展和高可靠
采用列式存储,数据类型一致,压缩性能更高
硬件利用率高,连续IO,提高了磁盘驱动器的效率
向量化引擎与SIMD提高了CPU利用率,多核多节点并行化大查询
二、安装
系统要求
ClickHouse可以在任何具有x86_64,AArch64或PowerPC64LE CPU架构的Linux,FreeBSD或Mac OS X上运行。
RPM方式安装
推荐使用CentOS、RedHat和所有其他基于rpm的Linux发行版的官方预编译rpm
包。
注意:需要添加官方存储库。
安装yum-utils工具
执行如下命令
sudo yum install -y yum-utils
添加官方存储库
执行如下命令
sudo yum-config-manager --add-repo https://packages.clickhouse.com/rpm/clickhouse.repo
安装ClickHouse
执行如下命令
sudo yum install -y clickhouse-server clickhouse-client
已经安装完成。
安装验证
启动ClickHouse
执行如下命令在后台启动服务
sudo /etc/init.d/clickhouse-server start
日志文件将输出在/var/log/clickhouse-server/
文件夹。
如果服务器没有启动,检查/etc/clickhouse-server/config.xml
中的配置。
您也可以手动从控制台启动服务器:
$ clickhouse-server --config-file=/etc/clickhouse-server/config.xml
访问服务
启动服务后,您可以使用命令行客户端连接到它
clickhouse-client
默认情况下,使用default
用户并不携带密码连接到localhost:9000,链接后执行如下命令:
select 1
至此,恭喜,系统已经成功安装ClickHouse。
三、修改配置文件
默认核心目录
/etc/clickhouse-server/
默认服务端的配置文件目录,包括全局配置config.xml和用户配置users.xml等
/var/lib/clickhouse/
默认的数据存储目录(通常会修改默认路径配置,将数据保存到大容量磁盘挂载的路径)
/var/log/clickhouse-server/
默认保存日志的目录(最好也修改路径配置,将日志保存到大容量磁盘挂载的路径)
1、创建文件夹
mkdir -p /software/apps/clickhouse-server/{data,logs,tmp,user_files}
chown -R clickhouse:clickhouse /software/apps/clickhouse-server
2、修改配置
备份一份原始配置文件
执行如下命令:
cp -r config.xml config.xml.bak
执行如下命令:
#修改配置文件
vim /etc/clickhouse-server/config.xml
修改内容如下:
#远程登录,clickhouse 默认不允许远程访问
<listen_host>::</listen_host>
#修改日志目录
<log>/software/apps/clickhouse-server/logs/clickhouse-server.log</log>
<errorlog>/software/apps/clickhouse-server/logs/clickhouse-server.err.log</errorlog>
# 修改数据存储目录
<!-- 数据存储目录 -->
<path>/software/apps/clickhouse-server/data/</path>
<!-- 查询时的产生的临时数据存储目录 -->
<tmp_path>/software/apps/clickhouse-server/tmp/</tmp_path>
<!-- 用户数据文件目录,用于ClickHouse文件表引擎 -->
<user_files_path>/software/apps/clickhouse-server/user_files/</user_files_path>
3、ClickHouse管理命令
#查看命令
clickhouse --help
#启动
clickhouse start
#关闭
clickhouse stop
#重启
clickhouse restart
重启后,查看创建的文件夹是否有数据,
数据已经存在,说明配置修改成功。
四、开启防火墙端口号
启动 FirewallD 服务
sudo systemctl start firewalld
启用 FirewallD 服务,使其在系统启动时自动运行:
sudo systemctl enable firewalld
添加开放端口规则
开放8123端口
# sudo firewall-cmd --add-port=8123/tcp --permanent
# sudo firewall-cmd --reload
五、登录ClickHouse
ClickHouse支持访问限制设置。它们位于users.xml
文件(与config.xml
同级目录)。 默认情况下,允许default
用户从任何地方访问,不需要密码。
命令行登录
# clickhouse-client
或
# clickhouse-client --user default --password
如果有密码时需要进行如下命令:
default用户没有设置密码时,直接回车继续。
命令行退出登录
直接输入q,按回车
远程登录ClickHouse
使用dbeaver连接clickhouse
通过dbeaver连接到clickhouse后会根据软件自身配置的阿里云地址下载驱动信息,也可手动操作下载升级;
由于是阿里云服务器中搭建的,所以需要开放白名单的端口:8123,然后才能链接上。
六、用户权限管理
用户权限简介
用户账户是权限实体,用来授权操作ClickHouse,用户账户包含:
- 标识符信息。
- 特权用来定义用户可以执行的查询的范围。
- 可以连接到ClickHouse的主机。
- 指定或者默认的角色。
- 用户登录的时候默认的限制设置。
- 指定的设置描述。
特权可以通过GRANT查询授权给用户或者通过角色授予。如果想撤销特权,可以使用REVOKE查询。查询用户所有的特权,使用SHOW GRANTS语句。
默认用户密码重置
默认ClickHouse提供了一个 default
账号,这个账号有所有的权限,但是不能使用SQL驱动方式的访问权限和账户管理。default
主要用在用户名还未设置的情况,比如从客户端登录或者执行分布式查询。在分布式查询中如果服务端或者集群没有指定用户名密码那默认的账户就会被使用。
如果忘记default默认用户密码,可以通过以下操作重置密码
default默认用户密码存放在/etc/clickhouse-server/users.d/default-password.xml
#使用SHA256加密新的密码
echo -n 12345678 | openssl dgst -sha256
vim /etc/clickhouse-server/users.d/default-password.xml
#重新启动clickhouse
clickhouse restart
#重新使用新密码登录
clickhouse-client --user default --password
创建管理员账号
- 为
default
用户开启SQL驱动方式的访问权限和账户管理 . - 使用
default
用户登录并且创建所需要的所有用户。 不要忘记创建管理员账户 (GRANT ALL ON *.* WITH GRANT OPTION TO admin_user_account
)。 - 限制
default
用户的权限并且禁用SQL驱动方式的访问权限和账户管理。
创建用户admin,密码1qaz@WSX
执行命令
CREATE USER ch_admin IDENTIFIED BY '123456';
和
CREATE USER clickhouse_admin IDENTIFIED BY '123456';
授权所有权限
## 注意这条命令不能在default账号下执行报错
GRANT ALL ON *.* TO ch_admin WITH GRANT OPTION
此命令报错,
补充资料
常见的列式数据库
常见的列式数据库有: Vertica、 Paraccel (Actian Matrix,Amazon Redshift)、 Sybase IQ、 Exasol、 Infobright、 InfiniDB、 MonetDB (VectorWise, Actian Vector)、 LucidDB、 SAP HANA、 Google Dremel、 Google PowerDrill、 Druid、 kdb+。
参考资料
官网文档:https://clickhouse.com/docs/zh
Github地址:GitHub - ClickHouse/ClickHouse: ClickHouse® is a real-time analytics database management system
问题录
default账户分配权限报错
错误描述
Exception: default: Not enough privileges.
分析原因
查看user.xml 配置发现,默认default配置没有分配权限的管理,修改配置文件如下:
然后重启ClickHouse,结果重启不了了,查看启动错误日志如下:
继续查看官网分析发现官网说明如下:
【开启SQL驱动方式的访问权限和账户管理
-
为至少一个账户开启SQL驱动方式的访问权限和账户管理.
默认情况,SQL驱动方式的访问权限和账户管理对所有用户都是关闭的。你需要在
users.xml
中配置至少一个用户,并且把权限管理的值设置为1。】
个人理解:就是通过SQL驱动凡是创建账户权限和访问权限需要再user.xml文件中配置一个用户,且这个用户不能是default默认账户。
解决方案
报错问题暂时没法解决,查看源码issue也没有具体方案,待后续跟进完善。
以下提供另一种解决方案:
在user.xml中配置管理员账户
配置内容如下:
<ch_admin>
<password>123456</password>
<networks>
<ip>::/0</ip>
</networks>
<quota>default</quota>
<access_management>1</access_management>
<named_collection_control>1</named_collection_control>
</ch_admin>
重新启动ClickHouse后,查看ch_admin账号权限
SHOW GRANTS FOR ch_admin;
权限已经和default账号一致了。
未找到匹配的参数: clickhouse-server
错误描述
执行安装命令时,报错如下:
分析原因
没有添加ClickHouse的官网存储库
解决方案
这篇博客到这里就接近尾声了,希望我的分享能给您带来一些启发和帮助,别忘了点赞、收藏。您的每一次互动、鼓励是我持续创作的动力!期待与您再次相遇,共同探索更广阔的世界!