6. 版本升级操作指南

6.1. 概述

本文档主要描述将已在运行的chainmaker旧版本升级为新版本的步骤,正常情况下,伴随着新版发布,都会有相应的升级描述。本文档根据版本号倒序排版,即最新版本升级描述会在最前面,请读者注意。

6.2. v1.0.0 -> v1.1.x版本升级指南

6.2.1. v1.1.x版本与v1.0.0版本配置变更说明

从v1.1.x版本开始,共识节点的节点网络地址不再上链,改为只将共识节点的节点ID(NodeID)上链。目的是让节点IP发生变更时,减少运维的操作复杂度,运维人员只需修改本地chainmaker.yml文件中的网络配置即可,无需发起链配置变更交易。

6.2.1.1. 链配置项中共识节点配置变更说明

v1.0.0版本bc*.yml中共识配置及权限配置:

#共识配置
consensus:
  # 共识类型(0-SOLO,1-TBFT,3-HOTSTUFF,4-RAFT,10-POW)
  type: 1
  # 共识节点列表,组织必须出现在trust_roots的org_id中,每个组织可配置多个共识节点,节点地址采用libp2p格式
  nodes:
    - org_id: "wx-org1.chainmaker.org"
      address:
        - "/ip4/127.0.0.1/tcp/11301/p2p/QmcQHCuAXaFkbcsPUj7e37hXXfZ9DdN7bozseo5oX4qiC4"
    - org_id: "wx-org2.chainmaker.org"
      address:
        - "/ip4/127.0.0.1/tcp/11302/p2p/QmeyNRs2DwWjcHTpcVHoUSaDAAif4VQZ2wQDQAUNDP33gH"
    - org_id: "wx-org3.chainmaker.org"
      address:
        - "/ip4/127.0.0.1/tcp/11303/p2p/QmXf6mnQDBR9aHauRmViKzSuZgpumkn7x6rNxw1oqqRr45"
    - org_id: "wx-org4.chainmaker.org"
      address:
        - "/ip4/127.0.0.1/tcp/11304/p2p/QmRRWXJpAVdhFsFtd9ah5F4LDQWFFBDVKpECAF8hssqj6H"
# 权限配置(只能整体添加、修改、删除)
resource_policies:
  - resource_name: NODE_ADDR_UPDATE
    policy:
      rule: SELF # 规则(ANY,MAJORITY...,全部大写,自动转大写)
      org_list: # 组织名称(组织名称,区分大小写)
      role_list: # 角色名称(role,全部小写,自动转小写)
        - admin

v1.1.x版本bc*.yml中共识配置变更为:

#共识配置
consensus:
  # 共识类型(0-SOLO,1-TBFT,3-HOTSTUFF,4-RAFT,10-POW)
  type: 1
  # 共识节点列表,组织必须出现在trust_roots的org_id中,每个组织可配置多个共识节点
  nodes:
    - org_id: "wx-org1.chainmaker.org"
      node_id:
        - "QmcQHCuAXaFkbcsPUj7e37hXXfZ9DdN7bozseo5oX4qiC4"
    - org_id: "wx-org2.chainmaker.org"
      node_id:
        - "QmeyNRs2DwWjcHTpcVHoUSaDAAif4VQZ2wQDQAUNDP33gH"
    - org_id: "wx-org3.chainmaker.org"
      node_id:
        - "QmXf6mnQDBR9aHauRmViKzSuZgpumkn7x6rNxw1oqqRr45"
    - org_id: "wx-org4.chainmaker.org"
      node_id:
        - "QmRRWXJpAVdhFsFtd9ah5F4LDQWFFBDVKpECAF8hssqj6H"
# 权限配置(只能整体添加、修改、删除)
resource_policies:
  - resource_name: NODE_ID_UPDATE
    policy:
      rule: SELF # 规则(ANY,MAJORITY...,全部大写,自动转大写)
      org_list: # 组织名称(组织名称,区分大小写)
      role_list: # 角色名称(role,全部小写,自动转小写)
        - admin

v1.1.x版本将权限配置中NODE_ADDR_ADDNODE_ADDR_UPDATENODE_ADDR_DELETE全部改为NODE_ID_ADDNODE_ID_UPDATENODE_ID_DELETE,原NODE_ADDR_ADDNODE_ADDR_UPDATENODE_ADDR_DELETE已全部弃用。

v1.0.0版本chainmaker.yml中网络配置:

net:
  provider: LibP2P
  listen_addr: /ip4/0.0.0.0/tcp/11301
  tls:
    enabled: true
    priv_key_file: ../config/wx-org1/certs/node/consensus1/consensus1.tls.key
    cert_file:     ../config/wx-org1/certs/node/consensus1/consensus1.tls.crt

v1.1.x版本chainmaker.yml中网络配置变更为:

net:
  provider: LibP2P
  listen_addr: /ip4/0.0.0.0/tcp/11301
  # 所有共识节点的完整网络地址需要配在seeds中
  seeds:
    - "/ip4/127.0.0.1/tcp/11301/p2p/QmcQHCuAXaFkbcsPUj7e37hXXfZ9DdN7bozseo5oX4qiC4"
    - "/ip4/127.0.0.1/tcp/11302/p2p/QmeyNRs2DwWjcHTpcVHoUSaDAAif4VQZ2wQDQAUNDP33gH"
    - "/ip4/127.0.0.1/tcp/11303/p2p/QmXf6mnQDBR9aHauRmViKzSuZgpumkn7x6rNxw1oqqRr45"
    - "/ip4/127.0.0.1/tcp/11304/p2p/QmRRWXJpAVdhFsFtd9ah5F4LDQWFFBDVKpECAF8hssqj6H"
  tls:
    enabled: true
    priv_key_file: ../config/wx-org1/certs/node/consensus1/consensus1.tls.key
    cert_file:     ../config/wx-org1/certs/node/consensus1/consensus1.tls.crt

v1.1.0版本chainmaker.yml中合约事件配置:

storage:
    provider: leveldb        #合约事件功能适配支持levedb、rocksdb、mysql provider
    store_path: ../data/ledgerData1
    enable_contract_eventdb: false #是否开启合约事件存储功能, 默认为false,如果设置为true,需要配置mysql
    mysql:    #MySQL相关配置,provider选择MySQL或者enable_contract_eventdb为true时需要配置
      dsn: root:password@tcp(127.0.0.1:3306)/    #mysql的连接信息,包括用户名、密码、ip、port等,示例:root:admin@tcp(127.0.0.1:3306)
      max_idle_conns: 10    #连接池中维持的最大的空闲连接数,默认为10
      max_open_conns: 10    #最大的可用连接数,默认为10
      conn_max_lifetime: 60    #连接维持的最长时间,单位秒,默认为60

v1.1.1版本chainmaker.yml中合约事件配置变更为:

storage:
  disable_contract_eventdb: true  #是否禁止合约事件存储功能,默认为true,如果设置为false,需要配置mysql
  contract_eventdb_config:
    provider: sql                 #如果开启contract event db 功能,需要指定provider为sql
    sqldb_config:
      sqldb_type: mysql           #contract event db 只支持mysql
      dsn: root:password@tcp(127.0.0.1:3306)/  #mysql的连接信息,包括用户名、密码、ip、port等,示例:root:admin@tcp(127.0.0.1:3306)/

v1.1.1版本chainmaker.yml中存储配置如下:

storage:
  db_prefix: org01
  store_path: ../data/ledgerData1
  blockdb_config:
    provider: leveldb
    leveldb_config:
      store_path: ../data/ledgerData1
    # provider: sql
    # sqldb_config:
    #   sqldb_type:  mysql
    #   dsn:  root:passw0rd@tcp(localhost:3306)/mysql
  statedb_config:
    provider: leveldb
    leveldb_config:
      store_path: ../data/ledgerData1
    # provider: sql
    # sqldb_config:
    #   sqldb_type:  mysql
    #   dsn:  root:passw0rd@tcp(localhost:3306)/mysql
  historydb_config:
    provider: leveldb
    leveldb_config:
      store_path: ../data/ledgerData1
    # provider: sql
    # sqldb_config:
    #   sqldb_type:  mysql
    #   dsn:  root:passw0rd@tcp(localhost:3306)/mysql
  resultdb_config:
    provider: leveldb
    leveldb_config:
      store_path: ../data/ledgerData1
    # provider: sql
    # sqldb_config:
    #   sqldb_type:  mysql
    #   dsn:  root:passw0rd@tcp(localhost:3306)/mysql
  disable_contract_eventdb: true  #是否禁止合约事件存储功能,默认为true,如果设置为false,需要配置mysql
  contract_eventdb_config:
    provider: sql                 #如果开启contract event db 功能,需要指定provider为sql
    sqldb_config:
      sqldb_type: mysql           #contract event db 只支持mysql
      dsn: root:password@tcp(127.0.0.1:3306)/  #mysql的连接信息,包括用户名、密码、ip、port等,示例:root:admin@tcp(127.0.0.1:3306)/

6.2.2. 将v1.0.0版本升级为v1.1.x版本操作步骤

*写在最前面:建议所有操作都备份

  • 1.停止交易: 停止所有向节点发交易请求,即不要再让链出新块。

  • 2.确认同步: 确认现有全部节点状态已同步到一致,即块高度一致。

  • 3.停止节点: 停止所有节点服务。

  • 4.编译chainmaker: 编译v1.1.x版本的可执行文件,并替换原v1.0.0版本的可执行文件。

  • 5.修改配置: 按照相应的版本修改所有节点的chainmaker.yml,将bc*.yml中的共识节点地址添加至net:seeds:中。 bc*.yml不要修改!!! bc*.yml不要修改!!! bc*.yml不要修改!!!

  • 6.启动: 启动所有节点,观察日志有无错误信息。

  • 7.链升级成功: 正常情况下,至此版本升级成功。

  • 8.编译wasm文件: 使用和chainmaker-go相同版本的合约SDK编译新的wasm文件。

  • 9.升级合约: 使用新的合约升级以前版本的合约。

  • 10.升级配套工具: 如果有使用sdk或者cmc工具,请将sdkcmc版本升级为v1.1.x,否则可能会导致交易失败。

6.2.3. 将v1.0.0版本升级为v1.1.x版本后,需要新添加节点注意事项

1.新节点的bc*.yml文件必须与v1.0.0版本时期保持一致,无需修改为v1.1.x版本。v1.1.x版本程序已对其做了兼容,如果修改bc*.yml会导致创世块不一致,无法完成同步。

2.新节点的chainmaker.yml文件需要与v1.1.x版本保持一致,即需要将共识节点地址添加至net:seeds:配置项中。