一. 简述:
ClickHouse 是一款高性能列式存储数据库,专为海量数据的实时分析场景设计。它以极致的查询速度、高效的存储利用率和强大的并行处理能力著称,广泛应用于日志分析、用户行为分析、业务监控等大数据分析领域。
- 核心特性:
a). 列式存储:传统行式数据库(如 MySQL)按行存储数据,适合增删改查;ClickHouse 按列存储,同一列数据连续存放,可大幅减少 IO 量(仅读取查询所需列),且相同类型数据压缩率更高(通常比行式存储高 5-10 倍)。
b). 高效的查询性能:基于向量执行引擎,单次处理一批数据(而非单条),减少函数调用开销;查询会被拆分为多个子任务,在多个 CPU 核心上并行执行;内置大量优化的数学、字符串等函数,支持复杂计算高效执行。
c). 支持实时写入更新:提供 INSERT
语句支持高吞吐写入(每秒数十万条),数据写入后立即可见。
d). 丰富的表引擎:表引擎决定数据存储方式、索引策略和查询特性,核心引擎包括:
-
MergeTree
:常用引擎,支持分区、排序、TTL、副本和分片,适合海量历史数据存储。 -
ReplacingMergeTree
:在合并分区时自动去重,适合处理重复数据。 -
SummingMergeTree
:合并时自动聚合数据,适合预计算场景。 -
Memory
:内存表,查询极快但数据不持久,适合临时计算。
- 分布式架构支持:
原生支持集群部署,通过分片(数据拆分到不同节点)和副本(数据冗余备份)实现高可用和水平扩展,用户无需关心底层存储分布。
- 使用场景:
a). 日志与指标分析:如服务器日志、应用程序埋点数据的实时查询。
b). 用户行为分析:分析用户在网站 / App 上的点击、浏览等行为,生成漏斗图、留存率等报表。
c). 业务监控与仪表盘:实时监控订单量、支付成功率等关键指标,支持毫秒级响应的仪表盘展示。
d). 时序数据存储:存储物联网设备的传感器数据(如温度、湿度),支持按时间范围快速查询。
三. 服务部署:
-
检查当前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 -
安装部署:
#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 -
配置clickhouse:/etc/clickhouse-server/config.xml
#vim /etc/clickhouse-server/config.xml
<listen_host>0.0.0.0</listen_host>
<path>/var/lib/clickhouse/</path>
<log>/var/log/clickhouse-server/clickhouse-server.log</log>
#设置密码
-
生成加密密码:
echo -n "your_password" | sha256sum | awk '{print $1}' -
编辑配置
#vim /etc/clickhouse-server/users.xml
<users>
<default>
<password>your_password</password>
<networks>
<ip>::/0</ip>
</networks>
</default>
</users>
-
-
启动服务:
启动服务
sudo systemctl start clickhouse-server
-
功能验证:
本地连接(默认无密码)
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**
《 运维经纬 》