메인 콘텐츠로 건너뛰기
이 가이드는 snapshot과 상태 동기화를 사용하여 Stable 노드를 빠르게 동기화하는 다양한 방법을 다룹니다.

동기화 방법 개요

방법동기화 시간필요한 스토리지사용 사례
Pruned Snapshot~10분< 5 GiB일반 풀 노드
Archive Snapshot~1시간~500 GBArchive 노드, 블록 익스플로러

공식 Snapshot

Stable은 매일 업데이트되는 공식 snapshot을 제공합니다(00:00 UTC).

Snapshot 정보

타입업데이트 빈도압축 형식크기URL
Pruned매일LZ4< 5 GiB다운로드
Archive매일ZSTD~200 GB다운로드

Pruned Snapshot 사용하기

Pruned snapshot은 최근 블록체인 상태(최근 100-1000 블록)를 포함합니다.

1단계: 환경 변수 설정

# 서비스 이름 설정 (기본값: stable)
export SERVICE_NAME=stable

2단계: 노드 서비스 중지

# 실행 중인 노드 중지
sudo systemctl stop ${SERVICE_NAME}

# 중지 확인
sudo systemctl status ${SERVICE_NAME}

2단계: 현재 데이터 백업 (선택사항)

# 백업 디렉토리 생성
mkdir -p ~/stable-backup

# 현재 상태 백업 (선택사항, 상당한 공간 필요)
cp -r ~/.stabled/data ~/stable-backup/

3단계: Pruned Snapshot 다운로드 및 압축 해제

# 의존성 설치
sudo apt install -y wget lz4 pv

# snapshot 디렉토리 생성
mkdir -p ~/snapshot
cd ~/snapshot

# 진행 상황과 함께 pruned snapshot 다운로드
wget -c https://stable-snapshot.s3.eu-central-1.amazonaws.com/snapshot.tar.lz4

# 대안: 재개 지원과 함께 다운로드
curl -C - -o snapshot.tar.lz4 https://stable-snapshot.s3.eu-central-1.amazonaws.com/snapshot.tar.lz4

# 기존 데이터 삭제
rm -rf ~/.stabled/data/*

# 진행 표시기와 함께 snapshot 압축 해제
pv snapshot.tar.lz4 | tar -I lz4 -xf - -C ~/.stabled/

# pv 없이 압축 해제하는 대안
tar -I lz4 -xvf snapshot.tar.lz4 -C ~/.stabled/

# 정리
rm snapshot.tar.lz4

4단계: 노드 재시작

# 노드 시작
sudo systemctl start ${SERVICE_NAME}

# 상태 확인
sudo systemctl status ${SERVICE_NAME}

# 로그 모니터링
sudo journalctl -u stabled -f

Archive Snapshot 사용하기

Archive snapshot은 완전한 블록체인 히스토리를 포함합니다.

1단계: 시스템 준비

# 노드 중지
sudo systemctl stop ${SERVICE_NAME}

# 의존성 설치
sudo apt install -y wget zstd pv

# 사용 가능한 디스크 공간 확인 (snapshot 크기의 2배 필요)
df -h ~/.stabled

2단계: Archive Snapshot 다운로드 및 압축 해제

# 작업 디렉토리 생성
mkdir -p ~/snapshot
cd ~/snapshot

# archive snapshot 다운로드
wget -c https://stable-snapshot.s3.eu-central-1.amazonaws.com/archive.tar.zst

# 기존 데이터 삭제
rm -rf ~/.stabled/data/*

# 더 나은 성능을 위해 높은 메모리로 압축 해제
pv archive.tar.zst | zstd -d --long=31 --memory=2048MB -c - | tar -xf - -C ~/.stabled/

# 대안: 표준 압축 해제
zstd -d --long=31 archive.tar.zst -c | tar -xvf - -C ~/.stabled/

# 정리
rm archive.tar.zst

3단계: 노드 시작

# 서비스 시작
sudo systemctl start ${SERVICE_NAME}

# 동기화 상태 확인
curl -s localhost:26657/status | jq '.result.sync_info'

자체 Snapshot 생성하기

수동 Snapshot 생성

# 노드 중지
sudo systemctl stop ${SERVICE_NAME}

# snapshot 아카이브 생성
cd ~/.stabled
tar -cf - data/ | lz4 -9 > ~/stable-snapshot-$(date +%Y%m%d).tar.lz4

# 체크섬 생성
sha256sum ~/stable-snapshot-*.tar.lz4 > checksums.txt

# 노드 재시작
sudo systemctl start ${SERVICE_NAME}

자동화된 Snapshot 스크립트

#!/bin/bash
# snapshot.sh - 자동화된 snapshot 생성

# 설정
SNAPSHOT_DIR="/var/snapshots"
STABLED_HOME="$HOME/.stabled"
KEEP_DAYS=7

# snapshot 디렉토리 생성
mkdir -p $SNAPSHOT_DIR

# 노드 중지
sudo systemctl stop ${SERVICE_NAME}

# snapshot 생성
SNAPSHOT_NAME="stable-snapshot-$(date +%Y%m%d-%H%M%S).tar.lz4"
tar -cf - -C $STABLED_HOME data/ | lz4 -9 > $SNAPSHOT_DIR/$SNAPSHOT_NAME

# 메타데이터 생성
cat > $SNAPSHOT_DIR/latest.json <<EOF
{
  "filename": "$SNAPSHOT_NAME",
  "height": "$(cat $STABLED_HOME/data/cs.wal/wal | grep height | tail -1 | awk '{print $2}' | tr -d ',')",
  "timestamp": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
  "size": "$(du -h $SNAPSHOT_DIR/$SNAPSHOT_NAME | awk '{print $1}')",
  "checksum": "$(sha256sum $SNAPSHOT_DIR/$SNAPSHOT_NAME | awk '{print $1}')"
}
EOF

# 오래된 snapshot 정리
find $SNAPSHOT_DIR -name "stable-snapshot-*.tar.lz4" -mtime +$KEEP_DAYS -delete

# 노드 재시작
sudo systemctl start ${SERVICE_NAME}

echo "Snapshot created: $SNAPSHOT_DIR/$SNAPSHOT_NAME"

자동화된 Snapshot 스케줄 설정

# crontab에 추가 (매주 일요일 오전 2시에 실행)
(crontab -l ; echo "0 2 * * 0 /usr/local/bin/snapshot.sh") | crontab -

검증 및 문제 해결

Snapshot 무결성 검증

# snapshot 체크섬 확인
sha256sum -c checksums.txt

# 압축 해제 검증
tar -I lz4 -tvf snapshot.tar.lz4 | head -20

# snapshot 크기 테스트
tar -I lz4 -tvf snapshot.tar.lz4 | wc -l

일반적인 문제

문제: Snapshot 압축 해제 실패

# 디스크 공간 확인
df -h

# 파일 무결성 검증
lz4 -t snapshot.tar.lz4

# 대체 압축 해제 시도
lz4 -d snapshot.tar.lz4 snapshot.tar
tar -xvf snapshot.tar -C ~/.stabled/

문제: Snapshot 후 노드가 시작되지 않음

# 권한 확인
ls -la ~/.stabled/data/

# 권한 수정
sudo chown -R $USER:$USER ~/.stabled/

# 제네시스 파일 검증
sha256sum ~/.stabled/config/genesis.json

# 리셋 후 다시 시도
stabled comet unsafe-reset-all
# 그런 다음 snapshot 복원

문제: 상태 동기화 실패

# 다른 RPC 서버 시도
# config.toml을 대체 RPC로 업데이트

# 청크 페처 증가
sed -i 's/chunk_fetchers = .*/chunk_fetchers = 8/' ~/.stabled/config/config.toml

# 클리어 후 재시도
stabled comet unsafe-reset-all --keep-addr-book

성능 최적화

다운로드 최적화

# 병렬 다운로드를 위해 aria2 사용
aria2c -x 16 -s 16 https://stable-snapshot.s3.eu-central-1.amazonaws.com/snapshot.tar.lz4

# 압축과 함께 wget 사용
wget --header="Accept-Encoding: gzip" -c URL

# 중단된 다운로드 재개
curl -C - -o snapshot.tar.lz4 URL

압축 해제 최적화

# 병렬 압축 해제 사용
pigz -d -c snapshot.tar.gz | tar -xf - -C ~/.stabled/

# 압축 해제 진행 상황 모니터링
pv snapshot.tar.lz4 | tar -I lz4 -xf - -C ~/.stabled/

# zstd에 더 많은 메모리 사용
zstd -d --long=31 --memory=4096MB archive.tar.zst

다음 단계