밸리데이터 옆에서 QORel 실행하기
밸리데이터는 자신의 체인 채널을 직접 릴레이하는 경우가 많습니다. QORel은 밸리데이터 호스트에서, 사이드카 컨테이너로, 또는 Kubernetes에서 실행할 수 있습니다. 이 페이지는 세 가지 구성과 릴레이어를 밸리데이터 자체의 키와 분리해 두는 규칙을 다룹니다. 밸리데이터와 노드 운영자를 위한 것입니다. 노드 자체를 운영하는 방법은 밸리데이터 운영하기와 노드 운영을 참고하세요.
현재 릴레이는 테스트넷 전용입니다. QORel은 qorechain-diana를 상대로 실행되었고, 열려 있는 메인넷 IBC 채널은 없습니다.
혁신
- 패키지에 포함된 하드닝된 서비스.
.deb와.rpm은 자체qorel사용자로 실행되고,0077umask, no new privileges, 비공개/tmp,/var/lib/qorel바깥의 읽기 전용 파일 시스템을 적용하며, 코어 덤프를 만들지 않는qorel.service를 설치합니다. - 원한다면 키를 메모리에만 둘 수 있습니다. Kubernetes 구성은 파드가 시작될 때 시크릿에서 메모리 기반 볼륨으로 키를 다시 만들므로, 키 파일이 디스크에 닿지 않습니다.
- 소유자 전용 키 파일. 포스트 양자 시드를 포함한 키 파일은 모드 0600입니다.
- 알림을 걸 수 있는 검사.
qorel keys pqc-status는ready_to_relay를 보고하며, 전송 전 검사는 거부될 트랜잭션을 수수료가 소모되기 전에 막습니다.
사용 방법
기본 원칙
- 전용 릴레이어 계정을 사용하세요. 밸리데이터 운영자 키나 컨센서스 키는 절대 안 됩니다. 릴레이어가 수수료에 필요한 만큼만 넣어 두세요.
- 릴레이어 키당 릴레이어 프로세스 하나. 같은 키로 서명하는 두 프로세스는 계정 시퀀스를 두고 충돌합니다.
- 자신의 채널만 릴레이하세요.
packet_filter를 설정하세요. - QORel이 로컬 노드를 가리키게 하세요.
http://127.0.0.1:26657,http://127.0.0.1:9090,ws://127.0.0.1:26657/websocket을 사용하고 해당 포트는 인터넷에 닫아 두세요. 이렇게 하면 공개적으로는 제공되지 않는 gRPC 엔드포인트도 릴레이어가 사용할 수 있습니다. - QoreChain에서는
qorel keys register-pqc로 릴레이어의 포스트 양자 키를 한 번 등록하고, 시작하기 전에qorel keys pqc-status를 확인하세요.
1. 밸리데이터 호스트의 systemd
-
.deb또는.rpm패키지를 설치합니다(설치). 밸리데이터의 사용자와는 별개인qorel시스템 사용자와 하드닝된qorel.service가 만들어집니다. -
/etc/qorel/config.toml을 로컬 노드 엔드포인트로 편집합니다. -
사용자
qorel로 릴레이어 키를 추가하고 포스트 양자 키를 등록합니다.sudo -u qorel qorel --config /etc/qorel/config.toml keys add --chain qorechain-diana --key-name relayer --mnemonic-file <file>sudo -u qorel qorel --config /etc/qorel/config.toml keys register-pqc --chain qorechain-dianasudo -u qorel qorel --config /etc/qorel/config.toml keys pqc-status --chain qorechain-diana -
systemctl enable --now qorel을 실행합니다. -
블록 생성과 경쟁하지 않도록 QORel의 우선순위를 노드보다 낮춥니다.
# /etc/systemd/system/qorel.service.d/priority.conf[Service]Nice=10CPUWeight=20MemoryMax=1G그런 다음
systemctl daemon-reload && systemctl restart qorel을 실행합니다.
2. Docker Compose 사이드카
services:
qorel:
image: ghcr.io/qorechain/qorel:0.1.0
command: ["--config", "/home/nonroot/.hermes/config.toml", "start"]
network_mode: host # reach the node on 127.0.0.1
restart: unless-stopped
volumes:
- ./qorel:/home/nonroot/.hermes # config.toml + keys/ (owner uid 65532, mode 0700)
deploy:
resources:
limits: { cpus: "1.0", memory: 1g }
같은 이미지로 키를 한 번 추가합니다. 예:
docker run --rm -v $PWD/qorel:/home/nonroot/.hermes ghcr.io/qorechain/qorel:0.1.0 \
keys add --chain qorechain-diana --key-name relayer --mnemonic-file /home/nonroot/.hermes/relayer.mnemonic
docker run --rm --network host -v $PWD/qorel:/home/nonroot/.hermes ghcr.io/qorechain/qorel:0.1.0 \
keys register-pqc --chain qorechain-diana
이후에 니모닉 파일을 삭제하세요.
3. Kubernetes
니모닉은 시크릿 저장소에 보관하고 시작할 때 키를 다시 만듭니다.
- init 컨테이너가
medium: Memory인emptyDir에qorel keys add를 실행합니다(포스트 양자 키는 사전에 한 번 수동으로 등록하세요). - 메인 컨테이너가 같은 볼륨에서
qorel start를 실행합니다.
이렇게 하면 키가 메모리에만 존재합니다.
apiVersion: apps/v1
kind: Deployment
metadata: { name: qorel }
spec:
replicas: 1 # never more than one per key
strategy: { type: Recreate }
selector: { matchLabels: { app: qorel } }
template:
metadata: { labels: { app: qorel } }
spec:
securityContext: { runAsNonRoot: true, runAsUser: 65532, fsGroup: 65532 }
volumes:
- name: home
emptyDir: { medium: Memory }
- name: config
configMap: { name: qorel-config }
- name: mnemonic
secret: { secretName: qorel-relayer-mnemonic } # key: mnemonic
initContainers:
- name: keys
image: ghcr.io/qorechain/qorel:0.1.0
args: ["--config", "/config/config.toml", "keys", "add", "--chain", "qorechain-diana",
"--key-name", "relayer", "--mnemonic-file", "/secret/mnemonic", "--overwrite"]
volumeMounts:
- { name: home, mountPath: /home/nonroot/.hermes }
- { name: config, mountPath: /config }
- { name: mnemonic, mountPath: /secret, readOnly: true }
# repeat the init container for each chain in the config
containers:
- name: qorel
image: ghcr.io/qorechain/qorel:0.1.0
args: ["--config", "/config/config.toml", "start"]
ports: [{ containerPort: 3001, name: telemetry }]
resources: { limits: { cpu: "1", memory: 1Gi } }
volumeMounts:
- { name: home, mountPath: /home/nonroot/.hermes }
- { name: config, mountPath: /config }
설정의 key_store_folder는 /home/nonroot/.hermes/keys를 가리켜야 합니다(또는 지정하지 않은 채로 두세요).
모니터링
텔레메트리를 활성화하고 대기 중인 패킷, 릴레이어 잔액, 포스트 양자 키 상태, 클라이언트 최신성에 알림을 거세요. 목록은 모니터링에 있습니다.
접근 방법
- 네트워크. 테스트넷
qorechain-diana. 릴레이어는 직접 운영하는 노드의 로컬 포트와 상대 체인의 엔드포인트에 연결합니다. - 계정. 각 체인에 수수료용 자금이 있는 전용 릴레이어 계정. 밸리데이터 운영자 키는 절대 사용하지 마세요.
- 호스트. 구성 1은 systemd가 있는 Linux, 구성 2는 호스트 네트워킹이 가능한 Docker, 구성 3은 메모리 기반
emptyDir을 쓸 수 있는 클러스터. - 비용. 수수료뿐입니다. 위 예제는 릴레이어를 CPU 1개와 메모리 1 GiB로 제한합니다.
배포 위치
패키지, 컨테이너 이미지, 소스는 설치에 나열되어 있습니다. 예제 설정은 qorechain/QORel의 packaging/config.example.toml입니다.
한계와 알려진 문제
- 밸리데이터의 의무가 아닙니다. 릴레이는 선택 사항이며 밸리데이션과는 별개입니다. 릴레이어가 멈춰도 컨센서스에는 영향이 없습니다.
- 키당 프로세스 하나. 같은 키로 두 번째 파드를 시작하는 롤링 업데이트는 계정 시퀀스를 깨뜨립니다. 예제는
Recreate를 사용합니다. - 수동 등록.
keys register-pqc는 한 번만 하는 수동 단계입니다. Kubernetes init 컨테이너는 키만 다시 만듭니다. - 테스트넷 전용. 아직 릴레이할 메인넷 채널이 없습니다.