ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ClickHouse config.xml] listen_try 알아보기
    Database/Clickhouse 2024. 1. 2. 02:16
    반응형

    - 목차

     

    들어가며.

    이번 글에서는 ClickHouse 의 설정 중 <listen_try> 에 대해서 알아봅니다.

    <listen_try> 설정은 <listen_host> 와 관련이 있습니다.

    아래의 링크는 ClickHouse 의 <listen_host> 에 대한 내용을 포함하고 있습니다.

     

    https://westlife0615.tistory.com/732

     

    [ClickHouse Config] listen_host 설정 알아보기

    - 목차 들어가며.이번 글에서는 ClickHouse 의 config.xml 의 설정에 대해서 알아봅니다.listen_host 설정은 ClickHouse 서버가 어떤 Network Interface 를 사용할지 결정하는 설정입니다.일반적으로 아래와 같이

    westlife0615.tistory.com

     

    <listen_try> 설정은 ClickHouse 서버가 <listen_host> 에 지정된 Network Interface 와의 연결을 실패하여도 서버가 종료되지 않습니다.

     

    ClickHouse 는 8123 와 9000 Port 를 리스닝하여 클라이언트와의 연결을 유지해야합니다.

    이때에 <listen_host> 에 지정된 Network Interface 를 통해서 TCP Connection 이 형성됩니다.

    만약 어떠한 이유로 네트워크 스택 상의 문제로 인해서 통신이 수행되지 않아도 <listen_try> 설정 여부에 따라서 ClickHouse 의 종료 여부가 결정됩니다.

     

    <listen_try> 가 설정되지 않거나 1 로 설정되면 ClickHouse 는 네트워크 문제로 인해서 종료되지 않습니다.

    만약 <listen_try> 가 0 으로 설정된다면 ClickHouse 의 정상 실행 여부는 네트워크 상태에 의존적이게 됩니다.

     

    <listen_try> 가 비활성화되는 경우.

    <listen_try> 설정이 비활성화되는 경우는 ClickHouse 가 네트워크 관련 이슈가 발생한다면 ClickHouse Server 는 종료되게 됩니다.

    아래는 존재하지 않는 1.2.3.4 Network Interface 에 연결을 시도하고, <listen_try> 의 값은 0 입니다.

     

    cat <<'EOF'> /tmp/listen.xml
    <clickhouse>
        <listen_host>1.2.3.4</listen_host>
        <listen_try>0</listen_try>
    </clickhouse>
    EOF
    
    docker run -it --platform linux/amd64 \
    --name clickhouse \
    --hostname clickhouse \
    --mount type=bind,source=/tmp/listen.xml,target=/etc/clickhouse-server/config.d/listen.xml \
    altinity/clickhouse-server:23.8.16.42.altinitystable

     

    이 경우에 존재하지 않는 Network Interface 를 활용한 Network Stack 을 생성하게 되고, 이 과정에서 여러 에러가 발생합니다.

    그리고 <listen_try> 이 비활성화된 경우에는 ClickHouse Server 는 종료됩니다.

     

    <Error> Application: DB::Exception: Listen [1.2.3.4]:9009 failed: Poco::Exception. Code: 1000, e.code() = 99, Net Exception: Cannot assign requested address: 1.2.3.4:9009 (version 23.8.16.42.altinitystable (altinity build))
    <Information> Application: shutting down
    <Debug> Application: Uninitializing subsystem: Logging Subsystem
    <Trace> BaseDaemon: Received signal -2
    <Information> BaseDaemon: Stop SignalListener thread

     

    하지만 listen_try 이 1 로 설정되는 경우에는 Localhost Loopback Network Interface 에 한하여 동작이 가능합니다.

     

    cat <<'EOF'> /tmp/listen.xml
    <clickhouse>
        <listen_host>1.2.3.4</listen_host>
        <listen_try>1</listen_try>
    </clickhouse>
    EOF
    
    docker run -it --platform linux/amd64 \
      --name clickhouse \
      --hostname clickhouse \
      --mount type=bind,source=/tmp/listen.xml,target=/etc/clickhouse-server/config.d/listen.xml \
      altinity/clickhouse-server:23.8.16.42.altinitystable

     

     

    마치며.

    특정 Network Interface 를 활용해야하는 경우가 아니면, 즉 일반적인 경우에

    아래와 같이 Network Interface 의 제약을 적용하지 않고, <listen_try> 설정은 반드시 활성화하는 것이 가장 괜찮다고 판단합니다.

     

    <clickhouse>
        <listen_host>0.0.0.0</listen_host>
        <listen_try>1</listen_try>
    </clickhouse>

     

    반응형
Designed by Tistory.