리포팅 모드에서 rippled 빌드 및 실행

리포팅 모드는 HTTP 및 웹소켓 API를 제공하는 데 특화된 XRP Ledger 코어 서버의 모드입니다. 리포팅 모드에서 서버는 P2P 네트워크에 연결하지 않습니다. 대신, gRPC를 사용해 P2P 네트워크에 연결된 하나 이상의 신뢰할 수 있는 서버에서 검증된 데이터를 가져옵니다. 그러면 API 호출을 효율적으로 처리하여 P2P 모드로 실행되는 rippled 서버의 부하를 줄일 수 있습니다.

rippled 리포팅 모드에서는 두 개의 데이터스토어를 사용합니다:

  • 트랜잭션 메타데이터, 계정 상태, ledger 헤더를 포함하는 rippled용 기본 영구 데이터 저장소입니다. 기본 영구 데이터 저장소로 NuDB(소스에 포함됨) 또는 Cassandra를 사용할 수 있습니다. Cassandra를 사용하는 경우, 여러 리포팅 모드 서버가 단일 Cassandra 인스턴스 또는 클러스터의 데이터에 대한 액세스를 공유할 수 있습니다.

  • 관계형 데이터를 저장하는 PostgreSQL 데이터베이스로, 주로 tx 메소드 및 account_tx 메소드에 사용됩니다.

리포팅 모드 서버가 API 요청을 받으면 가능한 경우 이러한 데이터 저장소에서 데이터를 로드합니다. P2P 네트워크의 데이터가 필요한 요청의 경우 리포팅 모드는 요청을 P2P 서버로 전달한 다음 클라이언트에 응답을 다시 전달합니다. 여러 리포팅 모드 서버가 동일한 네트워크 액세스 가능 데이터베이스(PostgreSQL 및 Cassandra)에 대한 액세스를 공유할 수 있으며, 언제든지 하나의 리포팅 모드 서버만 데이터베이스에 쓰고 다른 서버는 모두 데이터베이스에서 읽습니다.

리포팅 모드를 실행하는 방법

요구 조건

  1. 시스템이 시스템 요구 사항을 충족하는지 확인합니다.

Note:

데이터베이스로 Cassandra를 사용하도록 선택하면 데이터가 로컬 디스크에 저장되지 않으므로 rippled에 대한 디스크 요구 사항이 낮아집니다.

  1. 리포팅 모드를 실행하려면 P2P 모드에서 하나 이상의 rippled 서버도 실행해야 합니다.

  2. 호환되는 버전의 CMake가 설치되어 있어야 합니다.

  3. 리포팅 모드에서 rippled을 실행하는 데 필요한 데이터스토어를 설치하고 구성합니다.

    1. PostgreSQL을 설치합니다.

    2. 기본 영구 데이터스토어로 사용할 데이터베이스를 설치하고 구성합니다. Cassandra 또는 NuDB를 사용하도록 선택할 수 있습니다.

    3. macOS에서는 Cassandra cpp 드라이버를 수동으로 설치해야 합니다. 다른 모든 플랫폼에서는 Cassandra 드라이버가 rippled 빌드의 일부로 빌드됩니다.

PostgreSQL 설치

리눅스에 PostgreSQL 설치

  1. 리눅스에 PostgreSQL을 다운로드하여 설치합니다.

  2. psql을 사용하여 PostgreSQL 데이터베이스 서버에 연결하고, 신규 사용자 및 데이터베이스 보고를 생성합니다.

macOS에 PostgreSQL 설치

  1. macOS에 PostgreSQL을 다운로드하여 설치합니다.

  1. psql을 사용하여 PostgreSQL 데이터베이스 서버에 연결하고 신규 사용자 및 데이터베이스 보고를 생성합니다.

기본 영구 데이터스토어 설치 및 구성

Cassandra

Cassandra를 설치한 다음 복제를 사용하여 rippled를 위한 키 공간을 만듭니다. 복제 계수 3을 권장하지만, 로컬로 실행할 때는 복제가 필요하지 않으며 replication_factor를 1로 설정할 수 있습니다.

NuDB

로컬 네트워크에 대한 리포팅 모드에서 rippled을 실행하는 경우, 백엔드 데이터베이스로 Cassandra 대신 NuDB를 사용하도록 선택할 수 있습니다. NuDB는 rippled 빌드 설정의 일부로 설치되며 추가 설치 단계가 필요하지 않습니다.

절차

  1. 우분투 또는 macOS에서 리포팅 모드용 rippled 빌드.

  1. 리포팅 모드에서 rippled을 실행할 구성 파일을 만듭니다. 예제 구성 파일인 rippled-example.cfg를 복사하여 루트 사용자가 아닌 사용자로 rippled리드를 실행할 수 있는 위치에 rippled-reporting-mode.cfg로 저장합니다. 예를 들어:

  1. rippled-reporting-mode.cfg를 편집하여 필요한 파일 경로를 설정합니다. rippled을 실행하려는 사용자는 여기에 지정한 모든 경로에 대한 쓰기 권한이 있어야 합니다.

    1. ledger 데이터베이스를 저장할 위치로 [node_db] 경로를 설정합니다.

    2. [database_path]를 다른 데이터베이스 데이터를 저장할 위치로 설정합니다. (여기에는 구성 데이터가 있는 SQLite 데이터베이스가 포함되며, 일반적으로 [node_db] 경로 필드보다 한 단계 위입니다.)

    3. [debug_logfile]을 rippled가 로깅 정보를 기록할 수 있는 경로로 설정합니다.

    이 설정은 rippled을 성공적으로 시작하기 위해 필요한 유일한 구성입니다. 다른 모든 구성은 선택 사항이며 서버가 작동한 후에 조정할 수 있습니다.

  2. 리포팅 모드를 사용하도록 설정하려면 rippled-reporting-mode.cfg 파일을 편집합니다:

    1. [reporting] 구절의 주석을 해제하거나 새 구절을 추가합니다:

  1. 데이터를 추출할 rippled된 소스(ETL 소스)를 나열합니다. 이러한 rippled 서버에는 gRPC가 활성화되어 있어야 합니다. 참고: 리포팅 모드는 P2P 네트워크에 연결하지 않으므로 데이터가 실제로 네트워크 합의 ledger과 일치하는지 확인할 수 없으므로 신뢰할 수 있는 서버만 포함하세요.

  1. 데이터베이스 구성

    1. [ledger_tx_tables]에 대한 Postgres DB를 지정합니다:

  1. [node_db]에 대한 데이터베이스를 지정합니다.

  1. rippled에 대한 구성을 수정하여 포트를 엽니다.

  • 공용 웹소켓 포트를 엽니다:

  • gRPC 포트를 엽니다:

  • 리포팅 시스템의 IP에 보안 게이트웨이를 추가합니다:

  1. 리포팅 모드에서 rippled를 실행합니다:

기대할 수 있는 기능

다음은 터미널에 표시되는 내용을 발췌한 것입니다.

자주 묻는 질문

리포팅 모드를 사용하려면 rippled 인스턴스를 두 개 이상 실행해야 하나요? 예. 리포팅 모드로 실행되는 rippled 서버는 P2P 네트워크에 연결하지 않고 네트워크에 연결된 하나 이상의 rippled 서버에서 검증된 데이터를 추출하므로 P2P 모드 서버를 하나 이상 실행해야 합니다. 이미 rippled을 설치했습니다. 리포팅 모드를 사용하도록 구성 파일을 업데이트하고 rippled을 다시 시작할 수 있나요? 아니요. 현재 리포팅 모드를 사용하려면 소스를 다운로드하고 rippled를 빌드해야 합니다. 리포팅 모드용 패키지를 제공하기 위한 이니셔티브가 진행 중입니다. 리포팅 모드에서 rippled을 실행하려면 P2P 모드에서 실행 중인 rippled 서버도 하나 이상 필요합니다. 디스크 공간이 두 배로 필요하다는 뜻인가요? 기본 데이터 저장소의 위치에 따라 답은 달라집니다. Cassandra를 기본 데이터 저장소로 사용하는 경우, 리포팅 모드 서버는 로컬 디스크에 훨씬 적은 양의 데이터를 저장합니다. PostgreSQL 서버는 원격일 수도 있습니다. 이러한 방식으로 여러 리포팅 모드 서버가 동일한 데이터를 공유하도록 할 수 있습니다.

마지막으로, P2P 모드 서버는 최근 기록만 보관하면 되지만 리포팅 모드 서버는 장기간의 기록을 보관합니다.

rippled을 실행하기 위한 시스템 요구사항에 대한 자세한 내용은 rippled 시스템 요구사항을 참조하세요.

PostgreSQL 또는 Cassandra 데이터베이스에서 가져온 데이터의 유효성을 어떻게 확인할 수 있나요?

rippled가 리포팅 모드에서 실행되면 구성 파일에 지정된 ETL 소스의 유효성이 검증된 데이터만 제공합니다. P2P 모드에서 다른 사람의 rippled 서버를 ETL 소스로 사용하는 경우, 해당 서버를 암묵적으로 신뢰하는 것입니다. 그렇지 않은 경우, P2P 모드에서 자체 rippled 노드를 실행해야 합니다. API를 사용하지 않고 관계형 데이터베이스에 기존 SQL 쿼리를 수행할 수 있나요?

기술적으로는 원한다면 데이터베이스에 직접 액세스할 수 있습니다. 하지만 데이터는 바이너리 blob으로 저장되며, blob에 있는 데이터에 액세스하려면 blob을 디코딩해야 합니다. 따라서 기존 SQL 쿼리는 데이터의 개별 필드를 찾아 필터링할 수 없기 때문에 훨씬 덜 유용합니다.

Last updated