【区块链】HyperLedger Besu Tessera集群服务

在真正说Besu客户端之前还有一个需要提一下的就是Tessera集群。按照高可用的设计理念,区块链的每个节点都应该包含以下三个服务Tessera、Besu和EthSigner。这三者分别管控不同的内容,Tessera是主管隐私交易,Besu为区块链主体,而EthSigner则是区块签署。
Tessera服务部署起来相当简单,按照惯例先下载Docker镜像。

docker pull quorumengineering/tessera:22.1.4

其实下载下来后的镜像已经可以用了,但是Tessera默认只支持H2数据库,为了使Tessera配合项目技术栈,将采用MySQL数据库替换掉默认的H2,为此需要将MySQL驱动上传到镜像内部的指定位置:

# 官方示例
cp some-jdbc-driver.jar tessera-[version]/lib/

官方文档给出的替换位置与Docker镜像中驱动存放位置不同这里需要提醒一下。其次需要用Dockerfile将驱动重新打到镜像里面:

root@node203:/home/paohe/Documents/blockchain/tessera/config/drive# ls
Dockerfile  mysql-connector-java-8.0.20.jar

将mysql-connector跟Dockerfile放在同一个目录中,其中Dockerfile内容如下:

FROM quorumengineering/tessera:22.1.4
MAINTAINER Ray "[email protected]"
ADD mysql-connector-java-8.0.20.jar /tessera/lib/

之后将镜像重新打包并上传到私库

root@node203:~# docker tag quorumengineering/tessera:22.1.4-mysql 192.168.100.218/library/yzh/tessera-mysql:22.1.4
root@node203:~# docker push 192.168.100.218/library/yzh/tessera-mysql:22.1.4
The push refers to repository [192.168.100.218/library/yzh/tessera-mysql]
86946c390a63: Pushed 
8b3bdee2c963: Pushed 
bc256e4ceff2: Pushed 
1d7e6f739980: Pushed 
e3246bb07b94: Pushed 
12cbeae46147: Pushed 
22.1.4: digest: sha256:6b10f8409b5150a3fd04098185e9bdf197411d26168921b0956b2f283f26466d size: 1587

之后就可以重新checkout下来使用了。
在实际使用前,每一台节点服务器都需要创建10把交易密钥,密钥不属于任何人和组织,主要用于数据上链使用。

docker run \
-v /home/yzh/Documents/blockchain/tessera/data:/home/data \
192.168.100.218/library/yzh/tessera-mysql:22.1.4 \
-keygen -filename \
/home/data/node_key1,/home/data/node_key2,/home/data/node_key3,/home/data/node_key4,/home/data/node_key5,\
/home/data/node_key6,/home/data/node_key7,/home/data/node_key8,/home/data/node_key9,/home/data/node_key10

上面执行的是密钥本地生成CLI命令,这里注意需要将本地目录挂载出来不然会拿不到生成的密钥内容的。在密钥生成完毕后可以使用 docker rm -f ${containerid} 来删除当前容器(当然了这里可能有同事会说使用 --rm 不行么就不用手工删除了。是的,当时没有注意到…) .当交易密钥生成完毕后就可以编写配置文件 tessera_config.json ,如下图:

{
    
    
  "mode": "orion",
  "useWhiteList": false,
  "jdbc": {
    
    
    "username": "<<database_username>>",
    "password": "<<database_password>>",
    "url": "jdbc:mysql://192.168.100.167:3506/besu",
    "autoCreateTables": true
  },
  "serverConfigs": [
    {
    
    
      "app": "ThirdParty",
      "serverAddress": "http://192.18.0.203:9101",
      "communicationType": "REST"
    },
    {
    
    
      "app": "Q2T",
      "serverAddress": "http://192.18.0.203:9102",
      "sslConfig": {
    
    
        "tls": "OFF"
      },
      "communicationType": "REST"
    },
    {
    
    
      "app": "P2P",
      "serverAddress": "http://192.18.0.203:9000",
      "sslConfig": {
    
    
        "tls": "OFF"
      },
      "communicationType": "REST"
    }
  ],
  "peer": [
    {
    
    "url": "http://192.18.0.202:9000"},
    {
    
    "url": "http://192.18.0.204:9000"},
    {
    
    "url": "http://192.18.0.205:9000"}
  ],
  "keys": {
    
    
    "keyData": [
      {
    
    
        "privateKeyPath": "/home/data/node_key1.key",
        "publicKeyPath": "/home/data/node_key1.pub"
      },
      {
    
    
        "privateKeyPath": "/home/data/node_key2.key",
        "publicKeyPath": "/home/data/node_key2.pub"
      },
      {
    
    
        "privateKeyPath": "/home/data/node_key3.key",
        "publicKeyPath": "/home/data/node_key3.pub"
      },
      {
    
    
        "privateKeyPath": "/home/data/node_key4.key",
        "publicKeyPath": "/home/data/node_key4.pub"
      },
      {
    
    
        "privateKeyPath": "/home/data/node_key5.key",
        "publicKeyPath": "/home/data/node_key5.pub"
      },
      {
    
    
        "privateKeyPath": "/home/data/node_key6.key",
        "publicKeyPath": "/home/data/node_key6.pub"
      },
      {
    
    
        "privateKeyPath": "/home/data/node_key7.key",
        "publicKeyPath": "/home/data/node_key7.pub"
      },
      {
    
    
        "privateKeyPath": "/home/data/node_key8.key",
        "publicKeyPath": "/home/data/node_key8.pub"
      },
      {
    
    
        "privateKeyPath": "/home/data/node_key9.key",
        "publicKeyPath": "/home/data/node_key9.pub"
      },
      {
    
    
        "privateKeyPath": "/home/data/node_key10.key",
        "publicKeyPath": "/home/data/node_key10.pub"
      }
    ]
  },
  "alwaysSendTo": []
}

配置文件中只有ip地址是需要注意的,这个配置文件来自于node203服务器,所以各位可以留意一下相关的配置。配置文件编写完成后就可以开始启动Tessera服务,如下图:

docker run -itd \
-p 9000:9000 \
-p 9101:9101 \
-p 9102:9102 \
--network besu_swarm \
--ip 192.18.0.205 \
-v /home/yzh/Documents/blockchain/tessera/config:/home/config \
-v /home/yzh/Documents/blockchain/tessera/data:/home/data \
--name tessera \
192.168.100.218/library/yzh/tessera-mysql:22.1.4 \
-configfile /home/config/tessera_config.json

至此Tessera配置完毕。


调整内容

由于besu区块链实际应用场景发生改变,因此Tessera也做相应的配置变动 。先通过docker run --rm进行密钥的生成,但是这次只生成一个密钥即可(单租户模式)并且密钥将存放在besu区块链主目录下tessera目录下 :

docker run --rm \
-v /home/yzh/Documents/blockchain/besu/tessera:/home/data \
192.168.100.218/library/yzh/tessera-mysql:22.1.4 \
-keygen -filename /home/data/ptx_key

当然了,既然变成了单租户模式那么config文件也要做相应的修改,如下:

{
    
    
  "mode": "orion",
  "useWhiteList": false,
  "jdbc": {
    
    
     "username": "<<database_username>>",
     "password": "<<database_password>>",
     "url": "jdbc:mysql://192.168.100.167:3506/besu",
     "autoCreateTables": true
  },
  "serverConfigs": [
    {
    
    
      "app": "ThirdParty",
      "serverAddress": "http://192.18.0.203:9101",
      "communicationType": "REST"
    },
    {
    
    
      "app": "Q2T",
      "serverAddress": "http://192.18.0.203:9102",
      "sslConfig": {
    
    
              "tls": "OFF"
        },
      "communicationType": "REST"
    },
    {
    
    
      "app": "P2P",
      "serverAddress": "http://192.18.0.203:9000",
      "sslConfig": {
    
    
              "tls": "OFF"
        },
      "communicationType": "REST"
    }
  ],
  "peer": [
    {
    
    "url": "http://192.18.0.202:9000"},
    {
    
    "url": "http://192.18.0.204:9000"},
    {
    
    "url": "http://192.18.0.205:9000"}
  ],
  "keys": {
    
    
    "keyData": [
            {
    
       
                "privateKeyPath": "/home/data/ptx_key.key",
                "publicKeyPath": "/home/data/ptx_key.pub"
            }
    ]
  },
  "alwaysSendTo": []
}

这里的路径要跟生成密钥保持一致之后就能够启动Tessera了,启动命令基本没有变只是/home/data路径发生了变动,如下:

docker run -itd \
-p 9000:9000 \
-p 9101:9101 \
-p 9102:9102 \
--network besu_swarm \
--ip 192.18.0.203 \
-v /home/yzh/Documents/blockchain/tessera/config:/home/config \
-v /home/yzh/Documents/blockchain/besu/tessera:/home/data \
--name tessera \
192.168.100.218/library/yzh/tessera-mysql:22.1.4 \
-configfile /home/config/tessera_config.json

猜你喜欢

转载自blog.csdn.net/kida_yuan/article/details/129152187