clickhouse集群搭建

发布于:2025-02-22 ⋅ 阅读:(17) ⋅ 点赞:(0)

准备三台机器,192.168.20.7,192.168.20.8,192.168.20.10用于搭建clickhouse集群。本次搭建的集群,为三副本的,即一份数据会在三台机器上分别存储,搭建集群只是为了容灾。

1. 在192.168.20.7上操作

在clickhouse config.d目录下新建cluster.xml,内容如下

<clickhouse>
    <keeper_server>
        <tcp_port>9181</tcp_port>
        <server_id>1</server_id>
        <log_storage_path>/data/clickhouse/coordination/log</log_storage_path>                  <snapshot_storage_path>/data/clickhouse/coordination/snapshots</snapshot_storage_path>
        <coordination_settings>
            <operation_timeout_ms>10000</operation_timeout_ms>
            <session_timeout_ms>30000</session_timeout_ms>
            <raft_logs_level>trace</raft_logs_level>
        </coordination_settings>
        <raft_configuration>
            <server>
                <id>1</id>
                <hostname>192.168.20.7</hostname>
                <port>9234</port>
            </server>
            <server>
                <id>2</id>
                <hostname>192.168.20.8</hostname>
                <port>9234</port>
            </server>
            <server>
                <id>3</id>
                <hostname>192.168.20.10</hostname>
                <port>9234</port>
            </server>
        </raft_configuration>
    </keeper_server>

    <remote_servers>
        <default>
            <shard>
                <internal_replication>1</internal_replication>
                <replica>
                    <host>192.168.20.7</host>
                    <port>8124</port>
                </replica>
                <replica>
                    <host>192.168.20.8</host>
                    <port>8124</port>
                </replica>
                <replica>
                    <host>192.168.20.10</host>
                    <port>8124</port>
                </replica>
            </shard>
        </default>
    </remote_servers>

    <macros>
        <shard>1</shard>
        <replica>192.168.20.7</replica>
    </macros>

    <interserver_http_host>192.168.20.7</interserver_http_host>
</clickhouse>

2. 在192.168.20.8上操作

 

<clickhouse>
    <keeper_server>
        <tcp_port>9181</tcp_port>
        <server_id>2</server_id>
        <log_storage_path>/data/clickhouse/coordination/log</log_storage_path>                   <snapshot_storage_path>/data/clickhouse/coordination/snapshots</snapshot_storage_path>
        <coordination_settings>
            <operation_timeout_ms>10000</operation_timeout_ms>
            <session_timeout_ms>30000</session_timeout_ms>
            <raft_logs_level>trace</raft_logs_level>
        </coordination_settings>
        <raft_configuration>
            <server>
                <id>1</id>
                <hostname>192.168.20.7</hostname>
                <port>9234</port>
            </server>
            <server>
                <id>2</id>
                <hostname>192.168.20.8</hostname>
                <port>9234</port>
            </server>
            <server>
                <id>3</id>
                <hostname>192.168.20.10</hostname>
                <port>9234</port>
            </server>
        </raft_configuration>
    </keeper_server>

    <remote_servers>
        <default>
            <shard>
                <internal_replication>1</internal_replication>
                <replica>
                    <host>192.168.20.7</host>
                    <port>8124</port>
                </replica>
                <replica>
                    <host>192.168.20.8</host>
                    <port>8124</port>
                </replica>
                <replica>
                    <host>192.168.20.10</host>
                    <port>8124</port>
                </replica>
            </shard>
        </default>
    </remote_servers>

    <macros>
        <shard>1</shard>
        <replica>192.168.20.8</replica>
    </macros>

    <interserver_http_host>192.168.20.8</interserver_http_host>
</clickhouse>

修改了server_id,macros.replica、interserver_http_host三个配置项 

3. 在192.168.20.10上操作

<clickhouse>
    <keeper_server>
        <tcp_port>9181</tcp_port>
        <server_id>3</server_id>
        <log_storage_path>/data/clickhouse/coordination/log</log_storage_path>
        <snapshot_storage_path>/data/clickhouse/coordination/snapshots</snapshot_storage_path>
        <coordination_settings>
            <operation_timeout_ms>10000</operation_timeout_ms>
            <session_timeout_ms>30000</session_timeout_ms>
            <raft_logs_level>trace</raft_logs_level>
        </coordination_settings>
        <raft_configuration>
            <server>
                <id>1</id>
                <hostname>192.168.20.7</hostname>
                <port>9234</port>
            </server>
            <server>
                <id>2</id>
                <hostname>192.168.20.8</hostname>
                <port>9234</port>
            </server>
            <server>
                <id>3</id>
                <hostname>192.168.20.10</hostname>
                <port>9234</port>
            </server>
        </raft_configuration>
    </keeper_server>

    <remote_servers>
        <default>
            <shard>
                <internal_replication>1</internal_replication>
                <replica>
                    <host>192.168.20.7</host>
                    <port>8124</port>
                </replica>
                <replica>
                    <host>192.168.20.8</host>
                    <port>8124</port>
                </replica>
                <replica>
                    <host>192.168.20.10</host>
                    <port>8124</port>
                </replica>
            </shard>
        </default>
    </remote_servers>

    <macros>
        <shard>1</shard>
        <replica>192.168.20.10</replica>
    </macros>

    <interserver_http_host>192.168.20.10</interserver_http_host>
</clickhouse>

修改了server_id,macros.replica、interserver_http_host三个配置项 

4. 启动 

在三台机器上分别执行systemctl start clickhouse-server,启动clickhouse服务

启动成功之后,登录clickhouse执行语句,select * from system.clusters;可以看到三个节点,代表集群建立成功。

5.建表

clickhouse集群,需要在每个节点上分别建表,表结构如下所示

CREATE TABLE test.test1
(
    `id` Int64
)
    ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/test/test1', '{replica}')
    ORDER BY id
        SETTINGS index_granularity = 8192;

表建好之后,在其中一台节点执行insert后,在其它节点都可以看到该条数据。