clickhouse基础概念及集群部署

一. 简述:

ClickHouse 是一款高性能列式存储数据库,专为海量数据的实时分析场景设计。它以极致的查询速度、高效的存储利用率和强大的并行处理能力著称,广泛应用于日志分析、用户行为分析、业务监控等大数据分析领域。

  1. 核心特性:

a). 列式存储:传统行式数据库(如 MySQL)按行存储数据,适合增删改查;ClickHouse 按列存储,同一列数据连续存放,可大幅减少 IO 量(仅读取查询所需列),且相同类型数据压缩率更高(通常比行式存储高 5-10 倍)。

b). 高效的查询性能:基于向量执行引擎,单次处理一批数据(而非单条),减少函数调用开销;查询会被拆分为多个子任务,在多个 CPU 核心上并行执行;内置大量优化的数学、字符串等函数,支持复杂计算高效执行。

c). 支持实时写入更新:提供 INSERT 语句支持高吞吐写入(每秒数十万条),数据写入后立即可见。

d). 丰富的表引擎:表引擎决定数据存储方式、索引策略和查询特性,核心引擎包括:

  • MergeTree:常用引擎,支持分区、排序、TTL、副本和分片,适合海量历史数据存储。

  • ReplacingMergeTree:在合并分区时自动去重,适合处理重复数据。

  • SummingMergeTree:合并时自动聚合数据,适合预计算场景。

  • Memory:内存表,查询极快但数据不持久,适合临时计算。

  1. 分布式架构支持:

原生支持集群部署,通过分片(数据拆分到不同节点)和副本(数据冗余备份)实现高可用和水平扩展,用户无需关心底层存储分布。

  1. 使用场景:

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

    <listen_host>0.0.0.0</listen_host>

    <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>


      <networks>
      <ip>::/0</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**

《 运维经纬 》