SPO JAPAN GUILD
ステークプール運用

DMQノードの設定(ベータ版)

DMQ(Decentralized Message Queue)は、Mithril Signerが署名を分散型の方法で交換するためのプロトコルです。 Mithrilネットワークの堅牢性とスケーラビリティを向上させ、DMQが十分に普及することで複数のAggregatorを同時に稼働できるようになり、Mithrilプロトコル全体の可用性向上につながります。

情報

以下の構成により、DMQ NodeをMainnet環境にデプロイできます。
最新安定版のDMQ Node 0.7.0.0Mithril Signer 1.1.6の組み合わせです。

補足

以下の手順は、Mithril Signerノードの設定を行っている方のみ対象です。

Mithril Signerのバージョンを確認します。

mithril-signer -V

1.1.6であることを確認し、以降の手順へ進んでください。

期待される表示例:
mithril-signer 1.1.6+23e124d

インストールバージョン

Cardano NodeMithril SignerSquidDMQ Node
11.0.11.1.67.60.7.0.0

DMQ Nodeのインストール

システムのアップデート

sudo apt update && sudo apt upgrade -y

作業ディレクトリの作成

mkdir -p $HOME/git/mithril/dmq
cd $HOME/git/mithril/dmq

ビルド済みバイナリファイルのダウンロード

wget -O dmq-node.tar.gz https://github.com/IntersectMBO/dmq-node/releases/download/0.7.0.0/dmq-node-linux.tar.gz

解凍してtar.gzファイルの削除

tar -xzf dmq-node.tar.gz --strip-components=2 result/bin
rm dmq-node.tar.gz

バイナリファイルをシステムフォルダへコピー

sudo cp dmq-node /usr/local/bin/dmq-node

システムに反映されたバージョン確認

dmq-node --version
期待される表示例:
dmq-node version: 0.7.0.0

ソケット・設定ディレクトリ作成

DMQ Node設定ディレクトリの作成

設定ファイル格納ディレクトリの作成

mkdir -p $HOME/mithril/dmq

DMQ Nodeソケットパス

grep -q '^export DMQ_NODE_SOCKET_PATH=' $HOME/.bashrc || echo "export DMQ_NODE_SOCKET_PATH=\"$HOME/mithril/dmq/socket\"" >> $HOME/.bashrc
source $HOME/.bashrc

設定内容の確認

echo $DMQ_NODE_SOCKET_PATH
期待される表示例:
/home/<USER>/mithril/dmq/socket

設定ファイルの作成

cat > $HOME/mithril/dmq/${NODE_CONFIG}-dmq-config.json << EOF
{
  "NetworkMagic": 2912307721,
  "CardanoNetworkMagic": 764824073,
  "CardanoNodeSocket": "${CARDANO_NODE_SOCKET_PATH}",
  "ShelleyGenesisFile": "$NODE_HOME/${NODE_CONFIG}-shelley-genesis.json",
  "PeerSharing": true,
  "PeerSelectionCounters": true,
  "TraceOptions": {
    "": {
      "backends": [
        "Stdout MachineFormat",
        "PrometheusSimple suffix 0.0.0.0 12000"
      ],
      "severity": "Info"
    }
  }
}
EOF
cat > $HOME/mithril/dmq/${NODE_CONFIG}-dmq-config.json << EOF
{
  "NetworkMagic": 2912307721,
  "CardanoNetworkMagic": 764824073,
  "CardanoNodeSocket": "${CARDANO_NODE_SOCKET_PATH}",
  "ShelleyGenesisFile": "$NODE_HOME/${NODE_CONFIG}-shelley-genesis.json",
  "PeerSharing": false,
  "PeerSelectionCounters": true,
  "TraceOptions": {
    "": {
      "backends": [
        "Stdout MachineFormat",
        "PrometheusSimple suffix 0.0.0.0 12000"
      ],
      "severity": "Info"
    }
  }
}
EOF

設定ファイルが正しいJSON形式で作成されていることを確認します。

jq . $HOME/mithril/dmq/${NODE_CONFIG}-dmq-config.json

トポロジーファイル作成

クラウドのセキュリティグループでファイアウォールを開けている場合

ufwは使わず、コンソールでBPサーバーからDMQ通信に使用するIPのみ、RelayサーバーのDMQポート(例: 6161)へのインバウンド通信を許可してください。

sudo ufw allow from <BPのIP> to any port 6161 proto tcp
sudo ufw reload

DMQ Bootstrap PeerのIPとポート番号をすでに入力しているので、そのまま実行してください。

cat > $HOME/mithril/dmq/${NODE_CONFIG}-dmq-topology.json << EOF
{
  "bootstrapPeers": [],
  "localRoots": [
    {
      "accessPoints": [
        {
          "address": "35.233.75.24",
          "port": 6161
        }
      ],
      "advertise": true,
      "trustable": false,
      "hotValency": 1
    }
  ],
  "peerSnapshotFile": null,
  "publicRoots": []
}
EOF

クラウドのセキュリティグループでファイアウォールを開けている場合

ufwは使わず、コンソールでRelayサーバーからDMQ通信に使用するIPのみ、BPサーバーのDMQポート(例: 6161)へのインバウンド通信を許可してください。

relay1_ipv4=
relay2_ipv4=
sudo ufw allow from $relay1_ipv4 to any port 6161 proto tcp
sudo ufw allow from $relay2_ipv4 to any port 6161 proto tcp
sudo ufw reload

自身の2台のRelayサーバーで稼働するDMQ NodeIPアドレスまたはDNS名を調べ、それぞれrelay1_dmq_ip_or_dnsrelay2_dmq_ip_or_dnsに代入してください。

relay1_dmq_ip_or_dns=
relay2_dmq_ip_or_dns=
cat > $HOME/mithril/dmq/${NODE_CONFIG}-dmq-topology.json << EOF
{
  "bootstrapPeers": [],
  "localRoots": [
    {
      "accessPoints": [
        {
          "address": "${relay1_dmq_ip_or_dns}",
          "port": 6161
        },
        {
          "address": "${relay2_dmq_ip_or_dns}",
          "port": 6161
        }
      ],
      "advertise": false,
      "trustable": false,
      "hotValency": 2
    }
  ],
  "peerSnapshotFile": null,
  "publicRoots": []
}
EOF

設定ファイルが正しいJSON形式で作成されていることを確認します。

jq . $HOME/mithril/dmq/${NODE_CONFIG}-dmq-topology.json

systemd サービス作成

cat > $HOME/mithril/dmq/dmq-node.service << EOF
[Unit]
Description=DMQ relay service
Wants=network-online.target
After=network-online.target cardano-node.service
StartLimitIntervalSec=0

[Service]
User=${USER}
Type=simple
WorkingDirectory=$NODE_HOME
Restart=always
RestartSec=60
LimitNOFILE=32768
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=dmq-node
ExecStart=/usr/local/bin/dmq-node --configuration-file $HOME/mithril/dmq/${NODE_CONFIG}-dmq-config.json --topology-file $HOME/mithril/dmq/${NODE_CONFIG}-dmq-topology.json --local-socket ${DMQ_NODE_SOCKET_PATH} --host-addr $(curl -s https://api.ipify.org) --port 6161

[Install]
WantedBy=multi-user.target
EOF
cat > $HOME/mithril/dmq/dmq-node.service << EOF
[Unit]
Description=DMQ block producer service
Wants=network-online.target
After=network-online.target cardano-node.service
StartLimitIntervalSec=0

[Service]
User=${USER}
Type=simple
WorkingDirectory=$NODE_HOME
Restart=always
RestartSec=60
LimitNOFILE=32768
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=dmq-node
ExecStart=/usr/local/bin/dmq-node --configuration-file $HOME/mithril/dmq/${NODE_CONFIG}-dmq-config.json --topology-file $HOME/mithril/dmq/${NODE_CONFIG}-dmq-topology.json --local-socket ${DMQ_NODE_SOCKET_PATH} --host-addr $(curl -s https://api.ipify.org) --port 6161

[Install]
WantedBy=multi-user.target
EOF

システムディレクトリへ配置

sudo cp $HOME/mithril/dmq/dmq-node.service /etc/systemd/system/dmq-node.service
sudo chmod 644 /etc/systemd/system/dmq-node.service

サービス設定反映

sudo systemctl daemon-reload

自動起動登録して起動

sudo systemctl enable dmq-node --now

状態確認

sudo systemctl status dmq-node --no-pager
期待される表示例:
● dmq-node.service - DMQ xxx service
~
     Active: active (running)

ログの確認

journalctl -u dmq-node -f

DMQ Peerとの接続状態を確認します。

sudo journalctl -u dmq-node -n 200 -o cat | grep 'HandshakeSuccess'

HandshakeSuccessに関するログが出力されていることを確認します。

エイリアス設定

echo alias dmqnode='"journalctl -u dmq-node -f"' >> $HOME/.bashrc
source $HOME/.bashrc

DMQ Node の動作確認

ソケットファイルの確認

ls -l ${DMQ_NODE_SOCKET_PATH}
期待される表示例:
srwxr-xr-x 1 <USER> <USER> 0 xxx xx xx:xx /home/<USER>/mithril/dmq/socket

サービスポート確認

sudo ss -lntp | grep 6161
期待される表示例:
LISTEN 0      8       xxx.xxx.xxx.xxx:6161       0.0.0.0:*    users:(("dmq-node",pid=***,fd=***))

Mithril Signer との連携

Mithril Signer が DMQ Node を利用するよう設定します。

この章は、BPで「DMQ Nodeのインストール」から順番に設定を完了してから実行してください。

設定内容の確認

echo $DMQ_NODE_SOCKET_PATH

/home/<USER>/mithril/dmq/socket

grep -q '^DMQ_NODE_SOCKET_PATH=' $HOME/mithril/mithril-signer.env || echo "DMQ_NODE_SOCKET_PATH=${DMQ_NODE_SOCKET_PATH}" | sudo tee -a $HOME/mithril/mithril-signer.env > /dev/null
grep DMQ_NODE_SOCKET_PATH $HOME/mithril/mithril-signer.env
期待される表示例:
DMQ_NODE_SOCKET_PATH=/home/<USER>/mithril/dmq/socket

Mithril Signer を再起動

sudo systemctl restart mithril-signer

状態確認

sudo systemctl status mithril-signer --no-pager
期待される表示例:
● mithril-signer.service - Mithril Signer service
~
     Active: active (running)

ログ確認

journalctl -u mithril-signer -f --output=cat

DMQ Nodeの更新

システムのアップデート

sudo apt update && sudo apt upgrade -y

dmq-nodeの停止

sudo systemctl stop dmq-node

既存のdmqフォルダの削除

rm -rf $HOME/git/mithril/dmq

作業ディレクトリの作成

mkdir -p $HOME/git/mithril/dmq
cd $HOME/git/mithril/dmq

ビルド済みバイナリファイルのダウンロード

wget -O dmq-node.tar.gz https://github.com/IntersectMBO/dmq-node/releases/download/0.7.0.0/dmq-node-linux.tar.gz

解凍してtar.gzファイルの削除

tar -xzf dmq-node.tar.gz --strip-components=2 result/bin
rm dmq-node.tar.gz

バイナリファイルをシステムフォルダへコピー

sudo cp dmq-node /usr/local/bin/dmq-node

システムに反映されたバージョン確認

dmq-node --version
期待される表示例:
dmq-node version: 0.7.0.0

dmq-nodeの起動

sudo systemctl start dmq-node

dmq-nodeのログを確認

sudo journalctl -u dmq-node -f

Last updated on

Cookieの使用について

当サイトでは、ドキュメントの効果測定と利用状況の把握のため、Google Analytics を使用しています。

同意すると、分析用 Cookie が有効になります。