查看原文
其他

WAX技术指南第七期:如何构建WAX状态历史节点

NFT Gamer NFT Gamer 2023-02-23
点击蓝字关注我们

原文:EOSphere (Ross Dold) 
翻译:WAX Eastern (NFT Gamer)

在之前的技术指南文章中,我们介绍了构建可靠的 WAX 主网 API 和 P2P 节点的过程。


然而,还有另一种节点实现类型对于许多 WAX 主网服务(例如 Hyperion Full History 和 Atomic Assets API)的运行至关重要,那就是状态历史服务(State-History service)。


第 7 期 WAX 技术指南将向您展示如何构建、配置和部署节点以提供状态历史功能,也称为状态历史协议 (SHIP) 节点。


01


如何设置 WAX 状态历史节点


nodeos 使用 State-History 插件来捕获有关区块链状态(在本例中为 WAX 主网)的历史数据,并将此数据存储为外部可读的平面文件格式。


此插件会打开一个 websocket 接口,多个同时的外部服务(如 Hyperion 和 Atomic)可以利用该接口简单有效地读取此数据。


考虑到外部服务在 SHIP 节点上的依赖程度,公会提供可靠的可扩展服务至关重要,该服务可以扩展以满足 WAX 主网不断扩张的需求。


本文将介绍一个当前有效(2022 年 9 月)并由 EOSphere Guild 使用的示例,EOSphere Guild 为我们自己和其他公会的服务提供多个 websocket 连接。


02


主网要求


硬件

  • 4 核 CPU / 4Ghz+

  • (1) 256GB+ 磁盘/企业级 SSD 或 NVMe(高耐久性要求)

  • (2) 10TB+ 磁盘/SAS 或 SATA 都可以,但首选 SSD 或 NVMe

目前(2022 年 9 月) blocks 和 state-history目录仅占用不到 8TB 的磁盘空间。
2.1T ./blocks5.7T ./state-history7.8T .


  • 128GB+ 内存


操作系统

  • Ubuntu 18.04

  • Ubuntu 20.04(推荐)

  • Ubuntu 22.04


互联网

  • 现代宽带/光纤连接(100Mb/s 同步及以上)


03


准备操作系统环境


在构建和配置 WAX 软件之前,本例中的操作系统环境 Ubuntu 20.04 需要针对性能进行配置,并承担负载。


04


泽字节文件系统 (ZFS)


此节点构建使用两个独立的 SAS 磁盘来平衡磁盘 IO 并为 /blocks 和 /state-history 目录提供更实惠的存储选项,这些目录目前总计 8TB,并且还在不断增长。


磁盘 1 是高速企业级 SSD 或 NVMe,将是用于 WAX 软件所有配置和状态文件的操作系统磁盘。状态文件是IO 密集型的,基于消费者的 SSD 的寿命将由于大量写入而变短,因此需要使用高耐久性企业 SSD 或 NVMe。


注意:如果您有足够的可用空间,可以在内存中运行这些状态文件,这个主题将在以后的文章中介绍。


在此示例中,磁盘 1 将运行默认的操作系统 Ext4 文件系统,该系统已在 Ubuntu 20.04 安装期间同时安装。


磁盘 2 是大容量 SATA 或 SAS 磁盘,将托管 /blocks 和 /state-history 目录。这些目录的 IO 需求远低于状态文件,速度较慢、容量较大的基于心轴的磁盘仍然适用。


在此示例中,磁盘 2 将运行 ZFS 文件系统,这将给我们带来两个主要好处。ZFS 将使我们能够使用 LZ4 压缩,并将通过自适应替换缓存 (ARC) 改进磁盘 IO。压缩将仅用于 /blocks 目录(目前是 1.3x 的增益),因为对已经优化的状态历史平面文件没有任何好处。


使用以下配置在磁盘 2 上运行 ZFS:

#Install ZFS> sudo apt-get install zfsutils-linux#Locate the Disk 2 device name> lsblk#Create ZFS Pool called "datavolume" on device "sdb"> sudo zpool create datavolume /dev/sdb#Enable LZ4 compression> sudo zfs set compression=lz4 datavolume#Disable ZFS access time Updates> sudo zfs set atime=off datavolume#Set ARC to only cache metadata> sudo zfs set primarycache=all datavolume#Set the mountpoint location to your preferred location> sudo zfs set mountpoint=/home/eosphere/datavolume datavolume#Create the specific folders for /blocks and /state-history> mkdir /home/eosphere/datavolume/blocks> mkdir /home/eosphere/datavolume/state-history#Set specific mountpoint for /blocks and /state-history> sudo zfs create -o mountpoint=/home/eosphere/datavolume/blocks datavolume/blocks> sudo zfs create -o mountpoint=/home/eosphere/datavolume/state-history datavolume/state-history#Turn off lz4 compression on the state-history mountpoint> sudo zfs set compression=none datavolume/state-history#Verify ZFS Settings> zfs get all


05


网络时间协议 (NTP)


对于全球网状区块链来说,跨所有节点同步时间至关重要。


Chrony 是一个优秀的 NTP 客户端,非常适合 WAX 主网的需求。


安装、配置和验证如下:

#Install Chrony> sudo apt install chrony#If necessary manually add local peers, these are AU servers> sudo nano /etc/chrony/chrony.conf
server 0.pool.ntp.orgserver 1.pool.ntp.orgserver 2.pool.ntp.orgserver 3.pool.ntp.org#Restart Chrony> sudo /etc/init.d/chrony restart#Verify> chronyc sources -v> chronyc tracking#Set your local timezone if necessary> sudo timedatectl set-timezone Australia/Perth



06


堆栈限制和打开文件


WAX 软件内存寻址和生产主网节点将收到的 API 请求数量要求增加 Ubuntu 20.04 默认堆栈限制和打开文件数量。


配置并验证提高的限制,如下所示:

> sudo nano /etc/systemd/system.conf#Append the following configurationDefaultLimitNOFILE=64000 DefaultLimitSTACK=65536000#Restart server and verify> ulimit -a



07


构建软件


WAX 软件源自开源 Antelope 软件,但经过修改以适应 WAX 协议网络的需要。


目前,WAX Block Producer 接受的软件构建和版本是 v3.1.0wax01 ,由 EOS 阿姆斯特丹公会成员 cc32d9 创建。


最新的 wax 构建标签目前在 cc32d9 Github 上可用。


构建过程


此示例使用 Ubuntu Linux 按照以下过程从源代码构建 WAX 软件:

> cd ~> sudo apt install -y file> git clone https://github.com/cc32d9/wax-leap.git> cd wax-leap> git checkout v3.1.0.wax01 > git submodule update --init --recursive> sudo bash scripts/install_deps.sh> mkdir build# If necessary supplement $(nproc) below with the number of jobs your server can sustain, I suggest 4GB RAM required / job> nice bash scripts/pinned_build.sh ~/wax-leap/build/leap-deps ~/wax-leap/build $(nproc)# Binaries are located in ~/wax-leap/build/programs



08


配置


现在已经编译了一个干净的 WAX 软件版本,让我们开始为 WAX 主网操作配置状态历史。


要配置和启动节点,将使用  nodeos , nodeos 是在每个 WAX 协议网络节点上运行的核心服务守护程序。


nodeos 可以配置为处理智能合约、验证交易、生成包含有效交易的块,并确认块以将它们记录在区块链上。


nodeos 的主要操作功能是: 将其作为区块生产者、网络 API 端点、P2P 种子节点或状态历史节点运行。通常在 WAX 主网等繁忙的网络上,您会想要在物理上分散的服务器上分离这些功能。


在此 WAX 主网示例中,您将使您的节点连接到其他网络对等点,并作为可用于 API 和 Websocket 连接的状态历史 (SHIP) 节点。


nodeos 需要两个文件来连接到对等点并在 WAX 主网上运行:


Config.ini


按照以下命令运行不带配置的 nodeos 来创建默认的 config.ini 

> mkdir ~/waxdata> cd ~/wax-leap/build/programs/nodeos> ./nodeos --data-dir ~/waxdata --config-dir ~/waxdata


然后您将能够编辑新创建的 config.ini 并查看所有可用参数:

> cd ~/waxdata> nano config.ini


现在编辑 config.ini 并添加以下配置设置:

# the location of the blocks directory on Disk 2blocks-dir = /home/eosphere/datavolume/blockswasm-runtime = eos-vm-jitchain-state-db-size-mb = 131072chain-state-db-guard-size-mb = 1024read-mode = headhttp-server-address = 0.0.0.0:8888access-control-allow-origin = *access-control-allow-headers = Origin, X-Requested-With, Content-Type, Accepthttp-max-response-time-ms = 100verbose-http-errors = truehttp-validate-host = falsep2p-listen-endpoint = 0.0.0.0:9876# 3dkrenderwax: FI, wax-peerp2p-peer-address = peer.3dkrender.com:9880
# 3dkrenderwax: FI, queryp2p-peer-address = query.3dkrender.com:9880
# amsterdamwax: NL, Amsterdamp2p-peer-address = wax.eu.eosamsterdam.net:9101
# amsterdamwax: US, Washington, D.C.p2p-peer-address = waxp2p.us.eosamsterdam.net:9101
# blokcrafters: CA, Montreal, Quebecp2p-peer-address = wax-peer-ca.blokcrafters.io:9876
# blokcrafters: FI, Helsinki, Uusimaap2p-peer-address = wax-peer-eu.blokcrafters.io:9876
# bp.box: KY, Cayman Islandsp2p-peer-address = wax.defibox.xyz:9966
# bp.wecan: GB, Londonp2p-peer-address = seed2-wax-mainnet.wecan.dev:14998
# bp.wecan: US, NewYorkp2p-peer-address = seed3-wax-mainnet.wecan.dev:14998
# cryptolions1: DE, Germany-Finlandp2p-peer-address = wax.cryptolions.io:9876
# dapplica: DE, Germany-Finlandp2p-peer-address = wax.dapplica.io:9876
# eosauthority: DE, Falkensteinp2p-peer-address = node-wax.eosauthority.com:10301
# eosauthority: FI, Helsinkip2p-peer-address = node-wax-p2p.eosauthority.com:10301
# eosdacserver: GB, United Kingdomp2p-peer-address = wax-p2p.eosdac.io:29876
# eosdublinwow: FI, Finlandp2p-peer-address = wax.p2p.eosdublin.io:9876
# eoseouldotio: JP, Seoulp2p-peer-address = p2p.wax.eoseoul.io:29876
# eosphereiobp: CA, Beauharnoisp2p-peer-address = peer1-wax.eosphere.io:9876
# eosphereiobp: CA, Beauharnoisp2p-peer-address = peer2-wax.eosphere.io:9876
# greeneosiobp: DE, Germanyp2p-peer-address = p2p1.wax.greeneosio.com:9876
# guild.nefty: DE, Germanyp2p-peer-address = p2p-node1.neftyblocks.com:9876
# guild.nefty: FI, Finlandp2p-peer-address = p2p-node2.neftyblocks.com:9876
# ledgerwiseio: FI, LBp2p-peer-address = waxp2p.ledgerwise.io:21877
# nation.wax: CA, Canadap2p-peer-address = wax.seed.eosnation.io:9876
# oneinacilian: GB, United Kingdomp2p-peer-address = p2p.oiac.io:9876
# sentnlagents: GB, United Kingdomp2p-peer-address = waxp2p.sentnl.io:9876
# tokengamerio: DE, Germanyp2p-peer-address = peer2.wax.tgg.gg:9876
# waxhiveguild: FI, Finnlandp2p-peer-address = peer1.hivebp.io:9876
# waxhiveguild: DE, Germanyp2p-peer-address = peer2.hivebp.io:9876
# waxmadrid111: DE, SEEDp2p-peer-address = wax-seed.eosiomadrid.io:9876
# waxswedenorg: SE, Swedenp2p-peer-address = p2p.waxsweden.org:35777# PeerList - https://validate.eosnation.io/wax/reports/config.htmlagent-name = "<yourname> WAX Mainnet State-History"
sync-fetch-span = 500state-history-dir = /home/eosphere/datavolume/state-historytrace-history = truechain-state-history = truestate-history-endpoint = 0.0.0.0:8080plugin = eosio::http_pluginplugin = eosio::state_history_pluginplugin = eosio::chain_pluginplugin = eosio::chain_api_plugin



Genesis.json


这些是 WAX 主网上每个新的起始节点所需的初始状态参数。创建文件如下:

> cd ~/waxdata> nano genesis.json


将以下参数添加到 WAX 公共主网的 genesis.json  文件中:

{ "initial_timestamp": "2019-06-05T12:00:00.000", "initial_key": "EOS8i2pkwtv2JmdYWNJdcy5BcJ7wCE5q6mpE1hwT25HdgHMzeRday", "initial_configuration": { "max_block_net_usage": 1048576, "target_block_net_usage_pct": 1000, "max_transaction_net_usage": 524288, "base_per_transaction_net_usage": 12, "net_usage_leeway": 500, "context_free_discount_net_usage_num": 20, "context_free_discount_net_usage_den": 100, "max_block_cpu_usage": 500000, "target_block_cpu_usage_pct": 2000, "max_transaction_cpu_usage": 150000, "min_transaction_cpu_usage": 100, "max_transaction_lifetime": 3600, "deferred_trx_expiration_window": 600, "max_transaction_delay": 3888000, "max_inline_action_size": 4096, "max_inline_action_depth": 4, "max_authority_depth": 6 }}



09


运行节点


现在已经配置了config.ini 并创建了初始 WAX 主网链参数 genesis.json ,您现在可以加入网络并同步节点。


使用Screen即使在断开连接时也能使您的会话保持活动状态,用法如下:

#Create a new screen session> screen -US wax #Disconnect screen session> ctrl-a+d #Reconnect screen session> screen -r wax


使用指向配置、数据目录和创世文件的指针运行节点:

> cd ~/wax-leap/build/programs/nodeos> ./nodeos --data-dir ~/waxdata --config-dir ~/waxdata --genesis-json ~/waxdata/genesis.json --disable-replay-opts


您的 WAX 主网节点现在将开始与配置的对等节点同步,并赶上 WAX 主网链头块。


在撰写本文时(2022 年 9 月),这可能需要长达一个月的时间才能从创世同步完整的区块。如果您选择一些距离较近的对等点以限制对等点过载并确保低延迟,也可能会有所帮助。


当您的节点从链的开头开始同步时,它将在 /blocks 和 /state-history 目录中构建日志和索引文件。


您的节点将可通过 http 端口 8888 进行查询访问,并通过 ws 端口 8080 进行状态历史访问。


END


往期回顾BREAK AWAY


真金不怕火炼——FTX黑天鹅下链游依然坚挺


Alien Worlds挖矿创收新渠道


WAX 2022年回顾及2023路线图更新



防失联,加入橘猫玩家公会:


Telegram:https://t.me/NFTGamerChina

Discord:https://discord.gg/NU82sXeTNs







阅读原文,获取详细信息


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存