그래프 노드에서 손쉬운 설정 확장
10778 단어 blockchainsubgraph
어떤 이유로 graph-node과 같은 호스팅 서비스를 사용하지 않고 고유한 The Graph을 구축하는 경우 그래프 노드의 확장도 올바르게 고려해야 합니다. 확장을 허용하는 구성을 구축하지 않으면 사용자는 종종 Web3 클라이언트에서 504(게이트웨이 시간 초과) 요청으로 끝납니다. 이 기사에서는 손쉬운 그래프 노드 확장 방법을 소개합니다.
TL; DR
official docker-compose.yml을 다음과 같이 다시 작성하십시오(설명은 다음과 같음).
version: '3'
services:
graph-node-index:
image: graphprotocol/graph-node
ports:
- '8020:8020'
depends_on:
- ipfs
- postgres
extra_hosts:
- host.docker.internal:host-gateway
environment:
postgres_host: postgres
postgres_user: graph-node
postgres_pass: let-me-in
postgres_db: graph-node
ipfs: 'ipfs:5001'
ethereum: 'mainnet:http://host.docker.internal:8545'
GRAPH_LOG: info
node_role: index-node
node_id: index-node
BLOCK_INGESTOR: index-node
graph-node-query:
image: graphprotocol/graph-node
ports:
- '8000:8000'
- '8001:8001'
depends_on:
- ipfs
- postgres
extra_hosts:
- host.docker.internal:host-gateway
environment:
postgres_host: postgres
postgres_user: graph-node
postgres_pass: let-me-in
postgres_db: graph-node
ipfs: 'ipfs:5001'
ethereum: 'mainnet:http://host.docker.internal:8545'
GRAPH_LOG: info
node_role: query-node
ipfs:
image: ipfs/go-ipfs:v0.4.23
ports:
- '5001:5001'
volumes:
- ./data/ipfs:/data/ipfs
postgres:
image: postgres
ports:
- '5432:5432'
command:
[
"postgres",
"-cshared_preload_libraries=pg_stat_statements",
"-cmax_connections=100"
]
environment:
POSTGRES_USER: graph-node
POSTGRES_PASSWORD: let-me-in
POSTGRES_DB: graph-node
volumes:
- ./data/postgres:/var/lib/postgresql/data
그런 다음 다음과 같이 노드를 실행합니다.
docker-compose up -d --scale graph-node-query=5
다음은 설명입니다
확장 그래프 노드
그래프 노드를 확장할 수 있도록 docker-compose 구성을 수정하고 있습니다. 제가 하고 있는 일은 크게 두 가지입니다
동시 PostgreSQL 연결 수 늘리기
쉬운 것부터 시작합시다. 동시 PostgreSQL 연결 수를 늘리는 시작 옵션을 추가합니다.
@@ -34,7 +53,8 @@
command:
[
"postgres",
- "-cshared_preload_libraries=pg_stat_statements"
+ "-cshared_preload_libraries=pg_stat_statements",
+ "-cmax_connections=100"
]
environment:
POSTGRES_USER: graph-node
확장을 위해 그래프 노드 수를 늘리고 있으므로 PostgreSQL 측에서 대기 중인 연결 수도 늘려야 합니다. 여기서는 100으로 설정했습니다.
그래프 노드를 인덱스 노드와 쿼리 노드의 두 가지 역할로 분할
다음으로 그래프 노드는 인덱스 전용 노드와 쿼리 전용 노드의 두 가지 역할로 나뉩니다. 쿼리 전용 노드 수를 늘려 확장합니다. 이러한 역할 분리 없이 scale-out을 수행하면 인덱스 작업을 위해 경쟁하는 인덱스 노드가 여러 개 있을 것입니다. 다른 방법은 고유한 node_id를 사용하는 것이지만 이번에는 이 방법을 사용하지 않았습니다(이유는 후기 참조).
인덱스 및 쿼리 노드는 그래프 노드 시작 시
DISABLE_BLOCK_INGESTOR
환경 변수에 의해 전환됩니다. DISABLE_BLOCK_INGESTOR=false
이면 쿼리 노드가 되고 true
이면 인덱스 노드가 됩니다. 이것은 약간 복잡하지만 node_role
에 의해 Dockerfile 내부의 start 스크립트에서 전환됩니다.graph-node-index:
environment:
node_role: index-node
node_id: index-node
BLOCK_INGESTOR: index-node
graph-node-query:
environment:
node_role: query-node
이것만으로도 호스트 측 포트 충돌이 발생하므로 호스트 측 포트 충돌을 방지하기 위해 인덱스 노드(graph-node-index)는 API 포트(8020)만 수신하고 쿼리 노드(graph-node-query)는 HTTP(8000) 및 Websocket(8001)만 수신합니다.
graph-node-index:
image: graphprotocol/graph-node
ports:
# - '8000:8000'
# - '8001:8001'
- '8020:8020'
#- '8030:8030'
#- '8040:8040'
graph-node-query:
image: graphprotocol/graph-node
ports:
- '8000:8000'
- '8001:8001'
#- '8020:8020'
#- '8030:8030'
#- '8040:8040'
이 위치에서 쿼리 노드를 확장하면 좋습니다.
docker-compose up -d --scale graph-node-query=5
그래 잘했어!!!
(Postscript) node_id를 고유하게 만들어서 충돌을 피하지 않은 이유는 무엇입니까?
첫 번째 접근 방식은 node_id를 고유하게 만드는 것이었습니다. 그러나 다음 두 가지 이유로 접근 방식을 변경했습니다.
API 노드 엔드포인트 숨기기
낯선 사람이 허가 없이 API에 액세스할 가능성을 줄이기 위해 일반 대중이 액세스하는 쿼리 노드에서 API 노드를 완전히 격리하고 싶었습니다.
공식 Dockerfile을 있는 그대로 사용하고 싶습니다.
고유하게 만들기 위해 node_id를
$HOSTNAME
로 설정하는 것이 가장 쉬울 수 있지만 이렇게 하려면 start
스크립트를 수정해야 합니다.
Reference
이 문제에 관하여(그래프 노드에서 손쉬운 설정 확장), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/tumf/easy-setup-scaling-out-of-your-graph-node-32e2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)