삽질/개발,엔지니어링

clickhouse(zookeeper)를 clickhouse keeper로 변경

maengis 2022. 8. 24. 13:58

클릭하우스는 참 자료 찾기가 힘들다. 그만큼 사용이 쉽다는 얘기인 건가 싶기도 하고.

여튼 공식 문서에서는 주키퍼 사용시 마이그레이션 과정을 아래와 같이 설명하고 있다.

https://clickhouse.com/docs/en/operations/clickhouse-keeper#migration-from-zookeeper

 

ClickHouse Keeper | ClickHouse Docs

ClickHouse Keeper provides the coordination system for data replication and distributed DDL queries execution. ClickHouse Keeper is compatible with ZooKeeper.

clickhouse.com

  1. 주키퍼 모든 노드 중지
  2. 권장 사항(이지만 선택 사항) 리더 노드를 시작 후 중지. 주키퍼가 일관된 스냅샷을 생성하게 함.
  3. 클릭하우스 키퍼 컨버터 실행
    clickhouse keeper-converter --zookeeper-logs-dir /var/lib/zookeeper/version-2 --zookeeper-snapshots-dir /var/lib/zookeeper/version-2 --output-dir /path/to/clickhouse/keeper/snapshots
  4. 클릭하우스 노드들에 스냅샷을 복사 하거나 클릭하우스 키퍼를 실행.
    clickhouse keeper --config /etc/your_path_to_config/config.xml --daemon

3번을 위해서 현재 주키퍼가 어찌 설정이 되어 있나를 봐야 하는데, zoo.cfg에 dataDir 값을 보면 된다. 내 경우에는 클릭하우스 키퍼 컨버터에 사용할 --zookeeper-logs-dir과 --zookeeper-snapshots-dir 값에 dataDir 값에 version-2만 붙여줬다. (dataDir에 기재된 곳으로 가서 확인해보니 version-2가 있어서 동일하게 적었다.)

 

4번을 위해 클릭하우스 키퍼 설정이 필요한데, 해당 config.xml파일 내용은

<keeper_server>
    <tcp_port>2181</tcp_port>
    <server_id>1</server_id>
    <log_storage_path>/var/lib/clickhouse/coordination/log</log_storage_path>
    <snapshot_storage_path>/var/lib/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>zoo1</hostname>
            <port>9444</port>
        </server>
        <server>
            <id>2</id>
            <hostname>zoo2</hostname>
            <port>9444</port>
        </server>
        <server>
            <id>3</id>
            <hostname>zoo3</hostname>
            <port>9444</port>
        </server>
    </raft_configuration>
</keeper_server>

https://clickhouse.com/docs/en/guides/sre/keeper/clickhouse-keeper#1-configure-nodes-with-keeper-settings

 

Configuring ClickHouse Keeper (clickhouse-keeper) | ClickHouse Docs

ClickHouse Keeper, or clickhouse-keeper, replaces ZooKeeper and provides replication and coordination.

clickhouse.com

 

다 준비하고 요이땅 하려고 했는데, 리플리카를 쓰던 클러스터에 문제가 있어서 데이터를 다른 클러스터로 옮겼고, 결론적으로 주키퍼가 실행은 되어 있지만, 하는 일이 없는 상태가 돼서 마이그레이션은 필요가 없어졌다.

 

-_______________________________-........

 

여튼 마이그레이션을 제외하고 주키퍼 > 클릭하우스 키퍼 전환

클릭하우스 config.xml 파일에 클릭하우스 키퍼 설정을 추가한다. 내 경우에는 서버가 세대라서 server_id만 설정에 맞게 변경해주었다.

<keeper_server>
    <tcp_port>2181</tcp_port>
    <server_id>1</server_id>
    <log_storage_path>/home/clickhouse_keeper/log</log_storage_path>
    <snapshot_storage_path>/home/clickhouse_keeper/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>clickhouse-1</hostname>
            <port>9444</port>
        </server>
        <server>
            <id>2</id>
            <hostname>clickhouse-2</hostname>
            <port>9444</port>
        </server>
        <server>
            <id>3</id>
            <hostname>clickhouse-3</hostname>
            <port>9444</port>
        </server>
    </raft_configuration>
</keeper_server>

위 설정에 /home/clickhouse_keeper/log와 /home/clickhouse_keeper/snapshots를 생성 후 권한을 clickhouse로 해준다.

mkdir /home/clickhouse_keeper
mkdir /home/clickhouse_keeper/log
mkdir /home/clickhouse_keeper/snapshots
chown clickhouse.clickhouse /home/clickhouse_keeper/log
chown clickhouse.clickhouse /home/clickhouse_keeper/snapshots

 

클릭하우스를 실행하고 포트를 확인해주면 기존 주키퍼가 쓰던 2181을 클릭하우스가 쓰고 있고, 9444 포트도 클릭하우스가 쓰고 있다.

systemctl start clickhouse-server

# netstat -nlp | grep clickhouse-s
tcp        0      0 0.0.0.0:8123            0.0.0.0:*               LISTEN      31197/clickhouse-se 
tcp        0      0 0.0.0.0:2181            0.0.0.0:*               LISTEN      31197/clickhouse-se 
tcp        0      0 0.0.0.0:9000            0.0.0.0:*               LISTEN      31197/clickhouse-se 
tcp        0      0 0.0.0.0:9009            0.0.0.0:*               LISTEN      31197/clickhouse-se 
tcp6       0      0 ::1:8123                :::*                    LISTEN      31197/clickhouse-se 
tcp6       0      0 :::9444                 :::*                    LISTEN      31197/clickhouse-se 
tcp6       0      0 ::1:2181                :::*                    LISTEN      31197/clickhouse-se 
tcp6       0      0 ::1:9000                :::*                    LISTEN      31197/clickhouse-se 
tcp6       0      0 ::1:9009                :::*                    LISTEN      31197/clickhouse-se

 

문서에 clickhouse-keeper, clickhouse-keeper-converter라고 되어 있어서 따로 실행하는 게 있나 했는데, clickhouse에 포함이 되어 있어서 설정에만 넣어주면 알아서 같이 기동이 된다. clickhouse를 실행해보면

# clickhouse
Use one of the following commands:
clickhouse local [args] 
clickhouse client [args] 
clickhouse benchmark [args] 
clickhouse server [args] 
clickhouse extract-from-config [args] 
clickhouse compressor [args] 
clickhouse format [args] 
clickhouse copier [args] 
clickhouse obfuscator [args] 
clickhouse git-import [args] 
clickhouse keeper [args] 
clickhouse keeper-converter [args] 
clickhouse install [args] 
clickhouse start [args] 
clickhouse stop [args] 
clickhouse status [args] 
clickhouse restart [args] 
clickhouse static-files-disk-uploader [args] 
clickhouse hash-binary [args]

clickhouse keeper 이런 식으로 실행하라고 되어 있기는 하지만, config.xml에 넣어주면 알아서 된다.

반응형