최신 Full node 설치 2편 Jussi 설정

in SteemCoinPan •  6 days ago 

안녕하세요 ayogom 입니다.
어제 최신 Full node 설치 1편 에 이어서 오늘도 Full node 설치에 대해서 설명을 해드리고자 합니다. 현재 저는 @rnt (@zzan.witnesses) 팀원으로 API Node 와 AH Node를 운영하고 있고 추가적으로 Hive mind Node 도 설치 중에 있습니다. 어제 포스팅에서는 Hive mind Node에 대해서 약 100G 정도라고 판단을 했는데, 동기화가 어느정도 끝났더니 이미 200G를 넘어선 상황입니다. 아마 300G 미만으로 되지 않을까 싶긴 한데, 아직도 동기화 중이라 정확한 데이터는 아직 공개 할 수가 없네요. Hive mind Node 의 용량에 따라 이것을 어떻게 처리 할 것인지 판단이 조금 필요할 것 같습니다. 서버 용량이 2T SSD로 어쩌면 모든 기능을 다 돌리기에는 부담스러울 수 있을 듯 해서요. 아무튼 오늘 예정이었던 Jussi Node 설정에 대해서 소개 하겠습니다.

Jussi Node 의 역활은 각각 분리되어 있는 API Node 와 AH Node 그리고 Hive mind Node를 통합하는 역활을 하고 있습니다. 즉 각각 노드로 접속을 해야 하지만, Jussi Node로 접속하면 Jussi Node가 알아서 해당 API로 전달을 해주는 역활입니다.

1. 설치.

git 을 통해 최신 Jussi 를 복사해옵니다.

git clone https://github.com/steemit/jussi.git

관련 Config 파일을 수정 합니다.

nano DEV_config.json

여기가 가장 중요한 부분입니다. 이 부분의 설정에 따라 동작하는 형태가 달라집니다. 즉 호출된 API를 어떻게 처리 시킬지 연결 하는 부분입니다.

이전에 우리는 API Node와 AH Node를 설치 하였기 때문에 그 기준으로 알려드립니다.

{
    "limits": {
     "accounts_blacklist": [
        "accounttoblock"
     ]
    },
    "upstreams": [
      {
        "name": "steemd",
        "translate_to_appbase": true,
        "urls": [
            [
                "steemd",
                "http://172.17.0.2:8091"
            ]
        ],
        "ttls": [
            [
                "steemd",
                3
            ],
            [
                "steemd.login_api",
                -1
            ],
            [
                "steemd.network_broadcast_api",
                -1
            ],
            [
                "steemd.follow_api",
                10
            ],
            [
                "steemd.market_history_api",
                1
            ],
            [
                "steemd.database_api",
                3
            ],
            [
                "steemd.database_api.get_block",
                -2
            ],
            [
                "steemd.database_api.get_block_header",
                -2
            ],
            [
                "steemd.database_api.get_content",
                1
            ],
            [
                "steemd.database_api.get_state",
                1
            ],
            [
                "steemd.database_api.get_state.params=['/trending']",
                30
            ],
            [
                "steemd.database_api.get_state.params=['trending']",
                30
            ],
            [
                "steemd.database_api.get_state.params=['/hot']",
                30
            ],
            [
                "steemd.database_api.get_state.params=['/welcome']",
                30
            ],
            [
                "steemd.database_api.get_state.params=['/promoted']",
                30
            ],
            [
                "steemd.database_api.get_state.params=['/created']",
                10
            ],
            [
                "steemd.database_api.get_dynamic_global_properties",
                1
            ]
        ],
        "timeouts": [
            [
                "steemd",
                5
            ],
            [
                "steemd.network_broadcast_api",
                0
            ]
        ]
    },
    {
            "name": "appbase",
            "urls": [
                [
                    "appbase",
                    "http://172.17.0.2:8091"
                ],
                [
                    "appbase.account_history_api",
                    "http://172.17.0.3:8092"
                ],
                [
                    "appbase.condenser_api.get_account_history",
                    "http://172.17.0.3:8092"
                ],
                [
                    "appbase.condenser_api.get_ops_in_block",
                    "http://172.17.0.3:8092"
                ],
                [
                    "appbase.condenser_api.get_followers",
                    "https://hivemind.steemitdev.com"
                ],
                [
                    "appbase.condenser_api.get_following",
                    "https://hivemind.steemitdev.com"
                ],
                [
                    "appbase.condenser_api.get_follow_count",
                    "https://hivemind.steemitdev.com"
                ],
                [
                    "appbase.condenser_api.get_discussions_by_trending",
                    "https://hivemind.steemitdev.com"
                ],
                [
                    "appbase.condenser_api.get_discussions_by_hot",
                    "https://hivemind.steemitdev.com"
                ],
                [
                    "appbase.condenser_api.get_discussions_by_promoted",
                    "https://hivemind.steemitdev.com"
                ],
                [
                    "appbase.condenser_api.get_discussions_by_created",
                    "https://hivemind.steemitdev.com"
                ],
                [
                    "appbase.condenser_api.get_discussions_by_blog",
                    "https://hivemind.steemitdev.com"
                ],
                [
                    "appbase.condenser_api.get_discussions_by_feed",
                    "https://hivemind.steemitdev.com"
                ],
                [
                    "appbase.condenser_api.get_discussions_by_comments",
                    "https://hivemind.steemitdev.com"
                ],
                [
                    "appbase.condenser_api.get_replies_by_last_update",
                    "https://hivemind.steemitdev.com"
                ],
                [
                    "appbase.condenser_api.get_trending_tags",
                    "https://hivemind.steemitdev.com"
                ],
                [
                    "appbase.condenser_api.get_discussions_by_author_before_date",
                    "https://hivemind.steemitdev.com"
                ],
                [
                    "appbase.condenser_api.get_post_discussions_by_payout",
                    "https://hivemind.steemitdev.com"
                ],
                [
                    "appbase.condenser_api.get_comment_discussions_by_payout",
                    "https://hivemind.steemitdev.com"
                ],
                [
                    "appbase.condenser_api.get_blog",
                    "https://hivemind.steemitdev.com"
                ],
                [
                    "appbase.condenser_api.get_blog_entries",
                    "https://hivemind.steemitdev.com"
                ],
                [
                    "appbase.condenser_api.get_account_votes",
                    "https://hivemind.steemitdev.com"
                ],
                [
                    "appbase.condenser_api.get_state",
                    "https://hivemind.steemitdev.com"
                ],
                [
                    "appbase.condenser_api.get_state.params=['witnesses']",
                    "http://172.17.0.3:8092"
                ],
                [
                    "appbase.condenser_api.get_state.params=['/witnesses']",
                    "http://172.17.0.3:8092"
                ],
                [
                    "appbase.condenser_api.get_state.params=['/~witnesses']",
                    "http://172.17.0.3:8092"
                ],
                [
                    "appbase.condenser_api.get_state.params=['~witnesses']",
                    "http://172.17.0.3:8092"
                ],
                [
                    "appbase.follow_api",
                    "https://hivemind.steemitdev.com"
                ],
                [
                    "appbase.tags_api",
                    "https://hivemind.steemitdev.com"
                ]
            ],
            "ttls": [
                [
                    "appbase",
                    3
                ],
                [
                    "appbase.block_api",
                    -2
                ],
                [
                    "appbase.database_api",
                    1
                ],
                [
                    "appbase.login_api",
                    -1
                ],
                [
                    "appbase.network_broadcast_api",
                    -1
                ],
                [
                    "appbase.follow_api",
                    10
                ],
                [
                    "appbase.market_history_api",
                    1
                ],
                [
                    "appbase.condenser_api",
                    3
                ],
                [
                    "appbase.condenser_api.get_block",
                    -2
                ],
                [
                    "appbase.condenser_api.get_block_header",
                    -2
                ],
                [
                    "appbase.condenser_api.get_content",
                    1
                ],
                [
                    "appbase.condenser_api.get_state",
                    1
                ],
                [
                    "appbase.condenser_api.get_state.params=['/trending']",
                    30
                ],
                [
                    "appbase.condenser_api.get_state.params=['trending']",
                    30
                ],
                [
                    "appbase.condenser_api.get_state.params=['/hot']",
                    30
                ],
                [
                    "appbase.condenser_api.get_state.params=['/welcome']",
                    30
                ],
                [
                    "appbase.condenser_api.get_state.params=['/promoted']",
                    30
                ],
                [
                    "appbase.condenser_api.get_state.params=['/created']",
                    10
                ],
                [
                    "appbase.condenser_api.get_dynamic_global_properties",
                    1
                ]
            ],
            "timeouts": [
                [
                    "appbase",
                    3
                ],
                [
                    "appbase.network_broadcast_api",
                    0
                ],
                [
                    "appbase.chain_api.push_block",
                    0
                ],
                [
                    "appbase.chain_api.push_transaction",
                    0
                ],
                [
                    "appbase.condenser_api.broadcast_block",
                    0
                ],
                [
                    "appbase.condenser_api.broadcast_transaction",
                    0
                ],
                [
                    "appbase.condenser_api.broadcast_transaction_synchronous",
                    0
                ],
                [
                    "appbase.condenser_api.get_account_votes",
                    20
                ],
                [
                    "appbase.condenser_api.get_ops_in_block.params=[2889020,false]",
                    20
                ],
                [
                    "appbase.account_history_api.get_ops_in_block.params={\"block_num\":2889020,\"only_virtual\":false}",
                    20
                ]
            ]
    }
    ]
}

현재 제 설정은 위와 같습니다. Hive mind Node를 아직 설정 하지 않았기 때문에 Hive minde 관련 호출시 https://hivemind.steemitdev.com 로 전달을 하고 있습니다.

그리고 http://172.17.0.2:8091는 제 API Node 이고, http://172.17.0.3:8092 AH Node 입니다.

현재 동작중인 API와 AH Docker의 IP를 알아야 합니다.

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "Node name"

이 주소를 위의 DEV_config.json 에 넣어주시는 겁니다.

이렇게 하고

screen -R jussi

Jussi 를 위한 별도릐 screen을 호출 합니다. 그리고 도커를 동작 시킵니다.

docker run -it --env JUSSI_UPSTREAM_CONFIG_FILE=/app/config.json -v /root/jussi/DEV_config.json:/app/config.json -p 8080:8080 steemit/jussi:latest

를 통해 동작을 시킬 수 있습니다. 다만 이 경우 백그라운드에서 되는 것이 아니기 때문에 가급적이면 screen 을 사용하시는게 좋습니다. Screen에서 다시 원래 화면으로 돌아가려면 Ctrl + A + D 으로 돌아가실 수 있습니다.

정상적으로 설정을 하셨다면 동작을 할 것입니다.
동작을 확인하는 방법으로는

curl -s --data '{"jsonrpc":"2.0", "method":"condenser_api.get_block", "params":[8675309], "id":1}' http://localhost:8080

으로 확인 할 수 있습니다.
만약 정상적이라면 아래와 같이 응답을 확인 할 수 있습니다. (https://api.steemzzang.com:8080 사용)

여기까지 해서 Jussi를 동작시켜봤습니다.
이후 도메인 설정이라든지, SSL 설정은 별도로 해주셔야 합니다.

Hive mind Node에 대한 설정은 모든 데이터가 동기화가 끝나면 작성하도록 하겠습니다.

작성 예정인 글 List

  • Nodejs 를 이용한 스팀 API 사용해보기 (계속)

누군가에게는 도움이 될 수 있는 글

스팀잇 기본 이야기

니트로스 (SCT, ZZAN 등 ) 이야기

스팀잇 심화 이야기

스팀잇 보상과 연결되는 이야기

해킹과 관련된 이야기

개발과 관련된 이야기
Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

[US$80.50](▼16%)[SONGJING]SONGJING SJ-125E 제습기 / 송징 SJ-125E 제습기 / 36평적용 / 165W 고출력 / 대용량 물탱크 / 관부가

WWW.QOO10.COM

start success go! go! go!

@banguri님이 당신을 멘션하였습니다.

https://www.steemit.com/@banguri/6-10

@ayogom transfered 10 KRWP to @krwp.burn. voting percent : 9.12%, voting power : 60.53%, steem power : 1785755.30, STU KRW : 1200.
@ayogom staking status : 825 KRWP
@ayogom limit for KRWP voting service : 1.65 KRWP (rate : 0.002)
What you sent : 10 KRWP
Refund balance : 8.35 KRWP [54506657 - c2081ad738e7d97fd6c11ef8c81d9b8db831e103]

@akiri00님이 당신을 멘션하였습니다.

https://www.steemit.com/@akiri00/2021-06-10-steemit