EOS学习笔记5---EOS测试网络

迄今为止,所有使用EOS区块链进行实验的工作都是使用eosd托管所有21个区块生产者的单个实例执行的。虽然这是验证区块链功能,开发新合同或其他方面的完美有效解决方案,但它不会扩展。它也没有公开在合同和块数据必须跨多个实例共享时引发的那类问题。提供扩展能力涉及在多个主机上部署多个eosd节点,然后将其排列成一个对等(p2p)网络。组成这个网络涉及剪裁和分发配置文件,协调启动和停止以及其他任务。 手动完成这项任务非常繁琐,容易出错。幸运的是提供了一个解决方案,以下面描述的Launcher应用程序的形式提供。
测试网络的节点,网络和拓扑

在进入EOS测试网的细节之前,让我们澄清一些术语。在这份文件中,我使用“host主机”和“machine机器”这两个术语可以相互交换。主机通常归结为一个IP地址,但实际上它可能有更多。 下一个词是“node节点”。节点是配置为用作0个或更多生产者的eosd可执行文件的实例。节点和主机之间不存在一对一映射,主机可以服务多个节点,但一个节点不能跨越多个主机。 我使用“local network本地网络”来指代任何一组节点,无论是在单个主机上还是在多个节点上,都在关闭,因此访问不必离开安全的网络环境。 最后还有涉及远程主机的分布式网络的想法。这些可能是您可能无法直接访问启动和停止eosd实例的主机,但您可能希望与之建立分布式的测试网络。
 
本地主机网络
 
在单台机器上运行testnet是最快捷的入门方式。正如你将在下面看到的,这是Launcher应用程序的默认模式。您可以立即设置本地主机网络,只需告诉启动程序需要激活多少生产或非生产节点,以及可能使用的网络拓扑类型。 缺点是在单个主机上运行多个节点时需要大量硬件。此外,多个节点将在CPU周期方面相互竞争,限制真正的并发性,并且本地主机网络性能与主机间性能差异很大,即使速度很高也是如此。
 
分布式网络

活网的最具代表性的模型是将eosd节点分布在多个主机上。 Launcher应用程序能够通过使用通过ssh推送的bash脚本启动分布式节点。在这种情况下,需要额外的配置来将配置的引用替换为“localhost”或“127.0.0.1”,并将其与各个对等机器的实际主机名或IP地址相替换。

启动分布式测试网络需要操作员对配置为进行身份验证的所有远程计算机进行ssh访问,而无需用户输入密码。下面详细描述该配置。

在测试网跨越多个远程网络的情况下,可以在分布式运营商之间在外部共享通用启动器定义的配置文件,每个运营商负责启动他或她自己的本地网络。

请注意,启动器不会将eosd的实例推送到远程主机,您必须单独准备各种测试网络主机。
 
网络拓扑

网络拓扑或“形状”描述节点如何连接以共享事务和数据块,并请求相同的数据。改变网络拓扑的想法是,节点必须发送报告新事务或块的消息的次数与必须重复消息以确保所有节点知道它的次数之间存在折衷。

启动器具有基于节点间连接的两种基本不同网络“形状”的定义,这可以通过命令行选项来选择。如果您希望创建自己的自定义网络拓扑,可以通过提供json格式的文件来实现。该文件通常是启动器在“输出”模式下创建的模板的编辑版本。
 
星形网络

star.png


一个“星”旨在支持测试网络中更多的节点。在这种情况下,连接到一个节点的对等点的数量和这些节点的分布会根据网络中节点的数量而变化。
 
网状网络

mesh.png


在“网状”网络中,每个节点都连接到尽可能多的对等节点。
 
自定义网络形状
 

这是自定义部署的一个示例,其中节点群集除了通过单个交叉点以外都是隔离的。
 
启动器应用程序
为了解决在局域网或更广泛的网络中分布多个eosd节点所隐含的复杂性,启动器应用程序已创建。

基于少数命令行参数,启动器能够编写每个节点的配置文件,在对等主机之间安全地分发这些文件,然后启动eosd的多个实例。

以这种方式启动的Eosd实例将其输出记录在单个文本文件中。最后,启动器应用程序还能够关闭部分或全部测试网络。
 
运行启动器应用程序

启动程序用于配置和部署使用配置的路由相互通信的生产和非生产eosd节点。假设机器具有足够的内存和磁盘空间用于多个eosd实例,则每个节点的配置都存储在单独的目录中,允许多个节点在同一主机上处于活动状态。启动程序使用多个配置源来部署测试网络。一些命令行参数可以用来设置简单的本地网络。 为了支持部署分布式网络,启动程序将从JSON文件中读取更详细的配置。您可以使用启动程序根据您提供的命令行选项创建默认的JSON文件。编辑该文件以根据需要替换实际主机名和其他详细信息,然后重新运行提供此文件的启动程序。 目前,启动程序仅激活平台本地节点,稍后将添加dockerized节点。应该直接将生成的配置文件用于dockerized节点。
 
启动器命令行参数
launcher command line arguments:
-n [ --nodes ] arg (=1) total number of nodes to configure and
launch
-p [ --pnodes ] arg (=1) number of nodes that are producers
-d [ --delay ] arg (=0) number of seconds to wait before starting the next node. Used to simulate a person keying in a series of individual eosd startup command lines.
-s [ --shape ] arg (=star) network topology, use "star"
"mesh" or give a filename for custom
-g [ --genesis ] arg (="./genesis.json")
set the path to genesis.json
-o [ --output ] arg save a copy of the generated topology
in this file
--skip-signature EOSD does not require transaction
signatures.
-i [ --timestamp ] arg set the timestamp for the first block.
Use "now" to indicate the current time
-l [ --launch ] arg select a subset of nodes to launch.
Currently may be "all", "none", or
"local". If not set, the default is to
launch all unless an output file is
named, in which case it starts none.
-k [ --kill ] arg The launcher retrieves the previously
started process ids and signals each with the specified signum. Use 15 for a sigterm and 9 for sigkill.
-h [ --help ] print this list
需要注意的是如果testnet.json中是--shape参数,--nodes, --pnodes,和 --genesis 参数将被忽略。
 

生成的多主机测试网络配置文件


这是通过运行以下命令生成的文件:
launcher --output <filename> [other options]

在这种模式下,启动程序不会激活任何eosd实例,它会生成给定文件名的文件。这个文件是一个JSON格式的模板,提供了一个简单的方法。

本文档中描述的对象由使用ssl的助手和testnet节点描述符的集合组成。节点描述符被列为名称,值对。请注意,名称的作用既是节点描述符映射中的关键字,也是对等列表中节点的别名。例如:
{
"ssh_helper": {
"ssh_cmd": "/usr/bin/ssh",
"scp_cmd": "/usr/bin/scp",
"ssh_identity": "phil",
"ssh_args": "-i ~phil/.ssh/id-sample"
},

ssh helper字段是指向ssh和scp的路径,必要时是身份标识以及任何可选参数。
"nodes": [[
"testnet_0",{
"genesis": "./genesis.json",
"remote": true,
"ssh_identity": "",
"ssh_args": "",
"eos_root_dir": "/home/phil/blockchain/eos",
"data_dir": "tn_data_0",
"hostname": "remoteserv",
"public_name": "remoteserv",
"p2p_port": 9876,
"http_port": 8888,
"filesize": 8192,
"keys": [{
"public_key": "EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV",
"wif_private_key": "5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3"
}
],
"peers": [
"testnet_1",
"testnet_2",
"testnet_3",
"testnet_4",
"testnet_5"
],
"producers": [
"inita",
"initg",
"initm",
"inits"
]
}
],[
"testnet_1",{
该testnet.json文件的其余部分是节点描述符集合。上面的片段是由命令行programs/launcher/launcher -p6 -s mesh -o testnet.json 创建,之后编辑引用一个名为‘remoteserv’的远程主机。
 
JSON文件的元素
这个表格描述了所有在testnet.json中用到的键/值对。
Value	Description
ssh_helper a set of values used to facilitate the use of SSH and SCP
nodes a collection of descriptors defining the eosd instances used to assemble this testnet. The names used as keys in this collection are also aliases used within as placeholders for peer nodes.
ssh_helper elements	Description
ssh_cmd path to the local ssh command
scp_cmd path to the local scp command
ssh_args any additional command line arguments needed to successfully connect to remote peers
ssh_identity The user name to use when accessing the remote hosts
node elements	Description
genesis path to the genesis.json file. This should be the same file for all members of the testnet.
remote specifies whether this node is in the local network or not. This flag ties in with the launch mode command line option (-l) to determine if the local launcher instance will attempt to start this node.
ssh_identity a per-node override of the general ssh_identity defined above.
ssh_args a per-node override of the general ssh_args
eos_root_dir specifies the directory into which all eosd artifacts are based. This is required for any hosts that are not the local host.
data_dir the root for the remaining node-specific settings below.
hostname the domain name for the server, or its IP address.
public_name possibly different from the hostname, this name will get substituted for the aliases when creating the per-node config.ini file's peer list.
p2p_port combined with the public name to identify the endpoint listed on for peer connections. When multiple nodes share a host, the p2p_port is automatically incremented for each node.
http_port defines the listen endpoint for the client API services
filesize sets the capacity in megabytes for the size of the blockchain backing store file.
keys specify the authentication tokens for this node.
peers this list indicates the other nodes in the network to which this one actively connects. Since this file may be edited to alter the hostname, public name, or p2p port values, the peers list here holds aliases for the actual endpoints eventually written to the individual config.ini files.
producers this list identifies which of the producers from the genesis.json file are held by this node. Note that the launcher uses a round-robin algorithm to spread the producer instances across the producing nodes.

配置分布式服务器
 
 
该testnet.json文件ssh_helper部分包含必要的连接并发出命令到其他服务器的SSH的元素。除了对ssh_helper部分提供全局配置设置,每个节点的配置可以提供最高权限身份和连接参数。还需要提供服务器至少复制EOSD可执行的,与genesis.json文件到适当的位置,相对于一些命名为EOS的根目录。举例来说如果定义EOS的根目录为/home/phil/blockchain/eos,启动器将贯穿各种shell命令使用SSH,最后运用SCP复制一个config.ini文件到远程的数据目录。
 
运行时构件
 
启动器应用程序为每个节点实例创建一个单独的日期和配置目录。文件以tn_data_<n>命名,
Per-Node File	Description
config.ini The eosd configuration file.
eosd.pid The process ID of the running eosd instance.
blockchain/* The blockchain backing store
blocks/* The blockchain log store
stderr.txt The cerr output from eosd.
stdout.txt The cout output from eosd.
一个名为 "last_run.json"的文件A file called "last_run.json" contains hints for a later instance of the launcher to be able to kill local and remote nodes when run with -k 15.
 
 因为EOS还在不断的开发完善中,所以该文档可能会过时,我创建了一个EOS爱好者社区,www.eos.top ,QQ群:499860264,微信群秘:fly258xx  ,欢迎加入讨论关于EOS的任何问题。
 
 
 
 

0 个评论

要回复文章请先登录注册