DMQノードの設定(ベータ版)
DMQ(Decentralized Message Queue)は、Mithril Signerが署名を分散型の方法で交換するためのプロトコルです。 Mithrilネットワークの堅牢性とスケーラビリティを向上させ、DMQが十分に普及することで複数のAggregatorを同時に稼働できるようになり、Mithrilプロトコル全体の可用性向上につながります。
情報
以下の構成により、DMQ NodeをMainnet環境にデプロイできます。
最新安定版のDMQ Node 0.7.0.0とMithril Signer 1.1.6の組み合わせです。
補足
以下の手順は、Mithril Signerノードの設定を行っている方のみ対象です。
Mithril Signerのバージョンを確認します。
mithril-signer -V1.1.6であることを確認し、以降の手順へ進んでください。
mithril-signer 1.1.6+23e124dインストールバージョン
| Cardano Node | Mithril Signer | Squid | DMQ Node |
|---|---|---|---|
| 11.0.1 | 1.1.6 | 7.6 | 0.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 --versiondmq-node version: 0.7.0.0ソケット・設定ディレクトリ作成
DMQ Node設定ディレクトリの作成
設定ファイル格納ディレクトリの作成
mkdir -p $HOME/mithril/dmqDMQ 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"
}
}
}
EOFcat > $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 tcpsudo ufw reloadDMQ 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 tcpsudo ufw allow from $relay2_ipv4 to any port 6161 proto tcpsudo ufw reload自身の2台のRelayサーバーで稼働するDMQ NodeのIPアドレスまたはDNS名を調べ、それぞれrelay1_dmq_ip_or_dns、relay2_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.jsonsystemd サービス作成
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
EOFcat > $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.servicesudo 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 -fDMQ 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/.bashrcDMQ 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 6161LISTEN 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/nullgrep DMQ_NODE_SOCKET_PATH $HOME/mithril/mithril-signer.envDMQ_NODE_SOCKET_PATH=/home/<USER>/mithril/dmq/socketMithril 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=catDMQ Nodeの更新
システムのアップデート
sudo apt update && sudo apt upgrade -ydmq-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 --versiondmq-node version: 0.7.0.0dmq-nodeの起動
sudo systemctl start dmq-nodedmq-nodeのログを確認
sudo journalctl -u dmq-node -fLast updated on