- 1. 安装虚拟机
- 2. 使用Ubuntu的官方预编译deb软件包
- 2.1 apt-get命令
- 2.2 密钥管理
- 2.3 将特定地址添加到source.list的列表中并更新apt
- 2.4 安装clickhouse-server和clickhouse-client
- 2.5 启动clickhouse-server服务登录命令行客户端
- 3. ClickHouse提供的接口
- 4. 访问控制和用户管理
- 4.1 用户配置文件users.xml
- 4.2 profile配置详解
- 4.3 users配置详解
- 4.4 quotas配置详解
- 5. ClickHouse远程连接
- 5.1 修改config.xml配置文件
- 5.2 测试远程登陆
ClickHouse可以在任何具有x86_64, AArch64或PowerPC64LE CPU架构的Linux,FreeBSD或Mac OS X上运行。无法在Windows上运行,所以我推荐首先要在Windows系统安装Linux的虚拟机。MAC OS X的安装与配置我会放在下一篇(或有)写。
我选择的是vmware16 Pro,虚拟机系统Ubuntu20.04.3 LTS,这样系统要求就满足了。
2. 使用Ubuntu的官方预编译deb软件包以下安装与编译的内容可以直接参考ClickHouse官方文档:ClickHouse Getting Started
2.1 apt-get命令打开终端Terminal窗口,输入命令
sudo apt-get install apt-transport-https ca-certificates dirmngr
apt-get是一条linux命令,适用于deb包管理式的操作系统,主要用于自动从互联网的软件仓库中搜索、安装、升级、卸载软件或操作系统。使用apt-get的主流Linux系统包括Debian和Ubuntu变异版本。更多关于apt-get的信息可以参考:apt-get命令
用apt来替换apt-get命令也可以,事实上,我认为应该推荐直接使用apt,二者的区别要从这两个命令的背景和目的说起,简单来讲就是
apt = apt-get、apt-cache 和 apt-config 中最常用命令选项的集合。
但apt并不能完全向下兼容 apt-get 命令,兼容的命令可以参考 Linux中apt与apt-get的区别
那至于是否还可以继续用apt-get呢?目前还没有任何 Linux 发行版官方放出 apt-get 将被停用的消息,至少它还有比 apt 更多、更细化的操作功能。对于低级操作,仍然需要 apt-get。
所以我的建议是对于apt-get install这种apt可以兼容的命令,尽量选择直接使用apt替代apt-get,对于apt无法使用的操作再使用apt-get。
2.2 密钥管理继续在Terminal输入命令
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv E0C56BD4
apt-key用于管理Debian Linux系统中的软件包密钥。每个发布的deb包,都是通过密钥认证的,apt-key用来管理密钥。-recv -key可以下载并添加到受信任密钥环中(不做安全检查,有风险)。关于密钥管理与验证测试可以参考 apt-key密钥管理
2.3 将特定地址添加到source.list的列表中并更新apt继续在Terminal输入命令
echo "deb https://repo.clickhouse.com/deb/stable/main/" | sudo tee /etc/apt/sources.list.d/clickhouse.list sudo apt-get udpate
注意这里不是运行deb命令,而是将这行命令添加到地址为source.list.d/clickhouse.list的文件中,tee命令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。
第一行运行成功后,会输出deb https://repo.clickhouse.com/deb/stable/main/,并且切换到root用户(sudo -i)后
cd etc/apt/sources.list.d vim clickhouse.d
你会发现存在一个叫做clickhouse.d的文件,并且打开后第一行就是刚刚写入的命令
然后输入第二行命令,更新apt-get。
继续在Terminal输入命令
sudo apt-get install -y clickhouse-server clickhouse-client2.5 启动clickhouse-server服务登录命令行客户端
继续在Terminal输入命令
sudo service clickhouse-server start clickhouse-client
第一行打开了服务,所以需要加sudo,第二行就可以启动命令行客户端了,启动后你会通过默认的default用户进入安装好的ClickHouse,界面如下:
关于Default用户的初始配置,clickhouse配置文件的修改,访问权限和账户管理,我会在4.访问控制和用户管理写到。
到这里已经就完成了clickhouse在Windows系统上的安装与使用,撒花!!尤其是看到退出clickhouse的命令行客户端的时候,她会说一句Happy new year. 不知道是因为年末临近所以这么说,还是会随着临近节日的不同而更改祝福,anyway有被暖到。
3. ClickHouse提供的接口ClickHouse提供了两个网络接口
- HTTP,包含文档,易于使用。
- Native TCP,简单,方便使用。
考虑到实际需要,我建议你使用工具库,Yandex官方支持的项目有:
- 命令行客户端
- JDBC驱动
- ODBC驱动
- C++客户端
还有一些广泛的第三方库可以使用:
- 第三方开发库(Python、PHP、Go、Swift、R、Java等)
- 第三方集成库(关系型数据库、消息队列、流处理、对象存储等)
- 可视化UI(Tabix、HouseOps等)
关于接口的说明文档,可以在 客户端接口 中查询。
4. 访问控制和用户管理
初次登陆会默认使用ClickHouse提供的default账号,这个账号有所有的权限,但是不能使用SQL驱动方式的访问权限和账户管理。default主要用于在其他用户还没有设置的情况从客户端登陆或者执行分布式查询。如果已经设置了开发者账户和管理员账户,我不建议继续使用default账户了。default账户的登录信息如下(密码为空):
clickhouse-client --host 127.0.0.1 --user default --port 9000
本段内容参考的官方文档:Access Control and Account Management
官方提供的3个步骤【命令行客户端快速新建用户】
- 为 default 用户开启 SQL驱动方式的访问权限和账户管理;
- 使用 default 用户登录并且创建所需要的所有用户。 不要忘记创建管理员账户 (GRANT ALL ON . WITH GRANT OPTION TO admin_user_account);
- 关闭 default 用户的权限并且禁用SQL驱动方式的访问权限和账户管理;
这里要说明的是,上面第2步从我的测试结果来看是行不通的,我无法通过default用户启用SQL驱动的方式来访问控制和管理账户,只能通过修改配置文件进行账户管理。在目前我还不知道为什么,如果我知道了我会回来更改。
ClickHouse支持使用两种方式配置访问实体:
- 通过sql直接设置,这也是官方推荐的,但是需要至少一个用户帐户启用SQL驱动的访问控制和帐户管理,这需要使用第二种方式设置access_management的值为1(相当于开放SQL驱动方式的访问管理权限)
- 通过配置文件users.xml,默认位置在/etc/clickhouse-server目录下,ClickHouse使用它来定义用户相关的配置项。
下面通过第二种方式,先对用户配置文件详解,再使用它定义新的用户与权限管理。
4.1 用户配置文件users.xml打开Terminal,切换成root用户的根目录
cd etc/clickhouse-server
clickhouse-server文件夹下存放两个配置文件,config.xml和users.xml, 若想开放远程访问,则需要修改config.xml的配置参数,修改方法可以直接跳至5.ClickHouse远程连接
users.xml存储的是所有用户的配置,主要有三部分组成:profile,users,quotas
- profiles:类似于用户角色,可以预先在这里定义多组profile,并为每组profile定义不同的配置项,可以实现配置的复用;
- users:定义用户与设置权限;
- quotas:限制一段时间内的资源使用等
配置参数详解有官方文档:Server Configuration Parameters
推荐几个我看过的总结文章:
- clickhouse用户配置文件详解
- clickhouse配置项users.xml详解
- Clickhouse访问控制和账号管理
10000000000 0 random 10000000000 0 random 0 allow 0 developer deny 1 0 1
这是我的users.xml的profile定义,有五组profile配置:default、developer、inherit、readonly、readwrite
其中inherit是个继承示例,profile配置支持继承,实现继承的方式是在profile配置中先引入其他的profile名称,但若有冲突,后面的配置会覆盖之前继承的配置。
每个参数的具体含义和数值范围可以参考我推荐的几篇文章,readonly设为1表明所有查询类Querry权限是开放的,但无法做写入类的Querry操作,例如可以SELECt但不能INSERT INTO,readonly设为0表明查询和写入的权限都有。allow_ddl设为1表示DDL类命令是可以操作的,例如可以CREATE TABLE,不过这个默认值就是1,不设置应该也可以。
4.3 users配置详解1 ::/0 default default YOURPASSWORD ::/0 developer default ::1 127.0.0.1 readonly default
我的users定义了三个用户:default、admin、readonly
- readonly是只读用户,并且ip的设置是只允许本地访问;
- admin是管理员账户,允许非本地访问,并且profile选择的是开发者profile。password的设置方式有三种:明文、SHA256加密、SHA1加密,明文不被推荐,可以选择SHA256加密的方式。打开Terminal,加密方法如下:
PASSWORD=$(base64 < /dev/urandom | head -c8); echo "PASSWORD"; echo -n $"PASSWORD" | sha256sum | tr -d '-'
运行后第一行会显示你的密码PASSWORD,第二行会显示加密后的一串SHA256加密后的密文。
关于用户设置的配置参数在官方文档里做了很好的解释:User Settings
4.4 quotas配置详解quotas标签是限制了单位时间内的系统资源使用量,而不是限制单个查询的系统资源使用量,值为0表示不限制。我的配置中只有一个quotas设置。
3600 0 0 0 0 0
恭喜你看到这里,用户配置基本就结束了。你可以任意增加profile组,然后给任意用户配置不同的profiles,再赋予这些用户不同的权限。下面我要进行另一项工作了,申请远程登陆。
5. ClickHouse远程连接
我参考的是ClickHouse:允许远程连接 allow remote access
5.1 修改config.xml配置文件还记得在4.1节我提过,存在用户配置文件users.xml的地方,还有另外一个配置文件叫做config.xml, 在这里面可以修改ClickHouse服务端监听端口的配置,如果你用命令
sudo -i cd /. cd var/lib/clickhouse lsof -i :8123
查看监听端口的状态,你可能会发现,ClickHouse默认监听的是本地端口,因此需要修改config.xml中的配置,同样还是vim打开
cd /. cd etc/clickhouse-server vim config.xml
把配置中原本被注释掉的
5.2 测试远程登陆
虚拟机外,我使用Python的clickhouse_driver接口,虚拟机地址为HOSTIP,端口为9000,测试default用户的远程连接。
from clickhouse_driver import connect
conn = connect(host=HOSTIP, user='default', password='', port=9000)
cursor = conn.cursor()
cursor.execute("SELECt * FROM tutorial.test)
cursor.fetchall()
返回了test表的全部数据,远程访问测试成功。



