인트로스펙션 포트(Introspection Port)

인트로스펙션 포트(Introspection Port)

clickhouse-server가 시작 또는 종료 과정에서 멈췄을 때, 일반 포트는 연결을 받지 못해 서버가 무엇을 하고 있는지 물어볼 수 없습니다. 인트로스펙션 포트는 이런 상황에서 서버 내부 상태를 진단할 수 있게 해 주는 특별한 TCP 리스너입니다. 이 문서에서는 그 설정 방법과 동작 방식을 설명할게요.

출처: 문서

본문

clickhouse-server가 시작 또는 종료 과정에서 멈추면 일반 포트는 연결을 받지 못하고, 서버가 무엇을 하고 있는지 물어볼 수 없습니다. 인트로스펙션 포트는 서버가 테이블을 붙이기 시작하기 전에 시작되고 테이블의 detach가 완료된 후에만 멈추는 네이티브 프로토콜 TCP 리스너입니다. 이 시간대 동안 운영자는 일반 clickhouse-client로 연결하여 SHOW PROCESSLIST, SELECT * FROM system.stack_trace, SYSTEM INSTRUMENT ADD 'QueryMetricLog::startQuery' SLEEP ENTRY 0.5 같은 쿼리를 실행할 수 있습니다.

설정

인트로스펙션 포트는 <introspection>true</introspection>으로 표시된 컴포저블 프로토콜 엔드포인트입니다. 기본적으로 인트로스펙션 포트는 설정되지 않습니다:

<protocols>
    <introspection_native>
        <type>tcp</type>
        <introspection>true</introspection>
        <description>introspection native protocol (tcp)</description>
        <host>127.0.0.1</host>
        <port>9010</port>
    </introspection_native>

    <introspection_native_secure>
        <type>tls</type>
        <impl>introspection_native</impl>
        <introspection>true</introspection>
        <description>secure introspection native protocol (tcp_secure)</description>
        <host>127.0.0.1</host>
        <port>9011</port>
    </introspection_native_secure>
</protocols>

일반적인 컴포저블 프로토콜 엔드포인트이므로 엔드포인트가 지원하는 모든 것을 지원합니다: host, port, description, networks 허용 목록, default_database, 그리고 tlsproxy1 레이어로의 감싸기. introspection 플래그는 엔드포인트의 속성입니다 — port를 담고 있는 항목의 속성 — 이며 impl 참조를 통해 상속되지 않으므로, 레이어를 인트로스펙션 엔드포인트와 일반 엔드포인트 사이에서 공유할 수 있습니다. 아래 의미론은 네이티브 프로토콜 핸들러로 구현되므로 스택은 반드시 tcp 레이어로 끝나야 합니다. 스택에 http, mysql, postgres, prometheus 또는 interserver 레이어가 포함된 엔드포인트를 표시하면, 딱 필요할 때 응답을 멈추는 포트를 만드는 대신 시작 시 INVALID_CONFIG_PARAMETER로 거부됩니다.

설명
introspection 컴포저블 프로토콜 엔드포인트를 인트로스펙션 포트로 표시합니다. 기본값: false.

동작

  • 수용되는 쿼리는 SELECT, SHOW, DESCRIBE, EXPLAIN, EXISTS, KILL QUERY, SYSTEM, SET, USE입니다. DDL과 데이터 수정 쿼리를 포함한 그 외의 모든 것은 QUERY_IS_PROHIBITED로 거부됩니다. 포트가 열려 있는 동안 서버 상태가 완전히 구성되지 않았거나 해체되고 있기 때문입니다.
  • SYSTEM RELOAD CONFIGSYSTEM RELOAD USERS는 서버가 완전히 시작될 때까지 QUERY_IS_PROHIBITED로 거부됩니다. 시작 중에 설정을 다시 로드하면 초기화 순서가 깨질 수 있기 때문입니다.
  • 이 포트에 대한 쿼리는 SHOW PROCESSLIST처럼 max_concurrent_queries와 워크로드 스케줄러를 우회합니다.
  • 연결은 전용 스레드 풀이 처리하므로 일반 연결 풀의 고갈은 이 포트에 영향을 주지 않습니다. 풀의 크기는 max_connections로 정해집니다.
  • CPU 과부하 때문에 서버가 일반 연결을 거부하는 경우에도 연결을 받아들입니다.
  • 완전한 일반 인증과 권한 부여가 적용됩니다. 이 포트에 연결한다고 해서 추가 접근 권한이 부여되지는 않습니다. 단, 위의 동시성 제한은 해제되므로 운영자만 도달할 수 있는 주소에 바인딩하세요.
  • 이 포트들은 SYSTEM START LISTEN / SYSTEM STOP LISTEN(ALLCUSTOM 포함)의 적용을 받지 않으며, 설정 재로드 시 재구성되지 않습니다.

더 알아보기 (Learn more)