一篇文章看懂 clickhouse 集群配置

201 阅读2分钟

配置文件位置和内容

/etc/clickhouse-server/config.d/metrika.xml

<yandex>
    <zookeeper>
        <node index="1">
            <host>172.16.12.3</host>
            <port>2181</port>
        </node>
        <node index="2">
            <host>172.16.12.4</host>
            <port>2181</port>
        </node>
        <node index="3">
            <host>172.16.12.5</host>
            <port>2181</port>
        </node>
    </zookeeper>
    
    <remote_servers>
        <clickhouse-prod-cluster>
            <secret>foo</secret>
            <shard>
                <internal_replication>true</internal_replication>
                <replica>
                    <host>172.16.12.2</host>
                    <port>9000</port>
                </replica>
                <replica>
                    <host>172.16.12.3</host>
                    <port>9000</port>
                </replica>
            </shard>
            <shard>
                <internal_replication>true</internal_replication>
                <replica>
                    <host>172.16.12.4</host>
                    <port>9000</port>
                </replica>
                <replica>
                    <host>172.16.12.5</host>
                    <port>9000</port>
                </replica>
            </shard>
        </clickhouse-prod-cluster>
    </remote_servers>
</yandex>

这个配置文件 metrika.xml 是 ClickHouse 的一个配置文件,定义了与 ZooKeeper 的连接信息以及 ClickHouse 集群的设置。让我们逐步解析每个部分的含义。

ZooKeeper 配置

<zookeeper>
    <node index="1">
        <host>172.16.12.3</host>
        <port>2181</port>
    </node>
    <node index="2">
        <host>172.16.12.4</host>
        <port>2181</port>
    </node>
    <node index="3">
        <host>172.16.12.5</host>
        <port>2181</port>
    </node>
</zookeeper>
  • <zookeeper> 定义了 ClickHouse 与 ZooKeeper 集群的连接信息。ZooKeeper 在 ClickHouse 中用于协调分布式操作,特别是复制和分片管理。

  • <node> 每个 <node> 元素定义了一个 ZooKeeper 节点的主机和端口。

    • index 属性:用来标识节点的索引。
    • host 和 port:分别定义 ZooKeeper 节点的 IP 地址和端口号。

远程服务器配置

<remote_servers>
    <clickhouse-prod-cluster>
        <secret>foo</secret>
        <shard>
            <internal_replication>true</internal_replication>
            <replica>
                <host>172.16.12.2</host>
                <port>9000</port>
            </replica>
            <replica>
                <host>172.16.12.3</host>
                <port>9000</port>
            </replica>
        </shard>
        <shard>
            <internal_replication>true</internal_replication>
            <replica>
                <host>172.16.12.4</host>
                <port>9000</port>
            </replica>
            <replica>
                <host>172.16.12.5</host>
                <port>9000</port>
            </replica>
        </shard>
    </clickhouse-prod-cluster>
</remote_servers>

shard配置解释

  1. <shard>块
  • 表示一个分片(shard)。一个分片是数据的一个逻辑部分,每个分片可以存储集群中数据的一部分。
  1. <internal_replication>true</internal_replication>
  • 表示内部复制。设置为 true 时,ClickHouse 将自动管理分片之间的数据复制。也就是说,ClickHouse 将确保分片内的所有副本保持数据一致。
  1. <replica>块
  • 表示一个副本(replica)。每个分片可以有多个副本,用于数据的冗余和高可用性。
  1. <host><port>
  • 指定副本的主机和端口。每个副本在不同的主机上运行,以提供故障隔离和负载均衡。

shard配置具体含义

第一个分片

<shard>
    <internal_replication>true</internal_replication>
    <replica>
        <host>172.16.12.2</host>
        <port>9000</port>
    </replica>
    <replica>
        <host>172.16.12.3</host>
        <port>9000</port>
    </replica>
</shard>
  • 包含两个副本,分别位于主机 172.16.12.2172.16.12.3,端口号均为 9000
  • 内部复制开启,这意味着 ClickHouse 将自动确保这两个副本的数据保持一致。

第二个分片

<shard>
    <internal_replication>true</internal_replication>
    <replica>
        <host>172.16.12.4</host>
        <port>9000</port>
    </replica>
    <replica>
        <host>172.16.12.5</host>
        <port>9000</port>
    </replica>
</shard>
  • 包含两个副本,分别位于主机 172.16.12.4172.16.12.5,端口号均为 9000
  • 同样,内部复制开启,ClickHouse 将管理这两个副本的数据一致性。

集群架构总结

  • 分片(Shards) :集群包含两个分片,每个分片存储集群中部分数据。
  • 副本(Replicas) :每个分片有两个副本,用于数据冗余和高可用性。
  • 内部复制(Internal Replication) :启用内部复制功能,确保每个分片的副本数据一致。

这种配置提供了以下优点:

  • 高可用性:即使一个副本宕机,另一个副本仍然可以提供服务。
  • 故障恢复:通过数据复制,可以在副本之间进行故障恢复。
  • 负载均衡:查询可以在不同的副本之间分配,从而实现负载均衡。

这是一个典型的 ClickHouse 集群高可用配置,通过分片和副本的设计来保证数据的高可用性和查询性能。