超級帳本多服務器fabric部署

                                            fabric多服務器集羣部署
系統環境:
    centos 7.3git

服務器地址列表:
    A:10.36.8.106 peer0.org1.example.com   
    B: 10.36.8.107 peer1.org1.example.com
    C: 10.36.8.108 peer0.org2.example.com
    D: 10.36.8.109 peer1.org2.example.com
    E: 10.36.8.222 orderer.example.comgithub

軟件環境:
    每臺服務器都得進行單服務器多節點測試經過(見上篇)
    鏡像下載過程能夠優化,只下載一臺而後拷貝到其它機器
    docker save `docker images | awk 'NR>1{print $1}'` -o images
    scp images hosts:/tmp
    其它機器加載docker鏡像
    docker load -i images
    
    單服務器測試經過後必須關掉全部的容器,執行此命令便可
    ./network_setup.sh down
    docker

多服務器開始配置:
    A:
        1 修改 /etc/hosts,添加路由映射
          10.36.8.222 orderer.example.com
        2 修改docker-compose-cli.yaml(目錄/opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli)
          在默認的狀況下,docker-compose-cli.yaml會啓動6個service(容器),它們分別爲 peer0.org1.example.com、 peer1.org1.example.com、 peer0.org2.example.com、 
          peer1.org2.example.com、 orderer.example.com 和 cli,由於每臺機器只運行與之對應的一個節點,所以須要註釋掉無需啓動的 service。
        2.1
          除 peer0.org1.example.com 和 cli service 外,其餘 service 所有註釋。
        2.2
          在 cli 的 volumes 中加入映射關係以下(添加這個的目的主要是後面會產生一個鏈的認證文件在peer目錄下,方便獲取):
          - ./peer/:/opt/gopath/src/github.com/hyperledger/fabric/peer/ 
          - /etc/hosts:/etc/hosts
        2.3
          註釋 cli 中的 depends_on 和 command : 
          depends_on: 
          #- orderer.example.com 
          - peer0.org1.example.com 
          #- peer1.org1.example.com 
          #- peer0.org2.example.com 
          #- peer1.org2.example.com 
          #command: /bin/bash -c ‘./scripts/script.sh CHANNELNAME;sleepTIMEOUT’
        3 修改 base/peer-base.yaml,添加 volumes(方便容器能訪問到order):
          volumes: 
            -/etc/hosts:/etc/hosts
    
    B:
        1 修改 /etc/hosts,添加路由映射
          10.36.8.222 orderer.example.com
          10.36.8.106 peer0.org1.example.com
        2 修改docker-compose-cli.yaml(目錄/opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli)
        2.1 
          相似VM1,除 peer1.org1.example.com 和 cli service 外,其餘 service 所有註釋。
        2.2 
          在 cli 的 volumes 中加入映射關係:
          - ./peer/:/opt/gopath/src/github.com/hyperledger/fabric/peer/ 
          - /etc/hosts:/etc/hosts
        2.3
          註釋cli中的 depends_on 和 command: 
          depends_on: 
          #- orderer.example.com 
          #- peer0.org1.example.com 
          - peer1.org1.example.com 
          #- peer0.org2.example.com 
          #- peer1.org2.example.com 
          #command:/bin/bash -c ‘./scripts/script.sh CHANNELNAME;sleepTIMEOUT
        2.4
           修改cli中的環境變量 
          CORE_PEER_ADDRESS=peer1.org1.example.com:7051
        3 修改base/peer-base.yaml,同VM1的修改。
    
    C:
        1 修改 /etc/hosts,添加路由映射
          10.36.8.222 orderer.example.com
          10.36.8.106 peer0.org1.example.com
        2 修改docker-compose-cli.yaml(目錄/opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli)
        2.1 
          相似VM1,除peer0.org2.example.com 和 cli service 外,其餘 service 所有註釋。
        2.2 
          在 cli 的 volumes 中加入映射關係:
          - ./peer/:/opt/gopath/src/github.com/hyperledger/fabric/peer/ 
          - /etc/hosts:/etc/hosts
        2.3
          註釋cli中的 depends_on 和 command: 
          depends_on: 
          #- orderer.example.com 
          #- peer0.org1.example.com 
          #- peer1.org1.example.com 
          - peer0.org2.example.com 
          #- peer1.org2.example.com 
          #command:/bin/bash -c ‘./scripts/script.sh CHANNELNAME;sleepTIMEOUT
        2.4
           修改cli中的環境變量(CORE_PEER_TLS_CERT_FILE、CORE_PEER_TLS_KEY_FILE這兩個變量不要修改)
          CORE_PEER_LOCALMSPID=」Org2MSP」 
          CORE_PEER_ADDRESS=peer0.org2.example.com:7051 
          CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt 
          CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
        3 修改base/peer-base.yaml,同VM1的修改。
    
    D:
        1 修改 /etc/hosts,添加路由映射
          10.36.8.222 orderer.example.com
          10.36.8.108 peer0.org2.example.com
        2 修改docker-compose-cli.yaml(目錄/opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli)
        2.1 
          相似VM1,除peer1.org2.example.com和cliservice 外,其餘 service 所有註釋。
        2.2 
          在 cli 的 volumes 中加入映射關係:
          - ./peer/:/opt/gopath/src/github.com/hyperledger/fabric/peer/ 
          - /etc/hosts:/etc/hosts
        2.3
          註釋cli中的 depends_on 和 command: 
          depends_on: 
          #- orderer.example.com 
          #- peer0.org1.example.com 
          #- peer1.org1.example.com 
          #- peer0.org2.example.com 
          - peer1.org2.example.com 
          #command:/bin/bash -c ‘./scripts/script.sh CHANNELNAME;sleepTIMEOUT
        2.4
           修改cli中的環境變量(CORE_PEER_TLS_CERT_FILE、CORE_PEER_TLS_KEY_FILE這兩個變量不要修改)
          CORE_PEER_LOCALMSPID=」Org2MSP」 
          CORE_PEER_ADDRESS=peer1.org2.example.com:7051 
          CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt 
          CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
        3 修改base/peer-base.yaml,同VM1的修改。
    
    E:
        修改docker-compose-cli.yaml 
        除orderer外的其餘 service 所有註釋,即只啓動 orderer 
    
    至此基本配置完成centos

多服務器開始啓動
    1:上述機器任選一臺
        cd /opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli
        執行 ./generateArtifacts.sh ,產生channel-artifacts/ 和 crypto-config/兩個目錄(裏面有 orderer 和 peer 的證書、私鑰和以及用於通訊加密的tls證書等文件,它經過 configtx.yaml 配置文件生成)
        圖片
        把這兩個目錄拷貝到其它全部機器
        tar -zcf cert.tar.gz channel-artifacts crypto-config
        scp cert.tar.gz  10.36.8.106:/tmp
        不管其它機器是否有都直接覆蓋(由於全部機器證書必須一致)
        \cp -ar channel-artifacts/* /opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli/channel-artifacts/
        \cp -ar crypto-config/* /opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli/crypto-config/
    2: 先啓動order節點E
        docker-compose  -f docker-compose-cli.yaml up -d
        經過docker ps 查看容器orderer.example.com是否存在
    
    3:A和B同屬組織Org1MSP,C和D同屬組織Org2MSP,可是A是B的初始節點,C是D的初始節點,因此得先啓動A和C
        我這裏先啓動A
        docker-compose  -f docker-compose-cli.yaml up -d
        docker ps 查看 cli 和peer0.org1.example.com  容器是否存在
        進入cli容器
        docker exec -it cli bash
        用於給order認證的證書
        ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
        建立mychannel,會在當前目錄下產生一個mychannel.block文件,其餘節點加入此鏈的話須要此證書文件,因此須要拷貝至其它全部節點的相同目錄下
        peer channel create -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/channel.tx --tls true --cafile $ORDERER_CA
        把 peer0.org1.example.com 加入到 mychannel 中:
        peer channel join -b mychannel.block
        更新 mychannel 中 org1 的 anchor peer 的信息: 
            peer channel update -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/Org1MSPanchors.tx --tls true  --cafile $ORDERER_CA
        安裝 chaincode 示例 chaincode_example02 到 peer0.org1.example.com 中:
            peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
        這時候 chaincode 代碼已經安裝到了 peer0 節點上,但並未實例化運行。接下來先配置好其餘節點
        
        B:
        docker-compose  -f docker-compose-cli.yaml up -d
        docker exec -it cli bash
        peer channel join -b mychannel.block
        peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
        
        C:
        docker-compose  -f docker-compose-cli.yaml up -d
        docker exec -it cli bashbash

        ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
        peer channel join -b mychannel.block
        peer channel update -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/Org2MSPanchors.tx --tls true  --cafile $ORDERER_CA
        peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
        
        D:
        docker-compose  -f docker-compose-cli.yaml up -d
        docker exec -it cli bash
        peer channel join -b mychannel.block
        peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
    
    至此都已啓動完畢服務器

多服務器開始實例化並調試:
    1    除order外人選一臺實例化
        peer chaincode instantiate -o orderer.example.com:7050  --tls  true  --cafile $ORDERER_CA -C mychannel -n mycc -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "OR('Org1MSP.member','Org2MSP.member')"
        去其餘全部節點查詢均可以查看到剛實例化的值
        peer chaincode query -C mychannel -n mycc -c '{"Args":["query","b"]}'tcp

        
        而且會發現都生成了一個新的容器
        docker ps 測試

        
    2    發生交易:invoke
        peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile $ORDERER_CA -C mychannel -n mycc -c '{"Args":["invoke","a","b","50"]}'
        從新查詢:實例化的變量是否發生改變
        peer chaincode query -C mychannel -n mycc -c '{"Args":["query","b"]}'優化

        
    3    更新
        安裝新版本
        peer chaincode install -n mycc -v 2.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
        新版裏初始化兩個變量
        peer chaincode upgrade -o orderer.example.com:7050 --tls true --cafile $ORDERER_CA -C mychannel -n mycc -v 2.0 -c '{"Args":["init","c","10","d","20"]}'
        經過新版本去查如今的值以及以前的值是否都正常
        peer chaincode query -C mychannel -n mycc -v 2.0 -c '{"Args":["query","c"]}'
        peer chaincode query -C mychannel -n mycc -v 2.0 -c '{"Args":["query","a"]}'加密

        

         而且會產生一個2.0的新容器

        
        其餘節點經過orderer來同步更新,可是其餘節點想要修改和訪問,必須得先安裝最新的chaincode,不然會報錯
        peer chaincode install  -n mycc -v 2.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02

        

        

當上述有的節點失敗時能夠從新來過
    fabric根下修改Makefile(/opt/gopath/src/github.com/hyperledger/fabric)
    註釋 docker  rmi 刪除鏡像這行
    docker stop `docker ps |awk 'NR>1{print $1}'`;docker rm `docker ps -a|awk 'NR>1{print $1}'`
    make clean
mychannel下建立其餘chaincode
    全部節點安裝chaincode:
        peer chaincode install -n twocc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
    任選節點實例化:
        ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
        peer chaincode instantiate -o orderer.example.com:7050  --tls  true  --cafile $ORDERER_CA -C mychannel -n twocc -v 1.0 -c '{"Args":["init","e","100","f","200"]}' -P "OR('Org1MSP.member','Org2MSP.member')"
    只是每一次建立一個新的chaincode實例化時會產生一個新的容器,其餘的節點在首次查詢時也會建立這個心的容器,因此須要等待必定的時間    

    注:一、由於是內網操做域名得寫host,因此只要加必要的就行,本地啓動覺得ipv6啓動的,若是本地host寫本身基於ipv4的,將會出現沒法bind
       host-192-168-1-100 journal: panic: listen tcp 10.36.8.106:7052: bind: cannot assign requested address
    二、刪除重來的時候記得把以前的建立chaincode鏡像也刪掉,否則若是從新初始化以前的會報錯
    三、若是order證書從新載入了,得重啓order以及全部節點相關的容器
    四、若是某個組織初始化的那一臺出現問題,則重啓這個節點的全部容器,同時得刪除以前建立的鏈容器及鏡像,從新進入cli控制檯查詢會
       從新建立這個鏈的容器,不然這個組織下的其餘節點能查詢修改,可是不會有變化,由於收不到最新的order消息

docker操做命令
    docker rmi -f   鏡像id    強制刪除鏡像
    docker rmi -f  `docker images |awk 'NR > 1{ print $3}'`
    docker rm  容器id或名字   刪除已中止的容器,運行狀態的容器得先stop
    docker  start/stop/restart name or  id
    docker ps -a |grep name |awk '{print $NF}'
    docker stop `docker ps |awk 'NR>1{print $1}'`;docker rm `docker ps -a|awk 'NR>1{print $1}'`

    docker ps -a  獲取全部的容器信息, -q 獲取全部的容器id(包括全部狀態的)     docker inspect 容器id     docker logs 容器id    獲取對這個容器操做的日誌信息     docker commit 容器id job1   將容器的狀態保存爲鏡像,鏡像名稱只能取字符[a-z]和數字[0-9]     docker簡書:https://www.jianshu.com/p/2217cfed29d7

相關文章
相關標籤/搜索