본문으로 건너뛰기
This page uses machine translation from English, which may contain errors or unclear language. For the most accurate information, please see the original English version. Some content may be in the original English due to frequent updates. Help us improve this page's translation by joining our effort on Crowdin. (Crowdin translation page, Contributing guide)

고가용성(high availability, HA) 구성하기

서비스 체인에서 하나의 브리지만 사용하는 경우, 해당 브리지가 단일 장애 지점이 될 수 있습니다. 이 문제를 해결하기 위해 두 개 이상의 브리지로 HA 시스템을 구축하는 방법을 설명합니다. 아래 그림과 같이 브리지를 두 개 이상 쌍으로 연결하도록 구성하면 하나의 브리지 연결에 문제가 발생하더라도 다른 브리지를 통해 체인 간 데이터 앵커링과 값 전송이 정상적으로 작동할 수 있습니다.

전제 조건

  • EN의 메인 브리지와 SCN의 서브 브리지가 연결되어 있어야 합니다. 연결되지 않은 경우, Kairos 연결을 참조하여 연결을 설정하세요.
  • 이 섹션에서는 Kairos와 서비스체인 사이에 브리지를 추가하는 방법을 설명합니다. 같은 방법으로 다른 브리지를 추가하여 HA를 설정할 수도 있습니다.

1단계: EN-SCN 간에 다른 브리지 추가

Kairos에 연결하기에서는 브리지로 연결된 EN과 SCN을 각각 EN-01과 SCN-L2-01로 가정합니다. 이 섹션에서는 EN-02와 SCN-L2-02 사이에 브리지를 하나 더 추가하겠습니다. 동일한 절차를 따르므로 간략하게 설명하겠습니다.

EN-02를 빌드한 후 conf/kend.conf에서 SC_MAIN_BRIDGE를 1로 설정하고 EN-02에서 ken을 재시작합니다.


SC_MAIN_BRIDGE=1

다음 명령어로 EN-02의 KNI 정보를 확인합니다:


EN-02$ ken attach --datadir ~/data
> mainbridge.nodeInfo.kni
"kni://eb8f21df10c6562...25bae@[::]:50505?discport=0"

SCN-L2-02에 로그인하고, KNI가 EN-02인 main-bridges.json을 생성합니다. 대괄호로 묶은 JSON 배열 형식이어야 합니다.


SCN-L2-02$ echo '["kni://eb8f21df10c6562...25bae@192.168.0.5:50505?discport=0"]' > ~/data/main-bridges.json

SCN-L2-02의 셸에서 아래 설명과 같이 kscn-XXXXX-amd64/conf/kscnd.conf를 편집합니다. 브리지를 연결하려면 SC_SUB_BRIDGE를 1로 설정합니다. SC_PARENT_CHAIN_ID는 Baobob의 chainID 1001로 설정합니다. SC_ANCHORING_PERIOD는 앵커링 트랜잭션을 부모 체인에 전송할 주기를 결정하는 파라미터입니다. 이 예시에서는 자식 블록 10개마다 앵커 트랜잭션이 부모 체인(Kairos)에 전송됩니다.


...
SC_SUB_BRIDGE=1
...
SC_PARENT_CHAIN_ID=1001
...
SC_ANCHORING_PERIOD=10
...

EN-02에서 ken을 재시작하면 아래 그림과 같이 EN-02와 SCN-L2-02 사이에 브리지가 자동으로 연결되고 연결 지점부터 데이터 앵커링이 시작됩니다.

EN-02와 SCN-L2-02 사이에 브리지를 추가하고 나면 아래와 같이 노드 간 연결이 설정된 것을 확인할 수 있습니다.

2단계: 브릿지 컨트랙트 등록 및 구독

위 그림과 같이 브리지 컨트랙트는 EN-01과 SCN-L2-01에만 등록되어 있습니다.

SCN-L2-02 콘솔에 접속하여 브리지 등록, 브리지 구독, 토큰 등록을 위한 API를 실행합니다. 브리지 컨트랙트와 토큰 컨트랙트는 크로스체인 밸류 전송 2단계에서 EN-01과 SCN-L2-01에 브리지 컨트랙트를 배포하는 과정에서 생성되었습니다.


$ kscn attach --datadir ~/data
> subbridge.registerBridge("0xCHILD_BRIDGE_ADDR", "0xPARENT_BRIDGE_ADDR")
null
> subbridge.subscribeBridge("0xCHILD_BRIDGE_ADDR", "0xPARENT_BRIDGE_ADDR")
null
> subbridge.registerToken("0xCHILD_BRIDGE_ADDR", "0xPARENT_BRIDGE_ADDR", "0xCHILD_TOKEN_ADDR", "0XPARENT_TOKEN_ADDR")
null

브리지 컨트랙트에서 추가 브리지 추가에 대한 정보를 업데이트해야 합니다. 추가한 브리지의 자식 오퍼레이터와 부모 오퍼레이터 정보를 서비스체인-가치-전송-예시erc20/erc20-addOperator4HA.js 파일에 작성하고 node erc20-addOperator4HA.js를 실행합니다.


// register operator
await conf.child.newInstanceBridge.methods.registerOperator("0xCHILD_BRIDGE_ADDR").send({ from: conf.child.sender, gas: 100000000, value: 0 });
await conf.parent.newInstanceBridge.methods.registerOperator("0xPARENT_BRIDGE_ADDR").send({ from: conf.parent.sender, gas: 100000000, value: 0 });

여러 개의 브리지가 있는 경우 임계값을 설정하면 보다 안전하게 값 전송을 제공할 수 있습니다. 임계값을 초과하는 오퍼레이터가 정상적으로 값 전송을 요청하는 경우에만 값 전송을 활성화할 수 있습니다. 예를 들어, 현재 예시와 같이 브리지 쌍이 2개이고 임계값을 2로 설정하면 두 개 모두 정상적으로 요청이 들어올 때만 값 전송을 제공할 수 있습니다. 즉, 하나의 브리지가 공격을 받아 비정상적인 요청을 보내더라도 이를 방지할 수 있습니다. 임계값의 기본값은 1입니다. 서비스체인-가치전송-예시erc20/erc20-addOperator4HA.js 파일에서 아래 코드를 주석 처리하고 임계값을 설정한 후 실행하여 브리지 컨트랙트에 대한 임계값을 변경합니다.


// // set threshold
// await conf.child.newInstanceBridge.methods.setOperatorThreshold(0, "your threshold number").send({ from: conf.child.sender, gas: 100000000, value: 0 });
// await conf.parent.newInstanceBridge.methods.setOperatorThreshold(0, "your threshold number").send({ from: conf.parent.sender, gas: 100000000, value: 0 });

등록이 완료되면 아래 그림과 같이 EN-02와 SCN-L2-02에 모두 브리지 컨트랙트가 등록되어 HA를 구성합니다.

HA를 위해 두 개 이상의 브리지 쌍이 연결되면 동일한 블록에 대한 데이터 앵커링 트랜잭션이 두 번 이상 발생하며, 밸류 전송 트랜잭션도 여러 번 발생할 수 있습니다. 즉, 추가 수수료가 필요합니다.

페이지를 개선해 주세요