PN, EN 노드간 static_node.json 설정 관련

안녕하세요.
저희가 현재 PN, EN을 운영 중에 있는데, 추가로 EN을 더 설정하려고 하는 중에 문의가 있습니다.

<현재 상태>
PN <-> EN (서로 static_node.json 에 kni:IP:Port 목록이 있음)

<추가 EN>
EN_new 의 static_node.json에 현재 PN의 kni:IP:Port를 넣음.

(문의 1)
klaytn Doc 상에는 PN에 대해서만 static_node.json 사용법이 나와있는데요. EN에 static_node.json을 쓰는 것이 효과가 있는지요?

(문의 2)
EN_new의 로그를 살펴보니 static_node.json에 써놓은 기존의 PN과 연결을 못하고 Add dial candite만 계속 하고 있습니다. admin.Peers 로 살펴봐도 static에 적어놓은 PN과 연결되지 못하고 있습니다. 관련하여 기존 PN내의 static_node.json에는 새로운 EN_new에 대해서는 적어놓지 않았습니다. 혹시 쌍방향으로 적어놓지 않아서 연결이 안되는건가요? (참고로 기존의 PN <-> EN 간에는 static_node.json에 서로 다 적혀있긴 합니다. 그래서 연결된 노드 목록에 나옵니다.)

(문의 3)
만약 EN_new에 PN에 대해 static_node.json 설정하고, PN에도 EN_new의 IP를 static_node.json에 설정한 후에 EN_new 안에 No_Discory=1 로 하면 새로운 EN_new는 PN하고만 p2p 통신을 하도록 설정할 수 있을까요? 그러면 혹시 서로 같은 위치에 있는 서버라서 저희 EN_new의 통신간의 이점이 있을까요?

감사합니다.

(문의 1)
klaytn Doc 상에는 PN에 대해서만 static_node.json 사용법이 나와있는데요. EN에 static_node.json을 쓰는 것이 효과가 있는지요?

네, 효과 있습니다.

(문의 2)
EN_new의 로그를 살펴보니 static_node.json에 써놓은 기존의 PN과 연결을 못하고 Add dial candite만 계속 하고 있습니다. admin.Peers 로 살펴봐도 static에 적어놓은 PN과 연결되지 못하고 있습니다. 관련하여 기존 PN내의 static_node.json에는 새로운 EN_new에 대해서는 적어놓지 않았습니다. 혹시 쌍방향으로 적어놓지 않아서 연결이 안되는건가요? (참고로 기존의 PN ↔ EN 간에는 static_node.json에 서로 다 적혀있긴 합니다. 그래서 연결된 노드 목록에 나옵니다.)

아뇨, 쌍방향으로 적지 않아도 되는데, PN쪽에도 적어주시면 서로 dialing을 할테니 연결이 맺어질 가능성이 좀 더 높을 것 같습니다. 혹시 방화벽 문제는 없는지 확인 부탁드립니다. 또한, EN의 nodekey가 잘 설정되어 있는지도 확인 부탁드리겠습니다.

(문의 3)
만약 EN_new에 PN에 대해 static_node.json 설정하고, PN에도 EN_new의 IP를 static_node.json에 설정한 후에 EN_new 안에 No_Discory=1 로 하면 새로운 EN_new는 PN하고만 p2p 통신을 하도록 설정할 수 있을까요? 그러면 혹시 서로 같은 위치에 있는 서버라서 저희 EN_new의 통신간의 이점이 있을까요?

NO_DISCOVERY=1로 설정하시면 boot node에서 동적으로 다른 full node를 검색해서 추가하는 동작이 실행되지 않고 static-nodes.json에 있는 파일을 기준으로만 dial을 맺게 됩니다. 따라서 다른 노드들이 해당 노드와 연결될 수 없습니다. 만약 PN의 성능이 충분하고 네트웍 대역폭도 충분하다면 굳이 다른 노드와 연결될 필요는 없습니다만, 해당 PN의 sync가 지연되거나 네트웍 대역폭 때문에 패킷 전송이 지연될 경우, 다른 노드를 통한 블록 다운로드가 불가능하여 EN_new의 sync도 지연될 가능성이 있으니 참고 부탁드리겠습니다.

감사합니다.

문의 2번 관련하여 쌍방향으로 적지 않아도 된다고 하셨는데, 방화벽은 0.0.0.0/0 (32323, 32324) 로 다 열려있는 상황입니다. 그렇다면 저희 EN이 PN에 대해 다른 노드보다 굳이 연결할 필요가 없다고 생각해서 시도만 하고 계속 연결을 안하는 상황일까요? 관련 소스 로직 부분을 알려주시면 더 감사하겠습니다.

안녕하세요 GroundX 플랫폼팀에 Winnie입니다.

static-nodes.json에 있는 모든 주소는 30초에 한번 Dial 시도합니다. 즉, EN은 계속 시도하고 있지만, PN에서 거절고 있거나 PN에 도달하지 못하고 있습니다.
Dial 실패 원인 로그는 logger.Debug("[Dial] Failed dialing", "task", t, "err", err) (코드 위치 링크)에서 확인하실 수 있습니다.
EN을 실행하실 때, 저 부분의 log level을 Info 이상으로 올리시거나 또는 kend.conf에서 VERBOSITY=2로 수정하시면 로그로 연결 실패 원인을 파악하실 수 있습니다.

로그 확인 공유 부탁드립니다.
감사합니다. :slight_smile: