Hyperledger Fabric 基于Kafka的多機部署

官方fabric的更新速度還是相對較快的,v1.0跟v1.1還是有一些差異的吃型,由于當(dāng)前要上生產(chǎn)的時候發(fā)現(xiàn)v1.1“更好”一點,所以升級到了v1.1僚楞,所以做了相應(yīng)的改動勤晚。

本工程v2版本更新內(nèi)容如下:

1枉层、增加了couchdb、ca節(jié)點赐写;
2鸟蜡、增加數(shù)據(jù)持久化配置;
3挺邀、升級適配fabric1.1
需要先升級fabric環(huán)境揉忘,重新拉取fabric,拉取相應(yīng)的docker鏡像

一端铛、環(huán)境準備

本文實戰(zhàn)的前置條件:

    1.安裝部署了 fabric 泣矛;
    2.成功運行fabric  e2e_cli單機模式;(直接運行example腳本即可)
    3.單機部署禾蚕,可參考文章:http://www.reibang.com/p/4ae6d070ddbb

單機部署比較簡單您朽,基本就是docker、go安裝和鏡像拉取换淆、案例拉取哗总,運行腳本即可。

這里簡單再講下安裝環(huán)境:

1倍试、安裝docker讯屈、docker-compose、go县习、gcc涮母、git,這個可參考以上鏈接
2准颓、創(chuàng)建一個目錄:/opt/gopath/src/github.com/hyperledger ,拉取最新的fabric: git clone https://github.com/hyperledger/fabric.git
3哈蝇、進入fabric,運行scripts/bootstrap.sh 拉取鏡像
4攘已、拉取完成后炮赦,make release
5、進入examples/e2e_cli  運行./network_setup.sh up 最終看到all good 即可样勃,記得下次運行前吠勘,先./network_setup.sh down 
6、大功告成

升級:

嘗試過只拉取鏡像峡眶,fabric不拉取最新的剧防,結(jié)果發(fā)現(xiàn)有些配置會不一樣導(dǎo)致程序報錯,所以建議重新拉取一下fabric 然后再拉去下鏡像

操作系統(tǒng):centos7.0辫樱;

二峭拘、目標

? ? ? ?本案例旨在部署包含3個orderer節(jié)點、4個peer節(jié)點(兩個組織)的farbic基礎(chǔ)網(wǎng)絡(luò)架構(gòu);
? ? ? ?排序服務(wù)使用多進程的kafka共識:其中包括4個kafka節(jié)點和3個zookeeper節(jié)點鸡挠;
? ? ? ?peer節(jié)點狀態(tài)數(shù)據(jù)庫用的是couchdb辉饱,所以包括了4個couchdb節(jié)點;
? ? ? ?使用ca服務(wù)器拣展,每個組織一個ca服務(wù)器彭沼,所以包括了2個ca節(jié)點;
? ? ? ?基礎(chǔ)網(wǎng)絡(luò)穩(wěn)定后备埃,就不可以全心投入智能合約研發(fā)和頂層業(yè)務(wù)定制姓惑,后者才是重點。

部署情況:

10.0.200.111機器:
    |-orderer1.lychee.com
    |-ca0.org1.lychee.com

10.0.200.113機器:
    |-orderer2.lychee.com
    |-peer0.org1.lychee.com
    |-z1   (zookeeper)
    |-k1   (kafka)
    |-couchdb0.org1.lychee.com

10.0.200.114機器:
    |-orderer3.lychee.com
    |-peer1.org1.lychee.com
    |-z2
    |-k2
    |-couchdb1.org1.lychee.com

10.0.200.115機器:
    |-peer0.org2.lychee.com
    |-z3
    |-k3
    |-couchdb0.org2.lychee.com

10.0.200.116機器:
    |-peer1.org2.lychee.com
    |-k4
    |-ca0.org2.lychee.com
    |-couchdb1.org2.lychee.com

三按脚、文件說明

? ? ? ?先睹為快于毙,將工程clone到本地

  git clone https://github.com/skylinelxw/chain-project.git
文件截圖.jpg

? ? ? ?部署最終要的是要理解,不然每次遇到問題就會沒有頭緒辅搬。
? ? ? ?文件主要分三類:證書相關(guān)望众、docker容器相關(guān)和幫助類腳本;

1伞辛、證書相關(guān)文件

? ? ? ?區(qū)塊鏈中一個比較重要的特性就是安全、防篡改夯缺,所以證書就必不可少蚤氏;比較常見的證書創(chuàng)建工具是openssl,fabric有自己的一個證書生成工具:cryptogen踊兜;每個通道的創(chuàng)世區(qū)塊是需要預(yù)先生成的竿滨,fabric提供的工具是configtxgen;
? ? ? ?cryptogen 可以指定配置文件:crypto-config-3o4p.yaml捏境,這個文件定義了有多少個orderer和組織于游,每個組織有多少個peer;
? ? ? ?configtxgen 默認使用:configtx.yaml垫言,這個文件描述了通道有多少個組織加入贰剥,以及排序服務(wù)屬性、區(qū)塊大小等等筷频;
? ? ? ?我們把這個配置放在了CentOs-111服務(wù)器上了蚌成,所以要去centos-111/e2e_cli文件夾中查看

2、docker容器相關(guān)文件

? ? ? ?docker啟動可以使用docker-compose凛捏,指定配置文件担忧;配置文件中則包含了容器名稱、環(huán)境變量坯癣、端口映射瓶盛、文件夾映射、容器啟動后的立即運行的命令等等;可參考:http://www.reibang.com/p/00c5939a64af 查看每個字段的含義惩猫;要注意文件映射和cli服務(wù)的環(huán)境變量芝硬!
? ? ? ?docker配置文件又可層層包含,將可共用的部分單獨制定一個文件帆锋,名稱可自定義吵取,但要注意別寫錯,比如base中的文件锯厢;

文件包括:
    docker-compose-orderer.yaml  orderer容器配置文件
        |-base/docker-compose-base.yaml
            |-base/orderer-base.yaml
            |-base/peer-base.yaml

    docker-compose-peer.yaml  peer容器配置文件
        |-base/docker-compose-base.yaml
            |-base/orderer-base.yaml
            |-base/peer-base.yaml

    docker-zk.yaml   zookeeper容器配置文件
        |-base/kafka-base.yaml

    docker-kafka.yaml kafka容器配置文件
        |-base/kafka-base.yaml

    docker-compose-ca.yaml ca配置文件
        主要配置了ca的根證書(記得修改為實際的皮官,否則ca會掛),ca服務(wù)器的管理員賬戶和密碼也就是所謂的admin/adminpw实辑,生產(chǎn)的時候改成自己知道的就好

    base/docker-compose-base.yaml  基礎(chǔ)配置文件
    base/orderer-base.yaml  基礎(chǔ)配置文件
    base/peer-base.yaml  基礎(chǔ)配置文件
3捺氢、幫助腳本類文件

? ? ? ?此類文件就是IBM寫的一些幫助腳本,腳本中包含了證書生成命令剪撬、創(chuàng)世區(qū)塊生成命令摄乒、通道創(chuàng)建命令、peer加入通道命令残黑、鏈碼安裝馍佑、實例化、調(diào)用等等腳本梨水;這些命令都是可以單獨拆分運行的拭荤,所以非常建議細讀這些腳本命令!疫诽!

    download-dockerimages.sh 這個腳本是拉取docker fabric相關(guān)鏡像的用的舅世,只是在最初部署的時候會用,這里沒有用到奇徒;
    generateArtifacts-3o4p.sh 這腳本是創(chuàng)建證書和通道創(chuàng)始區(qū)塊用的雏亚,可攜帶一個通道名稱參數(shù):
    ./generateArtifacts-3o4p.sh yourchannel 其中yourchannel是通道名稱;
        |- cryptogen  generate --config=./crypto-config-3o4p.yaml 創(chuàng)建證書命令
        |- configtxgen -profile TwoOrgsOrdererGenesis2 -outputBlock ./channel-artifacts/genesis.block 創(chuàng)建創(chuàng)世區(qū)塊
        |- configtxgen -profile TwoOrgsChannel2 -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID yourchannel 創(chuàng)建創(chuàng)世區(qū)塊
        |- configtxgen -profile TwoOrgsChannel2 -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP 創(chuàng)建創(chuàng)世區(qū)塊
        |- configtxgen -profile TwoOrgsChannel2 -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP 創(chuàng)建創(chuàng)世區(qū)塊
    
    腳本運行后會生成根證書摩钙、msp證書罢低、orderer證書、peer證書腺律、tls證書等等和區(qū)塊相關(guān)文件奕短,即:channel-artifacts和crypto-config文件夾內(nèi)容,可放在任何一個節(jié)點運行匀钧,生成后按照需要分發(fā)到不同的節(jié)點翎碑;

    /centos-113/e2e_cli/scripts/script.sh  通道創(chuàng)建命令、peer加入通道命令之斯、鏈碼安裝日杈、實例化、調(diào)用等等腳本,這個就是具體實踐了莉擒;基本算是命令的集合酿炸,每個命令執(zhí)行前都要先設(shè)置環(huán)境變量;看下函數(shù):
        |- createChannel 創(chuàng)建通道
        |- joinChannel 加入通道
        |- updateAnchorPeers 0 更新錨點
        |- installChaincode 2 安裝鏈碼
        |- instantiateChaincode 2 實例化鏈碼
        |- chaincodeQuery 0 100 鏈碼查詢
        |- chaincodeInvoke 0 鏈碼操作

    每個函數(shù)建議都去細看下涨冀,理解為主填硕;

四、部署運行

1鹿鳖、先clone到本地扁眯,然后修改實際IP地址
git clone https://github.com/skylinelxw/chain-project.git

主要修改docker配置文件中的IP地址信息,其他暫且可以不變翅帜。

2姻檀、根據(jù)自己的需要重新生成證書(可選)

? ? ? ?案例中創(chuàng)建的通道名稱是 sunshine,如果重新生成涝滴,則需要將生成的證書替換現(xiàn)有的證書绣版;

3、分發(fā)文件

? ? ? ?將各個機器的配置文件分發(fā)到各個機器上歼疮,機器也需要安裝一樣的環(huán)境杂抽;

4、按順序啟動 (主要節(jié)點部署情況)

   a. zookeeper是一個集群插件韩脏,所以可以單獨先啟動默怨;
    docker-compose -f docker-zk.yaml up -d  其中-d是后臺運行的意思,如果要看日志可以加--verbose 參數(shù)
    檢查:docker ps 每臺機器可查看到一個docker的容器:z1
    實在不放心可進入容器看zk狀態(tài):
        docker exec -it z1 bash
        ./bin/zkServer.sh status
            ZooKeeper JMX enabled by default
            Using config: /conf/zoo.cfg
            Mode: follower
        
   b. kafka 啟動依賴于zk集群;
    docker-compose -f docker-kafka.yaml up -d
    分別在每臺機器上啟動

   c. orderer 排序服務(wù)啟動
    docker-compose -f docker-compose-orderer.yaml up -d
    分別在每臺機器上啟動骤素,可以使用:
    docker logs orderer1.lychee.com 查看日志 

   d. peer 組織節(jié)點啟動
    docker-compose -f docker-compose-peer.yaml up -d
    分別在每臺機器上啟動
5、運行測試腳本

? ? ? ?測試腳本的修改目前只修改了org1的peer0節(jié)點的腳步愚屁,即centos-113上的scripts中的文件济竹;

   進入centos-113節(jié)點:
    docker exec -it lycheecli bash 進入lycheecli客戶端容器
    ./scripts/script.sh sunshine 運行測試腳本;

出現(xiàn)============ All GOOD, End-2-End execution completed ============ 就大功告成霎槐;

五送浊、可能遇到的問題

1、當(dāng)需要更換證書或通道時丘跌,需要stop且rm掉容器袭景,zookeeper可以不動,如果重復(fù)使用一個通道名闭树,則需要連同kafka一起干掉耸棒;
docker stop orderer2.lychee.com peer0.org1.lychee.com k1
docker rm orderer2.lychee.com peer0.org1.lychee.com k1

2、重復(fù)使用同一個通道名稱可能造成kafka識別問題报辱,需要連同kafka一起干掉重建

3与殃、注意看運行的日志,如果創(chuàng)建通道就有問題,則可能是hosts配置錯誤或證書配置問題幅疼,干掉重來米奸;

4、如果日志已經(jīng)創(chuàng)建成功爽篷,則看運行到哪一部悴晰,解決問題后,手動修改script.sh文件逐工,注釋掉已運行成功的函數(shù)铡溪;

5、如果要修改lychee.com 域钻弄,則需要修改證書生成配置文件和各個節(jié)點的文件夾映射關(guān)系佃却,這個地方需要細心!窘俺!

6饲帅、運行過程中,嘗試看對應(yīng)節(jié)點的日志
docker logs peerx.orgx.lychee.com

7瘤泪、鏟掉重來灶泵,報錯問題
因為最新的配置增加了數(shù)據(jù)持久化,所以需要每次

8对途、 BAD_REQUEST -- error authorizing update: error validating DeltaSet: invalid mod_policy for element [Policy] /Channel/Application/Writers: mod_policy not set
鏟掉重來可以解決赦邻,非常有可能是第一次搭建沒有刪除干凈
9、ca啟動后一會就宕機的原因是docker.yaml中的文件名稱配置問題

10实檀、'' has invalid keys: capabilities

11惶洲、創(chuàng)世區(qū)塊通道tx生成時,x509問題膳犹,這個是之前舊證書混淆導(dǎo)致般贼,刪除歷史的即可

還有一些設(shè)計或問題詳細描述見:
http://www.reibang.com/p/baaa828577e6

持續(xù)整理中……

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末宏蛉,一起剝皮案震驚了整個濱河市拢驾,隨后出現(xiàn)的幾起案子噪叙,更是在濱河造成了極大的恐慌,老刑警劉巖豺旬,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钠惩,死亡現(xiàn)場離奇詭異,居然都是意外死亡族阅,警方通過查閱死者的電腦和手機篓跛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來坦刀,“玉大人举塔,你說我怎么就攤上這事绑警。” “怎么了央渣?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵计盒,是天一觀的道長。 經(jīng)常有香客問我芽丹,道長北启,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任拔第,我火速辦了婚禮咕村,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蚊俺。我一直安慰自己懈涛,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布泳猬。 她就那樣靜靜地躺著批钠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪得封。 梳的紋絲不亂的頭發(fā)上埋心,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天,我揣著相機與錄音忙上,去河邊找鬼拷呆。 笑死,一個胖子當(dāng)著我的面吹牛疫粥,可吹牛的內(nèi)容都是我干的茬斧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼梗逮,長吁一口氣:“原來是場噩夢啊……” “哼啥供!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起库糠,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎涮毫,沒想到半個月后瞬欧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡罢防,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年艘虎,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咒吐。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡野建,死狀恐怖属划,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情候生,我是刑警寧澤同眯,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站唯鸭,受9級特大地震影響须蜗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜目溉,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一明肮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧缭付,春花似錦柿估、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至烙丛,卻和暖如春舅巷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背河咽。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工钠右, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人忘蟹。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓飒房,卻偏偏與公主長得像,于是被迫代替她去往敵國和親媚值。 傳聞我的和親對象是個殘疾皇子狠毯,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容