clickhouse基础概念及集群部署
一. 简述:
ClickHouse 是一款高性能列式存储数据库,专为海量数据的实时分析场景设计。它以极致的查询速度、高效的存储利用率和强大的并行处理能力著称,广泛应用于日志分析、用户行为分析、业务监控等大数据分析领域。
1. 核心特性:
a). 列式存储:传统行式数据库(如 MySQL)按行存储数据,适合增删改查;ClickHouse 按列存储,同一列数据连续存放,可大幅减少 IO 量(仅读取查询所需列),且相同类型数据压缩率更高(通常比行式存储高 5-10 倍)。
b). 高效的查询性能:基于向量执行引擎,单次处理一批数据(而非单条),减少函数调用开销;查询会被拆分为多个子任务,在多个 CPU 核心上并行执行;内置大量优化的数学、字符串等函数,支持复杂计算高效执行。
c). 支持实时写入更新:提供 INSERT
语句支持高吞吐写入(每秒数十万条),数据写入后立即可见。
d). 丰富的表引擎:表引擎决定数据存储方式、索引策略和查询特性,核心引擎包括:
MergeTree
:常用引擎,支持分区、排序、TTL、副本和分片,适合海量历史数据存储。ReplacingMergeTree
:在合并分区时自动去重,适合处理重复数据。SummingMergeTree
:合并时自动聚合数据,适合预计算场景。Memory
:内存表,查询极快但数据不持久,适合临时计算。
2. 分布式架构支持:
原生支持集群部署,通过分片(数据拆分到不同节点)和副本(数据冗余备份)实现高可用和水平扩展,用户无需关心底层存储分布。
3. 使用场景:
a). 日志与指标分析:如服务器日志、应用程序埋点数据的实时查询。
b). 用户行为分析:分析用户在网站 / App 上的点击、浏览等行为,生成漏斗图、留存率等报表。
c). 业务监控与仪表盘:实时监控订单量、支付成功率等关键指标,支持毫秒级响应的仪表盘展示。
d). 时序数据存储:存储物联网设备的传感器数据(如温度、湿度),支持按时间范围快速查询。
三. 服务部署:
1. 检查当前CPU是否支持SSE 4.2:
#grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"
SSE 4.2 supported
2. 安装部署:
#yum install yum-utils
#rpm --import https://repo.clickhouse.tech/CLICKHOUSE-KEY.GPG
#yum-config-manager --add-repo https://repo.clickhouse.tech/rpm/stable/x86_64
#yum install clickhouse-server clickhouse-client(当无法联网时,可通过https://repo.yandex.ru/clickhouse/rpm/stable/x86_64/下载,只需要clickhouse-client,clickhouse-server,clickhouse-common-static三个包)
3. 配置clickhouse:/etc/clickhouse-server/config.xml
#vim /etc/clickhouse-server/config.xml
<!-- 监听地址,默认只允许本地访问,改为0.0.0.0允许外部访问 -->
<listen_host>0.0.0.0</listen_host><!-- 数据存储路径(默认在/var/lib/clickhouse/) -->
<path>/var/lib/clickhouse/</path><!-- 日志路径 -->
<log>/var/log/clickhouse-server/clickhouse-server.log</log>#设置密码
1. 生成加密密码:
echo -n "your_password" | sha256sum | awk '{print $1}'2. 编辑配置
#vim /etc/clickhouse-server/users.xml
<users><default><!-- 明文密码(测试环境) --><password>your_password</password><!-- 或加密密码(生产环境,通过clickhouse-client生成) --><!-- <password_sha256_hex>哈希值</password_sha256_hex> --><networks><ip>::/0</ip> <!-- 允许所有IP访问 --></networks></default>
</users>
4. 启动服务:
# 启动服务
sudo systemctl start clickhouse-server
5. 功能验证:
# 本地连接(默认无密码)
clickhouse-client-- 创建测试数据库
CREATE DATABASE IF NOT EXISTS test;-- 创建表
CREATE TABLE test.logs (timestamp DateTime,level String,message String) ENGINE = MergeTree() ORDER BY timestamp;-- 插入数据
INSERT INTO test.logs VALUES (now(), 'INFO', 'ClickHouse installed successfully');-- 查询数据
SELECT * FROM test.logs;
三. 关于集群部署
clickhouse 在21.12版本之前,需要依赖zookeeper进行节点协调等任务, 从21.12起,引入了clickhouse-keeper,用来替代zookeeper。 部署多个节点后,配置集群元数据:
#vim /etc/clickhouse-server/config.xml<remote_servers><my_cluster> <!-- mycluster --><shard> <!-- 分片1 --><replica><host>node1</host><port>9000</port></replica></shard><shard> <!-- 分片2 --><replica><host>node2</host><port>9000</port></replica></shard><shard> <!-- 分片2 --><replica><host>node2</host><port>9000</port></replica></shard></my_cluster>
</remote_servers>#重启所有节点,通过 SELECT * FROM system.clusters 验证集群状态。
-------------------------------------------------------------------------------------
深耕运维行业多年,擅长运维体系建设,方案落地。欢迎交流!
V: ywjw996
《 运维经纬 》