ClickHouse

ClickHouse 属于 OLAP 数据库

OLTP 与 OLAP

  • OLTP (On-Line Transaction Processing 联机事务处理), 注重事务处理, 数据记录的性能和安全性
  • OLAP (On-Line Analytical Processing 联机分析处理), 注重数据分析, 重点在查询的性能

一般使用 OLTP 数据库做业务数据存储, 用 OLAP 数据库做查询分析.

ClickHouse 性能

  • 写入性能很高, 基本能到磁盘读写瓶颈
  • 适合宽表查询, 在JOIN查询时, 关联表需要控制在千万级别以内
  • 分布式场景下需要预先规划容量, 对于持续扩容需求的场景运维成本比较高
  • 支持全文搜索(inverted index, by n-gram or token), 具体讨论可以看这个讨论, 当前还处于experimental
  • 仅支持有限的事务, 保证INSERT过程的原子性, 包括写入和读取
  • 不支持 Windows. 虽然可以通过 WSL, Docker 之类运行在 Win10 上, 但是这样的方式仅仅是"能运行", 性能已经大打折扣, 没有实用价值.

在需要复杂查询的分布式场景, 可以考虑 Apache Doris.

安装

硬件需求

  • 硬盘安装需要2.5G空间
  • 内存不小于4G, 推荐16G以上, 越大越好
  • SSD + RAID, 文件格式 Ext4, XFS
  • 集群部署, 建议使用10G(万兆)网络

Ubuntu 安装

sudo apt-get install -y apt-transport-https ca-certificates dirmngr
# 在 /tmp 下创建临时目录
GNUPGHOME=$(mktemp -d)
echo $GNUPGHOME
# 生成 clickhouse-keyring.gpg
sudo GNUPGHOME="$GNUPGHOME" gpg --no-default-keyring --keyring /usr/share/keyrings/clickhouse-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 8919F6BD2B48D754
sudo rm -r "$GNUPGHOME"
sudo chmod +r /usr/share/keyrings/clickhouse-keyring.gpg
# 创建 ck 的 apt list
echo "deb [signed-by=/usr/share/keyrings/clickhouse-keyring.gpg] https://packages.clickhouse.com/deb stable main" | sudo tee /etc/apt/sources.list.d/clickhouse.list
# 更新软件包
sudo apt-get update
# 安装
sudo apt install -y clickhouse-server clickhouse-client

Centos7安装

sudo yum-config-manager --add-repo https://packages.clickhouse.com/rpm/clickhouse.repo
sudo yum install -y clickhouse-server clickhouse-client

CK 文件结构

  • 配置文件 /etc/clickhouse-server, config.xml 全局配置, users.xml 用户配置
  • 存储目录 /var/lib/clickhouse
    • 路径定义: /etc/clickhouse-server/config.xml <path>/var/lib/clickhouse/</path>, <tmp_path>/var/lib/clickhouse/tmp/</tmp_path>, <user_files_path>/var/lib/clickhouse/user_files/</user_files_path>
  • 日志路径 /var/log/clickhouse-server/, clickhouse-server.err.log clickhouse-server.log

服务管理

启动服务

sudo systemctl start clickhouse-server
sudo systemctl status clickhouse-server

服务IP和端口

默认只侦听本地请求, 打开服务端口, 编辑 /etc/clickhouse-server/config.xml

sudo chmod 600 /etc/clickhouse-server/config.xml
sudo vi /etc/clickhouse-server/config.xml

取消注释, 同时服务IPv6和IPv4

<listen_host>::</listen_host>

如果只需要提供IPv4, 可以取消这一行注释

<listen_host>0.0.0.0</listen_host>

这两行不能同时取消注释, 启动会报错

用户管理

ClickHouse 的用户分两种

  • 直接配置在 /etc/clickhouse-server/user.xml 中的用户, 例如 default
  • 在SQL中创建的用户

这两种用户的登录方式是一样的

配置用户口令

打开 /etc/clickhouse-server/user.xml 能看到设置用户口令相关的说明, 默认用户 default 的口令为空

简单的说就是

  • 明文口令直接用<password>qwerty</password>进行设置
  • SHA256口令用<password_sha256_hex>65e84be33532fb784c48129675f9eff3a682b27168c0ea744b2cf58ee02337c5</password_sha256_hex>
  • Double SHA1口令用<password_double_sha1_hex>e395796d6546b1b65db9d665cd43f0e858dd4303</password_double_sha1_hex>
  • LDAP验证用<ldap><server>my_ldap_server</server></ldap>
  • Kerberos验证用<kerberos><realm>EXAMPLE.COM</realm></kerberos>

相应的口令生成命令

# SHA256
PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$PASSWORD"; echo -n "$PASSWORD" | sha256sum | tr -d '-'
cY19OvVH <-- 口令
e17cd697e0845d75d2068ae1e1479d3fd10d76e5afa89724fbc6fe27554526e4 <-- SHA256结果 # Double SHA1
PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$PASSWORD"; echo -n "$PASSWORD" | sha1sum | tr -d '-' | xxd -r -p | sha1sum | tr -d '-'
1gQO8XpM <-- 口令
e9fdf3480016dfae8ad0170e846edd031180a3f4 <-- Double SHA1结果

如果 Centos7 下没有 xxd 命令, 需要通过以下命令安装

sudo yum install vim-common

如果需要增加位数

PASSWORD=$(base64 < /dev/urandom | head -c16); echo "$PASSWORD"; echo -n "$PASSWORD" | sha256sum | tr -d '-'
vlIlWHFqY0BbSy2f
e08ebd515246f1b5f3bfdb24b967a797b7218289b263ed0fbb3ff47fcc121f1b

如果需要自定义

PASSWORD=asdf1234; echo "$PASSWORD"; echo -n "$PASSWORD" | sha1sum | tr -d '-' | xxd -r -p | sha1sum | tr -d '-'
asdf1234
dda7b4594264195da8bb303516d7ec5509b7b942

通过 user.d 下的 xml 增加用户

例如新增一个带管理权限的用户 dbowner, 可以在 /etc/clickhouse-server/user.d 下创建文件 dbowner.xml, 内容为

<clickhouse>
<users>
<dbowner>
<password>abcd1234</password>
<networks>
<ip>::/0</ip>
</networks> <profile>default</profile> <quota>default</quota> <access_management>1</access_management>
</dbowner>
</users>
</clickhouse>

上面这个配置

  • 用户名为 dbowner
  • 口令为明文的 abcd1234
  • 网络来源: 所有IPv6, IPv4 地址
  • 允许使用管理权限(通过 access_management = 1)

clickhouse启动时, 会将 user.d 下的配置文件与 user.xml 合并, 并覆盖 user.xml 中重复的部分. 注意这个文件的权限, 需要将这个文件的owner设为 clickhouse, 否则 clickhouse 启动后读取会失败.

sudo chown clickhouse:clickhouse dbowner.xml

通过 SQL 增加用户, 并配置权限

具体的用户权限配置, 参考 ClickHouse 官方说明

https://clickhouse.com/docs/en/operations/access-rights

上面添加的 dbowner 用户只开启了 access_management, 默认情况下 SQL-driven access control 和 account management都是关闭的, 如果要启用完整的 SQL user mode, 要在<dbowner>下增加的配置为

<access_management>1</access_management>
<named_collection_control>1</named_collection_control>
<show_named_collections>1</show_named_collections>
<show_named_collections_secrets>1</show_named_collections_secrets>

在安装 ClickHouse 的机器上, 使用上面创建的 dbowner 登入 client, 并创建一个新用户 dbroot, 授予全部权限

$ clickhouse-client --user dbowner --password abcd1234

:) CREATE USER dbroot IDENTIFIED BY 'root1234';
CREATE USER dbroot IDENTIFIED WITH sha256_hash BY '21AC41BC256B35A32EC2021D359AE5F297AD7ED2F8ED8F7A2A1A7B9F1F94F898' SALT '56DC39142C0AEB19BC2C61AACBD9F27DD040E25489CC29B76D07D65F6D2A3AA1'
Query id: d0099db9-b292-4905-84bd-a91da19f8edc
Ok.
0 rows in set. Elapsed: 0.005 sec.

创建用户成功, 但是授予权限时报错了

:) GRANT ALL ON *.* TO dbroot WITH GRANT OPTION;
GRANT ALL ON *.* TO dbroot WITH GRANT OPTION
Query id: 92a50da8-d847-4f4f-a74c-95b9f1207a67
0 rows in set. Elapsed: 0.007 sec. Received exception from server (version 23.4.2):
Code: 497. DB::Exception: Received from localhost:9000. DB::Exception: dbowner: Not enough privileges. To execute this query it's necessary to have grant SHOW, SELECT, INSERT, ALTER, CREATE, DROP, UNDROP TABLE, TRUNCATE, OPTIMIZE, BACKUP, KILL QUERY, KILL TRANSACTION, MOVE PARTITION BETWEEN SHARDS, ACCESS MANAGEMENT, NAMED COLLECTION CONTROL, SYSTEM, dictGet, INTROSPECTION, SOURCES ON *.* WITH GRANT OPTION. (ACCESS_DENIED)

给dbowner增加以下权限

<named_collection_control>1</named_collection_control>
<show_named_collections>1</show_named_collections>
<show_named_collections_secrets>1</show_named_collections_secrets>

重启 ClickHouse 后再执行, 就能授权成功

:) GRANT ALL ON *.* TO dbroot WITH GRANT OPTION;
GRANT ALL ON *.* TO dbroot WITH GRANT OPTION
Query id: f4eaa3ce-8182-4717-9270-ce2e95eb2b88
Ok.
0 rows in set. Elapsed: 0.004 sec.

这时候, 就可以用 dbroot / root1234 登录 ClickHouse 了

连接

使用 clickhouse-client

clickhouse-client --user [user] --password [password]

使用 Tabix

用Firefox访问 http://dash.tabix.io, Chrome貌似不行, 会报 CORS 错误

填写服务器地址, 默认为 http://[server_ip]:8123, 用户 default, 口令为空

使用 DBeaver

服务器地址, 默认为 http://[server_ip]:8123, 用户 default, 口令为空

常用管理命令

创建数据库

CREATE DATABASE my_db;

创建表

CREATE TABLE my_db.my_table (id UInt64, column1 String) ENGINE = MergeTree() ORDER BY id;

创建用户

CREATE USER my_user IDENTIFIED BY 'password';

授予权限

# my_db下所有表的 ALTER 权限
GRANT ALTER ON my_db.* WITH GRANT OPTION; # my_db下my_table表的 ALTER 权限
GRANT ALTER ON my_db.my_table TO my_user; # 多个权限
GRANT SELECT, ALTER COLUMN ON my_db.my_table TO my_user WITH GRANT OPTION;

权限树

├── ALTER (only for table and view)/
│ ├── ALTER TABLE/
│ │ ├── ALTER UPDATE
│ │ ├── ALTER DELETE
│ │ ├── ALTER COLUMN/
│ │ │ ├── ALTER ADD COLUMN
│ │ │ ├── ALTER DROP COLUMN
│ │ │ ├── ALTER MODIFY COLUMN
│ │ │ ├── ALTER COMMENT COLUMN
│ │ │ ├── ALTER CLEAR COLUMN
│ │ │ └── ALTER RENAME COLUMN
│ │ ├── ALTER INDEX/
│ │ │ ├── ALTER ORDER BY
│ │ │ ├── ALTER SAMPLE BY
│ │ │ ├── ALTER ADD INDEX
│ │ │ ├── ALTER DROP INDEX
│ │ │ ├── ALTER MATERIALIZE INDEX
│ │ │ └── ALTER CLEAR INDEX
│ │ ├── ALTER CONSTRAINT/
│ │ │ ├── ALTER ADD CONSTRAINT
│ │ │ └── ALTER DROP CONSTRAINT
│ │ ├── ALTER TTL/
│ │ │ └── ALTER MATERIALIZE TTL
│ │ ├── ALTER SETTINGS
│ │ ├── ALTER MOVE PARTITION
│ │ ├── ALTER FETCH PARTITION
│ │ └── ALTER FREEZE PARTITION
│ └── ALTER LIVE VIEW/
│ ├── ALTER LIVE VIEW REFRESH
│ └── ALTER LIVE VIEW MODIFY QUERY
├── ALTER DATABASE
├── ALTER USER
├── ALTER ROLE
├── ALTER QUOTA
├── ALTER [ROW] POLICY
└── ALTER [SETTINGS] PROFILE

查看权限

SHOW GRANTS FOR  my_user;

可以看下只开了access_management的 default 和完整权限的 dbroot 的权限差别

:) show grants for dbroot;
┌─GRANTS FOR dbroot────────────────────────────┐
│ GRANT ALL ON *.* TO dbroot WITH GRANT OPTION │
└──────────────────────────────────────────────┘ :) show grants for default;
┌─GRANTS FOR default─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ GRANT SHOW, SELECT, INSERT, ALTER, CREATE, DROP, UNDROP TABLE, TRUNCATE, OPTIMIZE, BACKUP, KILL QUERY, KILL TRANSACTION, MOVE PARTITION BETWEEN SHARDS, SYSTEM, dictGet, INTROSPECTION, SOURCES, CLUSTER ON *.* TO default │
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

取消权限

REVOKE ALTER COLUMN ON my_db.my_table FROM my_user;

相关链接

ClickHouse笔记: Ubuntu/Centos下的安装, 配置和用户管理的更多相关文章

  1. centOS下yum安装配置samba

     centOS下yum安装配置samba 2010-03-29 15:46:00 标签:samba yum centOS 安装 休闲 注意:本文的原则是只将文件共享应用于内网服务器,并让将要被共享的目 ...

  2. CentOS下Redisserver安装配置

    1.CentOS 6.6下Redis安装配置记录 2.CentOS下Redisserver安装配置

  3. [转帖]CentOS下iRedMail安装配置

    CentOS下iRedMail安装配置 中文名为艾瑞得邮件,由 rhms 项目更名而来.是针对 Linux 设计的邮件服务器解决方案,是在操作系统安装好后使用的一套 shell 脚本,用于快速部署一套 ...

  4. Redis 对比 Memcached 并在 CentOS 下进行安装配置

    了解一下 Redis Redis 是一个开源.支持网络.基于内存.键值对的 Key-Value 数据库,使用 ANSI C 编写,并提供多种语言的 API ,它几乎没有上手难度,只需要几分钟我们就能完 ...

  5. hadoop在CentOS下的安装配置

    版本:CentOS-6.8-x86_64-minimal,hadoop2.6.4,jdk1.7.0 首先把jdk.hadoop压缩包下载发送到CentOS下并解压 下载发送不多赘述,解压命令tar - ...

  6. Ubuntu 16下单机安装配置zookeeper和kafka

    网上其他的没有一个能直接照做完成的,我这个也是看了些帖子,整出来的怕以后忘记 建议连接工具:Bitvise SSH Client 一.安装配置zookeeper 下载zookeeper 3.4.13: ...

  7. CentOS下Redis安装配置小结

    Redis是REmote DIctionary Server的缩写. 是一个使用 C 语言写成的,开源的 key-value 非关系型数据库.跟memcached类似,不过数据可以持久化. Redis ...

  8. centos下 redis安装配置及简单测试

    1:安装redis(使用的的环境是centos6.7 redis-2.6.14) 将redis-2.6.14.tar.gz文件拷贝到/usr/local/src 目录下 解压文件  tar zxvf ...

  9. Centos 下mysql安装配置

    一.编译安装MySQL前的准备工作 安装编译源码所需的工具和库 yum install gcc gcc-c++ ncurses-devel perl 安装cmake,从http://www.cmake ...

  10. CentOS下NTP安装配置

      安装yum install ntp 配置文件 /etc/ntp.confrestrict default kod nomodifynotrap nopeer noqueryrestrict -6 ...

随机推荐

  1. For循环用法-打印乘法表

      for循环可以遍历某一对象(遍历:通俗点说,就是把这个循环中的第一个元素到最后一个元素依次访问一次).for循环的结构如下 具体例子打印乘法表: #打印乘法表: for i in range(1, ...

  2. 谈恋爱要做什么事?基于auto.js自动发早安给女朋友

    谈恋爱要做什么事?除了用心之外,每天早安晚安必然是少不了的.但是每天都发免不了会忘, 为了避免遗忘,引起不必要的尴尬,我们可以做个自动化脚本来做这件事. 1 auto.js 是什么? Auto.JS是 ...

  3. RPA的概念和优势

    大多数人每天都会使用到一些机器人流程自动化的工具,例如读取邮件和系统,计算.生成文件和报告.而在未来,那些你不想做的枯燥的工作,也许真的可以不做了,重复化.标准化的工作都可以让机器人帮你完成.想必此刻 ...

  4. Java Swing的练习感悟

    感悟心得 这还是我第一次使用Java Swing写代码呢,直接就是趣味性拉满! 在相关的界面代码的基础上,在必要的位置嵌入Java代码,就可以很好的实现啦! 简单的嘞! (有兴趣的各位可以选择去浅浅地 ...

  5. 关于js通过修改行内样式来修改元素样式

    关于js通过修改行内样式来修改元素样式 1.当我们通过使用js来修改html元素的样式时,使用的方法是为元素添加行内样式, 此时的js样式是生效的,因为行内样式优先级高于类名 2.如果已有同属性的行内 ...

  6. 马志强:语音识别技术研究进展和应用落地分享丨RTC Dev Meetup

    本文内容源自「RTC Dev Meetup 丨语音处理在实时互动领域的技术实践和应用]的演讲分享,分享讲师为寰语科技语音识别研究主管马志强. 01 语音识别技术现状 1.语音成为万物互联时代人机交互关 ...

  7. 利用selenium爬取前程无忧招聘数据

    1.背景介绍 selenium通过驱动浏览器,模拟浏览器的操作,进而爬取数据.此外,还需要安装浏览器驱动,相关步骤自行解决. 2.导入库 import csv import random import ...

  8. flutter ui---->一些类QQ的实现

    整理一下比较有意思的类QQ的UI实现.Nothing that has meaning is easy. Easy doesn't enter into grown-up life. darken t ...

  9. 用ACDSee查看Office文档?No!有中文解决方案吗?暂未发现!

    看图软件选择 用过不少看图软件,20年前就觉得ACDSee实在太好用了,界面漂亮.速度快.格式多.体积小! 后来图像格式越来越丰富,ACDSee版本也越来越新,体积越来越大. 看图软件也越来越繁杂,免 ...

  10. 手动实现一个call bind

    一.call的实现(apply类似) //完成版 Function.prototype.setCall = function (obj){ var object = obj || window let ...