Clickhouse 23.8.9.54 部署安装
ClickHouse 是一个开源的列式数据库管理系统(DBMS),专为高性能的在线分析处理(OLAP)而设计。它由 Yandex 于 2016 年开源,专门应对需要处理大量数据并进行快速分析查询的场景。ClickHouse 最显著的特性是其列式存储架构,使得它在处理大数据集时,具有极快的查询速度和高效的资源利用率。
ClickHouse 的关键特点:
- 列式存储:
- 数据按列存储,而不是按行存储。列式存储能够在查询时只读取所需的列,大大减少了 I/O 开销,特别适合执行复杂的分析查询。
- 高性能查询:
- ClickHouse 针对大规模数据集进行了优化,可以在极短的时间内返回复杂的聚合查询结果。它能够处理包含数十亿到数万亿行的数据,常用于实时分析场景。
- 数据压缩:
- ClickHouse 内置了高效的压缩算法,通过将数据进行有效压缩,节省存储空间,并在数据读取时进行解压。数据压缩与列式存储结合,进一步提升查询性能。
- 支持实时数据插入和查询:
- ClickHouse 可以在数据不断更新的情况下进行实时查询,非常适合需要实时监控、日志分析等场景。
- 分布式与水平扩展:
- ClickHouse 支持大规模分布式部署,通过水平扩展集群来处理更多数据。它的架构能够轻松扩展到上千个节点,并保持高性能。
- 支持标准 SQL:
- ClickHouse 支持标准 SQL 语法,这使得熟悉 SQL 的用户可以轻松上手。它还扩展了 SQL 语法来支持特定的分析需求,如超大数据集的聚合查询和复杂计算。
- 数据的近实时查询:
- ClickHouse 提供近实时的查询能力,在处理日志、监控等实时数据流时非常高效。它常用于广告分析、网站流量监控、用户行为分析等领域。
- 丰富的聚合函数和分析功能:
- ClickHouse 提供了丰富的聚合和分析函数,如
sum()
,avg()
,min()
,max()
,group by
等。它还支持窗口函数、分组函数、甚至时间序列分析功能。
- ClickHouse 提供了丰富的聚合和分析函数,如
- 可靠性与高可用性:
- ClickHouse 支持复制和故障转移机制,能够保证在某些节点失效的情况下,数据仍然可以正常读取,并保持高可用性。
以下是 ClickHouse 与其他常见数据库(如 MySQL、PostgreSQL、MongoDB)之间的优缺点对比表格:
特性 | ClickHouse | MySQL | PostgreSQL | MongoDB |
---|---|---|---|---|
数据模型 | 列式数据库,适用于分析型和大数据查询 | 行式数据库,OLTP(在线事务处理) | 行式数据库,支持 OLTP 和 OLAP | 文档数据库,基于 JSON-like 文档 |
查询性能 | 高速分析查询,优化了大规模数据的读取速度 | 查询速度较慢,适合小数据量或事务处理 | 查询性能较好,支持复杂查询和事务 | 对简单查询性能较好,大数据时性能会下降 |
适用场景 | 数据仓库、大数据分析、实时分析 | 传统关系型数据库,事务处理 | 复杂查询和大规模数据处理 | 非结构化数据存储,分布式存储 |
事务支持 | 不支持 ACID 事务,主要用于分析性查询 | 支持 ACID 事务 | 完整支持 ACID 事务 | 支持事务但性能不如关系型数据库 |
水平扩展 | 优秀的水平扩展能力,适合大规模分布式部署 | 水平扩展能力有限,主要依赖主从复制 | 支持水平扩展,但配置复杂 | 优秀的水平扩展,天然分布式设计 |
压缩 | 内置强大的压缩算法,优化存储空间 | 数据压缩能力较弱 | 支持压缩,但并非默认开启 | 支持压缩,但压缩率不如 ClickHouse |
索引支持 | 使用稀疏索引,优化了大数据的查询性能 | 支持 B-tree 和全文索引 | 支持 B-tree、GIST、GIN 等多种索引类型 | 支持索引,但复杂查询时索引作用有限 |
写入性能 | 写入性能高,批量写入速度非常快 | 单次写入性能较好,但批量写入不如 ClickHouse | 写入性能中等,事务处理时性能下降 | 写入性能较高,特别是无模式数据时 |
查询语言 | 类似 SQL,支持标准 SQL 查询语法 | 标准 SQL 语法 | 支持标准 SQL,扩展性强 | 查询语言为 MongoDB 的 BSON 语法 |
备份与恢复 | 支持部分备份和复制,但操作稍复杂 | 备份和恢复机制成熟,操作简便 | 备份和恢复机制完善,支持 WAL 机制 | 支持备份与恢复,但操作复杂 |
实时性 | 支持实时数据分析和查询 | 实时查询性能一般 | 实时查询性能较好 | 支持实时性,但复杂查询性能下降 |
社区与支持 | 社区活跃,较多企业级支持和文档 | 社区庞大,成熟的企业级支持 | 社区强大,拥有大量扩展和插件 | 社区活跃,支持丰富的开源工具和文档 |
扩展性 | 插件较少,主要聚焦于大数据分析 | 拥有大量插件,易于集成第三方工具 | 插件与扩展丰富,支持多种场景 | 支持多种扩展,易与其他分布式工具结合 |
存储要求 | 存储占用小,尤其适合大规模数据集 | 对存储要求较高,数据量大时存储成本增加 | 中等存储占用 | 存储要求较高,尤其是大规模数据集 |
注:部署Clickhouse数据库通常要依赖于zookeeper来管理分布式集群中的数据复制、分片、协调等任务。
由于zk配置安装相对简单,这里只提供ZooKeeper 配置文件(zoo.cfg)相关建议配置:
一、zookeeper相关配置:
1.编辑ZooKeeper 配置文件(zoo.cfg)
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/var/lib/zookeeper
clientPort=2181
server.1=zookeeper1-hostname-or-ip:2888:3888
server.2=zookeeper2-hostname-or-ip:2888:3888
server.3=zookeeper3-hostname-or-ip:2888:3888
- tickTime:ZooKeeper 服务器之间或客户端与服务器之间的心跳时间间隔,单位为毫秒。这里设置为 2000 毫秒(2 秒)。
- initLimit:ZooKeeper 集群启动时,Follower 节点允许与 Leader 节点同步的时间限制。如果超过这个时间,Follower 节点会被认为不可用。
- syncLimit:Follower 节点与 Leader 节点之间保持同步的最大延迟时间。
- dataDir:ZooKeeper 保存快照文件的目录,存储节点数据。
- clientPort:客户端连接 ZooKeeper 的端口,通常为
2181
。 - server.N:定义 ZooKeeper 集群的节点信息,
N
是节点编号,后面的 IP 地址或主机名、端口2888
用于节点间通信,端口3888
用于选举 Leader。
2.为每个 ZooKeeper 节点指定 myid 文件
在每个 ZooKeeper 节点的 dataDir
目录下,创建一个名为 myid
的文件,文件中存放该节点的 ID,对应于 zoo.cfg
中的 server.N
号。例如,如果当前节点在 zoo.cfg
中配置为 server.1
,则 myid
文件内容为:
1
3. 启动 ZooKeeper
配置完成后,在每个 ZooKeeper 节点上启动 ZooKeeper 服务:
./zkServer.sh start
使用以下命令检查 ZooKeeper 集群状态:
./zkCli.sh status
二、Clickhouse数据库的安装部署:
1.下载Clickhouse23.8.9.54离线安装包
下载链接1:packages.clickhouse.com/tgz/stable/
下载链接2:https://github.com/ClickHouse/ClickHouse/releases
注:建议使用第二个下载链接,但需使用加速器或者科学上网!
2.配置服务器的主机映射
- 以下演示两个节点的Clickhouse分片集群配置,主机配置如下:
IP | Hostname | 内存 | 核心 | 所需磁盘空间 |
---|---|---|---|---|
192.168.116.90 | clickhouse01 | 32G | 6个 | 100G |
192.168.116.91 | clickhouse02 | 32G | 6个 | 100G |
-
两台主机分别配置映射关系:
echo "192.168.116.90 clickhouse01" >> /etc/hosts echo "192.168.116.91 clickhouse02" >> /etc/hosts
- 本地域名解析让本地机器通过主机名来访问相应的服务器,而无需记住或手动输入 IP 地址。
-
多个节点主机名不能重复,如果主机名一样,需要修改主机名,一定要配置 不然集群会有问题!
特别注意:Zookeeper 版本 需要 在 3.4.6 以上,并且不要跟clickhouse部署在同一个服务器,要部署在一个 cpu比较稳定得服务器, 当clickhouse使用cpu过高时,服务器短时间内会卡顿,ZK会受到影响导致CK数据混乱。
3.安装客户端
1)配置Clickhouse用户:
useradd clickhouse
passwd clickhouse
vi /etc/sudoers
%wheel ALL=(ALL) ALL
%clickhouse ALL=(ALL) ALL
2)解压安装包并执行安装脚本:
tar -xzvf "clickhouse-common-static-23.8.9.54-amd64.tgz"
sudo "clickhouse-common-static-23.8.9.54/install/doinst.sh"
tar -xzvf "clickhouse-common-static-dbg-23.8.9.54-amd64.tgz"
sudo "clickhouse-common-static-dbg-23.8.9.54/install/doinst.sh"
tar -xzvf "clickhouse-server-23.8.9.54-amd64.tgz"
sudo "clickhouse-server-23.8.9.54/install/doinst.sh"
执行clickhouse-server 安装脚本日志如下,37行为设置default用户的密码:
ClickHouse binary is already located at /usr/bin/clickhouse
Creating symlink /usr/bin/clickhouse-server to /usr/bin/clickhouse.
Creating symlink /usr/bin/clickhouse-client to /usr/bin/clickhouse.
Creating symlink /usr/bin/clickhouse-local to /usr/bin/clickhouse.
Creating symlink /usr/bin/clickhouse-benchmark to /usr/bin/clickhouse.
Creating symlink /usr/bin/clickhouse-copier to /usr/bin/clickhouse.
Creating symlink /usr/bin/clickhouse-obfuscator to /usr/bin/clickhouse.
Creating symlink /usr/bin/clickhouse-git-import to /usr/bin/clickhouse.
Creating symlink /usr/bin/clickhouse-compressor to /usr/bin/clickhouse.
Creating symlink /usr/bin/clickhouse-format to /usr/bin/clickhouse.
Symlink /usr/bin/clickhouse-extract-from-config already exists but it points to /root/clickhouse. Will replace the old symlink to /usr/bin/clickhouse.
Creating symlink /usr/bin/clickhouse-extract-from-config to /usr/bin/clickhouse.
Creating symlink /usr/bin/clickhouse-keeper to /usr/bin/clickhouse.
Creating symlink /usr/bin/clickhouse-keeper-converter to /usr/bin/clickhouse.
Creating clickhouse group if it does not exist.
groupadd -r clickhouse
Creating clickhouse user if it does not exist.
useradd -r --shell /bin/false --home-dir /nonexistent -g clickhouse clickhouse
Will set ulimits for clickhouse user in /etc/security/limits.d/clickhouse.conf.
Creating config directory /etc/clickhouse-server.
Creating config directory /etc/clickhouse-server/config.d that is used for tweaks of main server configuration.
Creating config directory /etc/clickhouse-server/users.d that is used for tweaks of users configuration.
Data path configuration override is saved to file /etc/clickhouse-server/config.d/data-paths.xml.
Log path configuration override is saved to file /etc/clickhouse-server/config.d/logger.xml.
User directory path configuration override is saved to file /etc/clickhouse-server/config.d/user-directories.xml.
OpenSSL path configuration override is saved to file /etc/clickhouse-server/config.d/openssl.xml.
Creating log directory /var/log/clickhouse-server.
Creating data directory /var/lib/clickhouse.
Creating pid directory /var/run/clickhouse-server.
chown -R clickhouse:clickhouse ‘/var/log/clickhouse-server’
chown -R clickhouse:clickhouse ‘/var/run/clickhouse-server’
chown clickhouse:clickhouse ‘/var/lib/clickhouse’
groupadd -r clickhouse-bridge
useradd -r --shell /bin/false --home-dir /nonexistent -g clickhouse-bridge clickhouse-bridge
chown -R clickhouse-bridge:clickhouse-bridge ‘/usr/bin/clickhouse-odbc-bridge’
chown -R clickhouse-bridge:clickhouse-bridge ‘/usr/bin/clickhouse-library-bridge’
Enter password for default user: ----此处设置default用户的密码
Password for default user is saved in file /etc/clickhouse-server/users.d/default-password.xml.
Setting capabilities for clickhouse binary. This is optional.
Cannot set ‘net_admin’ or ‘ipc_lock’ or ‘sys_nice’ or ‘net_bind_service’ capability for clickhouse binary. This is optional. Taskstats accounting will be disabled. To enable taskstats accounting you may add the required capability later manually.
Allow server to accept connections from the network (default is localhost only), [y/N]: y
The choice is saved in file /etc/clickhouse-server/config.d/listen.xml.
chown -R clickhouse:clickhouse ‘/etc/clickhouse-server’
ClickHouse has been successfully installed.
Start clickhouse-server with:
sudo clickhouse start
Start clickhouse-client with:
clickhouse-client --password
4.安装Client工具:
tar -xzvf "clickhouse-client-23.8.9.54-amd64.tgz"
sudo "clickhouse-client-23.8.9.54/install/doinst.sh"
5.有些版本需要建立证书,否则以ckickhouse用户无法启动。
报错信息如下:
<Error> CertificateReloader: Cannot obtain modification time for certificate file /etc/clickhouse-server/server.crt, skipping update. errno: 2, strerror: No such file or directory
如出现以上报错,root执行
openssl req -subj "/CN=localhost" -new -newkey rsa:2048 -days 3650 -nodes -x509 -keyout /etc/clickhouse-server/server.key -out /etc/clickhouse-server/server.crt
openssl dhparam -out /etc/clickhouse-server/dhparam.pem 4096
第二个命令执行时间较长 耐心等待
6.配置config.xml
vim /etc/clickhouse-server/config.xml
-
下面几行加在 第一个 <remote_servers>之上,否则无法使metrika.xml中集群信息生效:
- 进入vim界面之后按ESC输入:/remote_server可快速匹配,在 <remote_servers>上方添加即可:
<zookeeper incl="zookeeper-servers" optional="true" /> <include_from>/etc/clickhouse-server/config.d/metrika.xml</include_from> <remote_servers incl="clickhouse_remote_servers" /> <macros incl="macros" optional="true" />
- 添加完类似这样:
<zookeeper incl="zookeeper-servers" optional="true" /> <include_from>/etc/clickhouse-server/config.d/metrika.xml</include_from> <remote_servers incl="clickhouse_remote_servers" /> <macros incl="macros" optional="true" /> <remote_servers> <!-- Test only shard config for testing distributed storage --> <default>
7.修改监听地址
vim /etc/clickhouse-server/config.d/listen.xml
-
IPv4:
<clickhouse> <listen_host>0.0.0.0</listen_host> </clickhouse>
-
IPv6:
<clickhouse> <listen_host>::</listen_host> </clickhouse>
8.配置储存路径
tee /etc/clickhouse-server/config.d/data-paths.xml << 'EOF'
<clickhouse>
<path>/var/lib/clickhouse</path>
<tmp_path>/var/lib/clickhouse/tmp</tmp_path>
<user_files_path>/var/lib/clickhouse/user_files</user_files_path>
<format_schema_path>/var/lib/clickhouse/format_schemas</format_schema_path>
</clickhouse>
EOF
9.配置集群信息
编写配置集群信息:
vim /etc/clickhouse-server/config.d/metrika.xml
-
多节点:
<?xml version="1.0"?> <yandex> <zookeeper-servers> <node index="1"> <host>192.168.0.10</host> <port>2181</port> </node> <node index="2"> <host>192.168.0.11</host> <port>2181</port> </node> <node index="3"> <host>192.168.0.12</host> <port>2181</port> </node> </zookeeper-servers> <remote_servers> <zz_cluster> <!-- 集群名称--> <shard> <!--集群的第一个分片--> <internal_replication>true</internal_replication> <!--该分片的第一个副本--> <replica> <host>192.168.116.90</host> <port>9000</port> <user>default</user> <password>xxxxxxx</password> </replica> <!--该分片的第二个副本--> <replica> <host>192.168.116.91</host> <port>9000</port> <user>default</user> <password>xxxxxxx</password> </replica> </shard> <shard> <!--集群的第二个分片--> <internal_replication>true</internal_replication> <!--该分片的第一个副本--> <replica> <host>192.168.116.92</host> <port>9000</port> <user>default</user> <password>xxxxxxx</password> </replica> <!--该分片的第二个副本--> <replica> <host>192.168.116.93</host> <port>9000</port> <user>default</user> <password>xxxxxxx</password> </replica> </shard> <shard> <!--集群的第三个分片--> <internal_replication>true</internal_replication> <!--该分片的第一个副本--> <replica> <host>192.168.116.94</host> <port>9000</port> <user>default</user> <password>xxxxxxx</password> </replica> <!--该分片的第二个副本--> <replica> <host>192.168.116.95</host> <port>9000</port> <user>default</user> <password>xxxxxxx</password> </replica> </shard> </zz_cluster> </remote_servers> <macros> <shard>01</shard> <!--根据规划的分片名来设置,同一个分片的主副实例的分片名要设置成相同的。--> <replica>rep_90_91</replica> <!--不同的实例放的副本名称不能一样!!建议主机名或ip关键字,如:此副本名称rep_90_91对应192.168.116.91主机,如果是192.168.116.90主机可以写成rep_91_90。--> </macros> </yandex>
- xxxxxxx部分修改为自己安装时的实际密码
- 每一个shard代表一个分片,建议一个分片配置两个主机,一个主一个备
- xxxxxx每个节点的replica配置不同,可以根据该配置文件规则做出修改
-
双节点:
<?xml version="1.0"?> <yandex> <zookeeper-servers> <node index="1"> <host>192.168.0.10</host> <port>2181</port> </node> <node index="2"> <host>192.168.0.11</host> <port>2181</port> </node> <node index="3"> <host>192.168.0.12</host> <port>2181</port> </node> </zookeeper-servers> <clickhouse_remote_servers> <zz_cluster> <!-- 集群名称--> <shard> <!--集群的第三个分片--> <internal_replication>true</internal_replication> <!--该分片的第一个副本--> <replica> <host>192.168.116.90</host> <port>9000</port> <user>default</user> <password>xxxxxxx</password> </replica> <!--该分片的第二个副本--> <replica> <host>192.168.116.91</host> <port>9000</port> <user>default</user> <password>xxxxxxx</password> </replica> </shard> </zz_cluster> </clickhouse_remote_servers> <macros> <shard>01</shard> <!--根据规划的分片名来设置,同一个分片的主副实例的分片名要设置成相同的。--> <replica>rep_90_91</replica> <!--不同的实例放的副本名称不能一样!!建议主机名或ip关键字,如:此副本名称rep_90_91对应192.168.116.91主机,如果是192.168.116.90主机可以写成rep_91_90。--> </macros> </yandex>
- 原理和多节点的配置相同,这里不再赘述
10.优化配置
配置users.xml:
vim /etc/clickhouse-server/config.d/users.xml
-
32G内存 8核cpu 服务器配置样例 :
<profiles> <default> <max_memory_usage>28000000000</max_memory_usage> <background_pool_size>16</background_pool_size> <max_bytes_before_external_group_by>14000000000</max_bytes_before_external_group_by> <max_bytes_before_external_sort>23000000000</max_bytes_before_external_sort> <background_schedule_pool_size>16</background_schedule_pool_size> <background_distributed_schedule_pool_size>16</background_distributed_schedule_pool_size> </default> <readonly> <readonly>1</readonly> </readonly> </profiles>
-
128G 内存 16核推荐配置:
<profiles> <default> <max_memory_usage>120000000000</max_memory_usage> <background_pool_size>32</background_pool_size> <max_bytes_before_external_group_by>100000000000</max_bytes_before_external_group_by> <max_bytes_before_external_sort>100000000000</max_bytes_before_external_sort> <background_schedule_pool_size>32</background_schedule_pool_size> <background_distributed_schedule_pool_size>32</background_distributed_schedule_pool_size> </default> <readonly> <readonly>1</readonly> </readonly> </profiles>
-
参数解答:
- max_memory_usage:内存使用优化 根据内存情况配置,以字节为单位。根据clickhouse所在服务器内存配置,需要给服务器留一些内存,可以查看剩余内存后配置 ,单位字节。
- backgroud_pool_size :cpu优化 为服务器CPU核数*2
- max_bytes_before_external_group by:一般按照 max_memory_usage 的一半设置内存,当 group 使用内存超过阈值后会刷新到磁盘进行。因为 clickhouse 聚合分两个阶段:查询并及建立中间数据、合并中间数据
- max_bytes_before_external_sort:当 order by 已使用 max_bytes_before_external_sort 内存就进行溢写磁盘(基于磁盘排序),如果不设置该值,那么当内存不够时直接抛错,设置了该值 order by 可以正常完成,但是速度相对存内存来说肯定要慢 一般为max_memory_usage 配置的80%
11.验证Clickhouse
启动Clickhouse数据库:
clickhouse start
启动时出现 :
为正常现象,等待即可
停止clickhouse数据库:
clickhouse stop
测试连接数据库
客户端连接验证:
clickhouse-client --password xxxx # 填写你的密码
远程登录示例:
clickhouse-client -h 192.168.116.90 --port 9000 -u default --password xxxx -m # 填写你的密码
查看集群信息,登陆客户端后执行:
select * from system.clusters;
注:若集群无法实现备份数据库复制,则可以查看防火墙是否放通,并添加相应的规则(两个Clickhouse节点都需要做放通):
firewall-cmd --list-all
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="xx.xx.xx.xx" port protocol="tcp" port="8123" accept'
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="xx.xx.xx.xx" port protocol="tcp" port="9000" accept'
firewall-cmd --reload
标签:bin,usr,Creating,9.54,server,etc,Clickhouse,clickhouse,23.8
From: https://blog.csdn.net/qq_69174109/article/details/142978861