Klaytn 노드 운영할때 트랜잭션 요청이 안됩니다

클레이튼 엔드포인트 노드 운영에 대해서 질문 드립니다.

amazon linux로 운영하려고 합니다.

노드 세팅을 마치고 사용해보면 view 함수는 잘 동작합니다.

하지만 transaction 함수들이 요청만 되고 처리가 안됩니다.

노드 사양은 아래와 같습니다.

유형: m5.2xlarge
용량: 4096GB
루트 디바이스 유형: EBS

@code

안녕하세요. 좀 더 상세하게 상황을 설명해주시면 감사하겠습니다.
The posting guideline of Klaytn 를 참고해서 글 업데이트 부탁드립니다 :slight_smile:
(보시면 재현절차, 기대되는 응답값 등의 항목들이 적혀 있는 것을 보실 수 있습니다. 답변자가 트랙킹 가능하게 최대한 상세히 부탁드립니다.)

  • 버전 : ken-v1.7.3

  • OS 환경 : Amazon Linux 2 AMI (HVM) - Kernel 5.10, SSD Volume Type

  • Hardware 스펙 (Cpu, Ram, Storage):

  • 모델: m5.2xlarge
  • vCPU: 8
  • 메모리: 32 GB
  • 인스턴스 스토리지: EBS 전용
  • EBS 최적화 사용가능: 예
  • 네트워크 성능: 최대 10기가 바이트
  • IPv6 지원: 예
  • 디스크 볼륨 크기: 4096 GB
  • 볼륨 유형: 범용 SSD (gp2)
  • IOPS: 12288
  • 내용(문의 유형에 해당하는 항목 작성) :
    • 상세 내용: ken 1.7.3 설치하고 /var/kend/data에 Fast sync 파일 다운로드 했습니다.
      kend 노드는 8551번 포트에서 실행했습니다. nginx를 통해서 8551로 라우팅 되도록 했습니다.
      컨트랙트의 view 함수는 호출 가능합니다.
      그러나 트랜잭션 호출 응답이 너무 느리고 되지 않고 있습니다.

kend conf 파일

# Configuration file for the kend

# cypress, baobab is only available if you don't specify NETWORK_ID.
NETWORK="cypress"
# if you specify NETWORK_ID, a private network is created.
NETWORK_ID=8217 # 여기에 8217을 써야 노드가 켜집니다

PORT=32323

SERVER_TYPE="fasthttp"
SYNCMODE="full"
VERBOSITY=3
MAXCONNECTIONS=10

# txpool options setting
TXPOOL_EXEC_SLOTS_ALL=4096
TXPOOL_NONEXEC_SLOTS_ALL=4096
TXPOOL_EXEC_SLOTS_ACCOUNT=4096
TXPOOL_NONEXEC_SLOTS_ACCOUNT=4096
TXPOOL_LIFE_TIME="30m"

# rpc options setting
RPC_ENABLE=1 # if this is set, the following options will be used
RPC_API="admin,debug,klay,miner,net,personal,rpc,txpool,web3" # available apis: admin,debug,klay,miner,net,personal,rpc,txpool,web3
RPC_PORT=8551
RPC_ADDR="0.0.0.0"
RPC_CORSDOMAIN="*"
RPC_VHOSTS="*"

# ws options setting
WS_ENABLE=1 # if this is set, the following options will be used
WS_API="admin,debug,klay,miner,net,personal,rpc,txpool,web3" # available apis: admin,debug,klay,miner,net,personal,rpc,txpool,web3
WS_ADDR="0.0.0.0"
WS_PORT=8552
WS_ORIGINS="*"

# service chain options setting
SC_MAIN_BRIDGE=0 # if this is set, the following options will be used.
SC_MAIN_BRIDGE_PORT=50505
SC_MAIN_BRIDGE_INDEXING=0  # this option will be deprecated.

# Setting 1 is to enable options, otherwise disabled.
AUTO_RESTART=0
METRICS=1
PROMETHEUS=1
DB_NO_PARALLEL_WRITE=0
MULTICHANNEL=1
SUBPORT=$((PORT + 1)) # used for multi channel option

# discover options
NO_DISCOVER=0 # setting 1 to disable discovery
BOOTNODES=""

# Raw options e.g) "--txpool.nolocals"
ADDITIONAL=""

DATA_DIR=/var/kend/data # DATA_DIR 작성
LOG_DIR=$DATA_DIR/logs

@Denver

@code

상세 내용을 공유해주셔서 감사합니다. 우선, 아쉽지만 사양이 많이 낮은 거 같습니다. 아마도 업데이트 이전 문서를 참고해주시고 사양을 설정하신 거 같아요.

최근에 사양 관련한 문서가 업데이트 되었었는데요, vCPU와 RAM을 넉넉히 16 core, 64 GB 정도 가져가시는 걸 권장드리고 싶습니다.

https://klaytnapi.com 서비스를 고려해보시는 것도 좋을 거 같습니다.

트랜잭션 호출 응답이 너무 느리다는 건 혹시 어떻게 테스트를 해보신 걸까요~?

사양 공유해주셔서 감사합니다

테스트는 개발중인 서비스에서 노드 api주소를 세팅한 주소로 설정했었습니다

예를 들어서 KAS api 주소와 세팅한 주소를 번갈아가며 확인했습니다

@code

답변이 늦어 죄송합니다.
공유해주신 설정에서 잘못된 부분은 없어보입니다.

제 생각엔 사양을 좀 더 높이신 뒤에 테스트를 해보시는 게 좋을 거 같습니다.
사양에 따른 비용이 부담이 되신다면, KAS 를 써보시는 게 좋을 거 같습니다.

도움이 되었길 바랍니다.
감사합니다.

답변 감사합니다.

한가지 문제가 생겨서 질문 드립니다.

kend start 로 노드를 켰는데요

kend가 실행하자 마자 꺼집니다.

실행 되는 로그는 잘 터미널에 출력됩니다.

혹시 어떤 문제가 있을까요?
@Denver

@code

실행되는 로그는 kend 로그를 말씀하시는 게 맞을까요?
그 메시지만 봐서는 실패 원인을 분석하기 어렵습니다.

kend 에 옵션들이 실제로 실행될 때는 아래의 커맨드와 같이 실행이 되는데요,
kend 로 실행하지 마시고 아래와 같이 옵션을 직접 주어 실행해보시는 것을 권장드립니다.

보통 설정값에 Data 디렉토리의 경로가 잘못 들어가있다거나 할 때 실행이 안되는 문제가 발생하곤 합니다.
아래의 커맨드처럼 직접 옵션을 주셔서 실행해보신다면 좀 더 에러의 원인과 연관이 큰 메시지들을 확인하실 수 있을 거 같습니다.

/home/ec2-user/ken-v1.7.3-0-linux-amd64/bin/ken --metrics --prometheus --multichannel --rpc --rpcapi admin,debug,klay,miner,net,personal,rpc,txpool,web3 --rpcport 8551 --rpcaddr 0.0.0.0 --rpccorsdomain * --rpcvhosts * --ws --wsapi admin,debug,klay,miner,net,personal,rpc,txpool,web3 --wsport 8552 --wsaddr 0.0.0.0 --wsorigins * --cypress --datadir /var/kend/cypress-data --port 32323 --subport 32324 --srvtype fasthttp --verbosity 3 --txpool.exec-slots.all 4096 --txpool.nonexec-slots.all 4096 --txpool.exec-slots.account 4096 --txpool.nonexec-slots.account 4096 --syncmode full --maxconnections 10 --autorestart.daemon.path /home/ec2-user/ken-v1.7.3-0-linux-amd64/bin/kend

안녕하세요
노드 실행 문제는 해결이 된 것 같습니다. 감사합니다.

kend status 에서는 running 이라고 잘 표기됩니다.

그런데 지금보니 kas같은 정상 동작하는 노드에서는 코인의 가격이 0.4달러로 표기되다가

aws에 세팅한 노드로 요청을 보내면 0.38달러로 표시됩니다.

그리고 노드의 요청이 view는 되지만 transaction은 되지 않습니다.

블록 번호를 체크해보니
aws는 81656994
정상 인스턴스는 81800304 이렇게 두 인스턴스간의 블록 넘버 차이가 있습니다.

노드 인스턴스는 r5.2xlarge로 설정했습니다.

vCPU = 8

Memory (GiB) = 64

Storage (GiB) = 4096

Network Bandwidth (Gbps) up to 10

혹시 노드의 사양이 더 좋아야할까요? 블록 넘버 차이가 문제일까요?

@Denver

@code

transaction 이 되지 않는 이유는 블록 동기화 과정이 정상적으로 이루어지지 않았기 때문입니다.
즉, 최신 블록 넘버까지 다 싱크가 된 이후에서야 EN에서 정상적으로 트랜잭션 처리가 가능합니다.

다음과 같이 로그 공유를 부탁드립니다.
해당 로그로 블록 처리 시간이 얼마나 되는지 등에 대한 정보를 알 수 있습니다.

INFO[02/01,02:54:59 Z] [5] Inserted a new block                      number=81835291 hash=ac9d8a…459435 txs=25    gas=2098781       elapsed=54.342ms   processTxs=47.241ms  finalize=1.493ms   validateState=133.977µs totalWrite=2.989211ms   trieWrite=2.606058ms
INFO[02/01,02:55:01 Z] [5] Inserted a new block                      number=81835292 hash=27901a…0cfa47 txs=28    gas=4364090       elapsed=48.222ms   processTxs=37.515ms  finalize=3.787ms   validateState=870.676µs totalWrite=5.150518ms   trieWrite=4.722531ms
INFO[02/01,02:55:01 Z] [5] Inserted a new block                      number=81835293 hash=4097d0…59f94d txs=31    gas=5225864       elapsed=83.612ms   processTxs=73.724ms  finalize=3.366ms   validateState=457.811µs totalWrite=5.214642ms   trieWrite=4.762387ms
INFO[02/01,02:55:03 Z] [5] Inserted a new block                      number=81835294 hash=1da853…ec0532 txs=19    gas=1284286       elapsed=12.245ms   processTxs=8.544ms   finalize=554.924µs validateState=39.155µs  totalWrite=1.804859ms   trieWrite=1.455469ms
INFO[02/01,02:55:03 Z] [5] Inserted a new block                      number=81835295 hash=bda0cc…932bd9 txs=28    gas=3239983       elapsed=49.771ms   processTxs=40.984ms  finalize=2.514ms   validateState=337.971µs totalWrite=4.2895ms     trieWrite=3.787853ms
INFO[02/01,02:55:04 Z] [5] Inserted a new block                      number=81835296 hash=625293…4f25e7 txs=25    gas=2416406       elapsed=54.434ms   processTxs=47.133ms  finalize=1.863ms   validateState=250.861µs totalWrite=3.377685ms   trieWrite=2.959194ms

그리고 싱크가 실제로 잘 되고 있는지도 확인 부탁드립니다.

aws 노드에서 아래와 같이 블록 번호를 조회해보니 블록 번호가 변경되지 않습니다.

klay.blockNumber
81742925
klay.blockNumber
81742925
klay.blockNumber
81742925
klay.blockNumber
81742925
klay.blockNumber
81742925
klay.blockNumber
81742925

정상 노드에서 같은 간격으로 명령어를 입력해보니 아래와 같이 blockNumber가 변하는 것을 확인했습니다.

klay.blockNumber
81865527
klay.blockNumber
81865528
klay.blockNumber
81865529
klay.blockNumber
81865529
klay.blockNumber
81865531

INFO[02/01,10:53:30 Z] [5] Regenerated local transaction journal     transactions=0 accounts=0
INFO[02/01,10:53:30 Z] [40] Starting P2P networking
INFO[02/01,10:53:32 Z] [34] UDP listener up                           self="kni://ba9a3b94cc28b31d5d896f3bde87ba747e67f6a4d251c4de403297cc6be6e6e6ab4c55fc82259e41445e6234de8e7c3efe0f8393a2476b3b66b92c4b71381cbe@[::]:32323?ntype=en"
INFO[02/01,10:53:32 Z] [40] Started P2P server                        id=ba9a3b94cc28b31d multichannel=true
INFO[02/01,10:53:32 Z] [40] RLPx listener up                          self="kni://ba9a3b94cc28b31d5d896f3bde87ba747e67f6a4d251c4de403297cc6be6e6e6ab4c55fc82259e41445e6234de8e7c3efe0f8393a2476b3b66b92c4b71381cbe@[::]:32323?ntype=en"
INFO[02/01,10:53:32 Z] [40] RLPx listener up                          self="kni://ba9a3b94cc28b31d5d896f3bde87ba747e67f6a4d251c4de403297cc6be6e6e6ab4c55fc82259e41445e6234de8e7c3efe0f8393a2476b3b66b92c4b71381cbe@[::]:32323?ntype=en"
INFO[02/01,10:53:32 Z] [44] Start listening chain head event to update stakingInfoCache.
INFO[02/01,10:53:32 Z] [40] IPC endpoint opened                       url=/var/kend/data/klay.ipc
INFO[02/01,10:53:32 Z] [40] FastHTTP endpoint opened                  url=http://0.0.0.0:8551     cors=* vhosts=*
INFO[02/01,10:53:32 Z] [40] FastWebSocket endpoint opened             url=ws://0.0.0.0:8552

tail kend.out으로 로그를 출력해보니 위와 같은 로그만 반복해서 표시됩니다.

@Denver

@code

다음의 API 들의 결과들도 공유부탁드립니다.

노드의 연결 상태와 싱크 상태를 점검해볼 수 있는 API 들입니다.

안녕하세요
API 결과를 공유드립니다.

klay.syncing

{"jsonrpc":"2.0","id":1,"result":false}

net.listening

{"jsonrpc":"2.0","id":67,"result":true}

net.peerCount

{"jsonrpc":"2.0","id":74,"result":{"total":0}}

net.networkID

{"jsonrpc":"2.0","id":67,"result":8217}

admin.peers

{"jsonrpc":"2.0","id":1,"result":[]}

감사합니다. peer count 와 syncing을 하지 않는것 같습니다. 어떤 방법이 있을까요?

@Denver

@code
방화벽 설정 정보도 공유 부탁드립니다.

AWS 보안그룹의 인바운드 규칙에서는 https, http는 모두 개방했습니다. ssh는 특정 ip만 허용했습니다.
이외에 다른 포트에 대해서 추가 설정한 것은 없습니다.

명령어로는 아래와 같이 출력됩니다.

[ec2-user@~]$ sudo iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

@Denver

@code

확인했습니다.
kend 를 아래의 과정을 통해 재시작 해주시고

$ kend stop 
$ ps -ef | grep ken # 또는 tail kend.log로 프로세스가 정상 종료되었는지 확인
$ kend start
$ tail kend.log # KEN이 정상 실행되었지 확인

약 2분 정도 뒤에 tail -n 50 kend.log 로 가장 최신 로그 정보를 50줄 정도 공유 부탁드립니다.

확인하실 때 여전히 싱크가 안된다면
ken attach klay.ipc 로 Javascript Console 을 활성화해주시고 admin.addPeer API로 kni://db5324833200d42348c648f638473ee7bd7db74801c0c2fbe880d92775be071f16223de3584acd666d37bea9cdbd7bc58cf8b01a629e75c8836eae294adeb9e4@121.53.201.22:32323?ntype=pn 를 추가해보시기 바랍니다.

이후 제가 최근 공유드렸던 API 들로 peer 간 연결이 잘 되었는지 추가 확인 및 공유 부탁드릴게요.

혹시 AWS Instance의 물리적 리전 위치는 어디인가요?

감사합니다. 말씀해주신 대로

ken attach klay.ipc 로 Javascript Console 을 활성화해주시고 admin.addPeer API로 
kni://db5324833200d42348c648f638473ee7bd7db74801c0c2fbe880d92775be071f16223de3584acd666d37bea9cdbd7bc58cf8b01a629e75c8836eae294adeb9e4@121.53.201.22:32323?ntype=pn 를 
추가해보시기 바랍니다.

ken attach 해서 노드를 추가해보니 싱크는 동작하기 시작했습니다.

> klay.blockNumber
81743370
> klay.blockNumber
81743372
> klay.blockNumber
81743375
> klay.blockNumber
81743380
> klay.blockNumber
81743559
> klay.blockNumber

그런데 아래 정상 노드의 블록번호와 조금 차이가 납니다.

> klay.blockNumber
82004784
> klay.blockNumber
82004794
> klay.blockNumber
82004877
> klay.blockNumber
82004877

노드를 그대로 켜두면 싱크가 맞춰질까요?

아니면 Fast Sync 파일을 다운받아서 다시 실행하면 될까요?

@Denver

@code

싱크까지 시간이 좀 걸리겠지만 저 정도 블록 차이라면 기다려 보시는 게 좋을 거 같습니다.
klay.syncing 으로 실시간 싱크 현황을 확인해보실 수 있습니다.

현황을 좀 보시고 이슈가 추가로 생기는 게 있으면 말씀해주세요.

감사합니다.

@Denver
싱크가 다 되어서 트랜잭션 처리가 가능합니다. 감사합니다.

다만 view 함수나, 트랜잭션 처리가 체감상 조금 느리게 처리되는데요

혹시 현재의 아래 사양에서 어떤것이 좋아져야 처리속도가 더 빨라질까요?

OS 환경 : Amazon Linux 2 AMI (HVM) - Kernel 5.10, SSD Volume Type

Hardware 스펙 (Cpu, Ram, Storage):

모델: m5.2xlarge
vCPU: 8
메모리: 32 GB
인스턴스 스토리지: EBS 전용
EBS 최적화 사용가능: 예
네트워크 성능: 최대 10기가 바이트
IPv6 지원: 예
디스크 볼륨 크기: 4096 GB
볼륨 유형: 범용 SSD (gp2)
IOPS: 12288

@code

vCPU 가 8 → 16
Memory 가 32 GB → 64 GB
정도로 상향되면 좀 더 나아질 것으로 예상됩니다.

또한 인스턴스의 리전 위치도 가급적 Asia 지역으로 해주시는 게 좋을 거 같습니다.

1 Like