Setup Worker Node (Docker) Hyperledger Cello — #HLC Part 3

3 min readSep 20, 2018

Setup Worker Node ให้กับ HLC โดยใช้แพลตฟอร์ม docker

คำเตือน: บทความเรื่อง HLC นี้สำหรับคนที่พอจะรู้ หรือเคยลองเล่น Hyperledger Fabric มาบ้างแล้ว เนื่องจากในบทความเกี่ยวกับ HLC นี้ผมจะไม่อธิบายการสร้าง Network ต่างๆของ Hyperledger Fabric แต่จะบอกเพียงว่ามันเรียกใช้อย่างไรบ้างเท่านั้น

ต่อจากครั้งที่แล้วหลังจากเราได้ Setup Master Node เรียบร้อยแล้ว

เรามาทำการสร้าง Worker Node กันดีกว่าครับ เหมือนเดิมครับ ผมลองเล่นที่ gcloud โดยผมมี instance ที่ลง Debian9, Docker CE และ docker-compose ไว้ ซึ่งเป็นคนละตัวกับ instance ที่ลง Master Node นะครับ จากนั้น Clone Cello มาครับ

git clone http://gerrit.hyperledger.org/r/cello && cd cello

แล้วให้เราเซ็ท Docker Daemon ก่อนครับ

# config file /lib/systemd/system/docker.service[Service]
ExecStart=/usr/bin/dockerd -H fd:// -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375 --default-ulimit=nofile=8192:16384 --default-ulimit=nproc=8192:16384

เสร็จแล้วให้เรารัน systemctl daemon-reload; systemctl restart docker เพื่อ restart docker service แล้วให้เรากลับไปที่ Master Node แล้วลอง ส่ัง docker -H xx.xx.xx.xx:2375 info (xx.xx.xx.xx = IP ของ Worker Node) ดูครับ ว่าได้ข้อมูลของ docker จาก Worker Node มาหรือป่าว ถ้าได้แล้วแสดงว่า setup ถูกต้องแล้ว

กลับมาที่ Worker Node ครับ ให้เรารันคำสั่ง MASTER_NODE=xx.xx.xx.xx make setup-wordker จะได้ประมาณนี้

เรียบร้อย! Setup Worker Node ขั้นตอนต่อไปเรามาลองทดสอบกันดีกว่า ว่าจะใช้งานได้หรือไม่

ขั้นแรก ให้เราเข้าไปที่ Operator Dashboard ที่ พอร์ต 8080 แล้วเข้าไปที่ Create New Host

เมื่อ Create สำเร็จจะได้แบบนี้

ให้เราทำการสร้าง Chain ต่อ โดยผมจะสร้าง fabric-1.2 เป็นแบบ SOLO เมื่อเรากด Submit สร้างแล้วระบบจะไปสร้าง Hyperledger Fabric ที่ Worker Node แล้วให้เราเช็คดูว่า health ขึ้น OK หรือป่าว ถ้าขึ้นแสดงว่าสร้างสำเร็จครับ

ขั้นด้วยปัญหานิดนึงนะครับ ถ้าใครอยากทำต่อให้ข้าม session ปัญหาข้างล่างไปครับ

ปัญหาที่ผมเคยบอกจาก part ที่แล้ว ว่าทำไมผมต้องรัน Mode dev เนื่องจาก ผมลองรัน make start ที่ Master Node แล้วทำตามขั้นตอนทุกอย่าง จะมีจุดนี้ที่ health จะขึ้นว่า Fail การที่ health check เป็น Fail ทำให้ไม่สามารถ add chain ในหน้า User Dashboard ได้ ซึ่งผมได้ทำลอง Debug หลายๆจุดแล้ว การรัน Mode dev นั้น container จะไปรันคำสั่ง python dashboard.py ส่วน Mode ธรรมดานั้น จะรัน gunicorn -w 1 — work-class eventlet -b 0.0.0.0:8080 dashboard:app แล้วผลการ health check โดยผ่าน lib socket ออกมาไม่เหมือนกันตามรูป

health check : รัน Server ผ่าน gunicorn
health check : รัน Server ผ่าน python dashboard.py ( MODE=dev )

ซึ่งผมยังหาสาเหตุไม่ได้จริงๆ ใครรู้รบกวนแนะนำผมด้วยนะครับ

ขั้นตอนต่อไปคือเราจะ add chain ในหน้า User Dashboard เมื่อ add แล้ว ให้เราเข้ามาหน้า info จะได้แบบนี้

ต่อไปเป็นการลง Smart Contract หรือ ChainCode ใน Chain ที่เราสร้างไว้ เนื่องจาก chaincode_example02 ที่ เตรียมไว้ให้นั้น ใช้ได้เฉพาะ v1.0 แต่ตอนผมสร้าง ผมสร้างด้วย v1.2 จำเป็นต้องหา ChainCode ตัวอื่นมาทดสอบโดยผมเลือก fabcar เป็นตัวอย่างจาก fabric-samples ให้เรา Zip ไฟล์ ChainCode แล้วเลือก New Smart Contract แล้วอัพโหลดขึ้นไป

จากนั้นให้เรา Deploy ไปที่ Chain ของเรา โดยกดที่ Deploy จากนั้นเลือก Chain ที่ต้องการ Install เมื่อ Install เสร็จแล้ว ให้เรา Instantiate ChainCode โดยจะมีให้ใส่ Function และ Arguments จากตัวอย่าง fabcar ให้เราใส่ function เป็น initLedger และ Arguments ใส่ , ไป เมื่อเสร็จแล้วให้รอ status เปลี่ยนเป็นสีเขียวและขึ้นว่า Instantiated เราจะสามารถ Invoke หรือ Query ได้แล้ว

ให้เราลอง เข้าไป Query ดูครับโดยใส่ Function: queryAllCars และ Arguments: , จะได้ผลออกมาตามนี้ครับ

จบละครับ การใช้ Cello โดยใช้ Worker Node เป็นแบบ Docker เดี๋ยวบทความหน้าผมจะอธิบายเสริมส่วนต่างๆนะครับ ว่ามันรันอย่างไร มีที่มาที่ไปอย่างไร สำหรับบทความนี้ดูจะยาวไปแล้ว จบไว้เท่านี้ละกันครับ

ปล. ใครสงสัย หรือทราบถึงปัญหา คุยกันได้นะครับ ผมก็ยังหาวิธีไม่ได้ ถ้ารู้เมื่อไรจะมาอัพเดทให้ครับ ❤

--

--

Theerawat Kaewchote
Theerawat Kaewchote

No responses yet